Cette page est considérée comme vétuste et ne contient plus d'informations utiles.
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.

Cette page est en cours de rédaction. Le brouillon manuscrit se trouve sur ma table de travail.

MERCI DE NE PAS MODIFIER CETTE PAGE TANT QUE CET AVERTISSEMENT SERA LÀ.

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.

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.

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 ferme la session distante avec la commande :

vncserver -kill :14

Pour terminer, 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 serveur:14 que nous avons créée sur la machine "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 enfin 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.

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 ajuster ce fichier à sa convenance, et 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

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 connecte 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®.


Contributeurs principaux : legaub.

  • xrdp.1265789726.txt.gz
  • Dernière modification: Le 18/04/2011, 14:41
  • (modification externe)