Cette page est en cours de rédaction.
Apportez votre aide…
Ceci est une ancienne révision du document !
XRDP ou comment se connecter depuis un client RDP® sur un serveur Ubuntu
On peut être confronté à des machines windows® verrouillées, sur lesquelles on ne peut rien installer, et où seul le protocole RDP® est disponible. Par exemple des clients légers.
Si l'on souhaite se connecter depuis ces machines sur un serveur Ubuntu, une seule solution : installer XRDP sur ce dernier.
Prérequis
Savoir installer un paquet, éditer un fichier et contrôler la machine distante à l'aide d'un autre protocole, typiquement ssh, en vue des tests.
1. Structure générale
Xrdp est une couche s'installant sur le serveur. Elle fait office de serveur RDP® pour le client qui veut se connecter, et se comporte comme un client VNC pour le serveur ubuntu.
Entre les deux, se glisse un gestionnaire de session dénommé sesman, qui :
- donne le choix, à la connexion, entre différents modules. Ceux-ci sont listés dans /etc/xrdp/xrdp.ini, on y trouve bien sûr VNC.
- appelle PAM pour l'authentification.
- fait en sorte que le néo client VNC, avatar du client RDP, se connecte à une session VNC fonctionnelle. Le plus souvent en la créant, à l'aide des paramètres choisis dans /etc/xrdp/sesman.ini et /etc/xrdp/startwm.sh.
2. Installer et (re)découvrir VNC
Comme XRDP fait appel à VNC, il n'est pas inutile de découvrir ce dernier (si vous ne le connaissez pas déjà). Ce n'est pas primordial non plus. Dans ce cas, contentez vous d'installer le paquet vnc4server et passez au §3.
VNC permet de prendre le contrôle à distance d'une machine (comme déjà décrit ici) et il permet, en outre, de créer des machines virtuelles. Ainsi, "à côté" de la session (numérotée :0) ouverte "en réel" sur la machine distante, peuvent exister d'autres sessions :1, :2, etc. qui utilisent les ressources de cette même machine.
Pour créer une session virtuelle, il n'est pas nécessaire d'être root. Il faut exécuter sur le serveur la commande "vncserver", accompagnée de plusieurs paramètres, dont certains sont indispensables pour corriger (en) le bug #78282 (voir post #57).
Pour visualiser une session distante déjà créée, il faut exécuter sur le client la commande "vncviewer". Celle-ci s'accompagne inévitablement du nom de la machine distante ainsi que du n° de la session créée.
Remarque : Il existe une foultitude de version de VNC : UltraVNC, RealVNC, TightVNC, X11VNC, etc. … Faites donc une recherche rapide dans Synaptic. Je n'ai pas cherché à les différencier : le tuto présenté ici utilise la version du paquet vnc4server.
2.1. Sur le serveur
sudo apt-get install vnc4server
installe le paquet vnc4server qui permet la création des machines virtuelles. Créons notre première machine, numérotée 14 (Pourquoi 14 ? Parce que) :
vncserver :14
Ah, surprise, lors de cette première exécution, "vncpassword" se lance et demande un mot de passe qui sera celui de toutes les machines créées par l'utilisateur en cours sur le serveur. Il est stocké dans le fichier /home/utilisateur_en_cours/.vnc/passwd. Pour en changer, il faut supprimer ce fichier et exécuter à nouveau "vncpassword".
L'examen de /home/utilisateur_en_cours/.vnc/serveur:14.log, montre les erreurs suivantes :
- l'absence du fichier /etc/X11/xserver/SecurityPolicy. Solution : Créer le répertoire /etc/X11/xserver/ et y copier le fichier SecurityPolicy que l'on trouve (en) on the net (voir post #5).
- une liste de polices de caractères non trouvées. Il s'agit du bug déjà évoqué. Solution : Ajouter les paramètres -fp /usr/share/fonts/X11/misc ainsi que -extension XFIXES.
La nouvelle commande ressemble donc à :
vncserver :14 -fp /usr/share/fonts/X11/misc -extension XFIXES
Désormais, le log ne fait plus mention d'aucune erreur. Mais si l'on se connecte à la machine ainsi créée (cf §2.2.), on est déçu : pas d'environnement graphique, un fond grisâtre et une pauvre console. Il faut maintenant utiliser son éditeur préféré pour modifier le fichier /home/utilisateur_en_cours/.vnc/xstartup en sorte qu'il ressemble à ceci :
#!/bin/sh # Uncomment the following two lines for normal desktop: unset SESSION_MANAGER exec sh /etc/X11/xinit/xinitrc #[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup /* Ce répertoire n'existe pas ou plus */ [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources #xsetroot -solid grey /* Joli fond d'écran gris */ #vncconfig -iconic & /* Fait apparaître vncconfig sous forme de case à cocher en fond d'écran */ #xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & /* Terminal tout pourri */ #twm & /* twm est un ancien gestionnaire de fenêtre, très rudimentaire */
On doit ensuite rendre ce fichier exécutable en lui donnant les droits 755 (s'il ne les as pas déjà).
sudo chmod 755 /home/utilisateur_en_cours/.vnc/xstartup
Désespoir, l'examen de /home/utilisateur_en_cours/.vnc/serveur:14.log montre une nouvelle erreur :
- Permission denied pour /etc/X11/xinit/xinitrc. Solution : Le rendre exécutable en lui donnant les droits 755.
sudo chmod 755 /etc/X11/xinit/xinitrc
À présent, tout doit marcher convenablement. Lorsqu'on en a fini, on peut fermer la session distante avec la commande :
vncserver -kill :14
Enfin, d'autres paramètres peuvent être passés avec la commande "vncserver" :
- depth (8, 15, 16, 24) qui force la profondeur des couleurs du bureau créé.
- localhost (activé/désactivé) qui n'autorise que les connexions provenant de la même machine.
- NeverShared (activé/désactivé) pour le partage de la session.
- DisconnectClients (activé/désactivé) qui déconnecte en cas de nouvelle connexion non partagée.
Ces options seront très utiles avec XRDP. Pour les autres paramètres, on se reportera avec profit aux pages man de vncserver :
man vncserver
2.2. Sur le client
Installons tout d'abord le paquet contenant le client VNC :
sudo apt-get install xvnc4viewer
Premier essai :
vncviewer serveur:14
visualise la session virtuelle numérotée :14 que nous avons créée sur la machine nommée "serveur". Il faut saisir le mot de passe donné lors de la première exécution de "vncserver". Il n'est pas obligatoire d'être l'utilisateur qui a créé la session. Ainsi, la même commande exécutée par un autre utilisateur, amène à la même fenêtre de connexion où le nom de l'utilisateur est grisé. Il suffit de renseigner correctement le mot de passe. On peut aussi tenter :
vncviewer serveur:0
afin de voir la session "réelle" éventuellement ouverte sur la machine distante. Cela fonctionne si l'utilisateur connecté à coché la case "Autoriser d'autre utilisateurs à voir votre bureau" dans les préférences du bureau à distance.
On peut passer d'autres arguments intéressants avec la commande "vncviewer" (Autoselect=0 pour éviter d'engorger la bande passante, PreferredEncoding, ZlibLevel …), mais comme nous ne maîtrisons pas le client RDP, il n'est pas utile de les approfondir.
3. Rajouter la couche XRDP sur le serveur
Maintenant que le terrain est bien déblayé, un petit :
sudo apt-get install xrdp
installe le paquet xrdp, la dernière version étant la 0.4.1, elle est présente dans les dépôts.
3.1. Configurons les fichiers système
Pour l'instant, rien ne fonctionne, car la section [Xvnc] du fichier /etc/xrdp/sesman.ini ne contient que deux arguments :
param1=-bs /* désactive le "backing store support" sur tous les écrans */ param2=-ac /* interdit l'édition des listes de contrôle d'accès par le client */
Il faut donc en compléter la section [Xvnc] avec :
param3=-fp param4=/usr/share/fonts/X11/misc param5=-extension param6=XFIXES
Personnellement, j'y ai aussi ajouté :
param7=-depth param8=16 param9=-localhost param10=-NeverShared
On peut aussi ajuster les autres paramètres à sa convenance (sections [Globals], [Security], etc. …). N'oublions pas de redémarrer avec :
sudo /etc/init.d/xrdp restart
Une nouvelle difficulté surgit si l'on veut passer, par exemple -DisconnectClient=0. En effet, impossible de glisser le signe "=" nulle part.
On s'en sort grâce au script /etc/xrdp/startwm.sh auquel on ajoute la ligne suivante :
vncconfig -set DisconnectClients=0
pour avoir finalement :
#!/bin/sh if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG LANGUAGE fi vncconfig -set DisconnectClients=0 . /etc/X11/Xsession
Attention, l'utilisation de "vncconfig" fait que le nouveau paramètre ne sera pris en compte que lors du démarrage d'une nouvelle session.
3.2. Personnalisons le menu de connexion
Pour finir, on peut modifier le fichier /etc/xrdp/xrdp.ini, pour n'y laisser paraître que la connexion que nous avons correctement ajustée. On conserve simplement les sections [globals] et [xrdp1] que l'on renomme pour le fun :
[globals] bitmap_cache=yes bitmap_compression=yes port=3389 crypt_level=low channel_code=1 [xrdp1] name=legaub vous invite sur un serveur Ubuntu lib=libvnc.so username=ask password=ask ip=127.0.0.1 port=-1
Redémarrons le service. Vous pouvez désormais vous connecter à votre serveur en utilisant le protocole RDP®.
Voir aussi
- VNC (Virtual Network Computing) sur la documentation ubuntu-fr.
- Le tuto de juin 2007 sur planet ubuntu-fr, qui présente bien l'aspect théorique.
- RDP sur un serveur ubuntu ? sur le forum ubuntu-fr.
Contributeurs principaux : legaub