Assistance à distance avec x11vnc

De Wiki Linux62.

Sommaire

Assistance à distance avec x11vnc

Depuis que vous prônez le libre, vous avez peut-être réussi à installer un poste en GNU/linux chez un parent ou une connaissance peu motivée par l'informatique, ou bien vous avez évité de le faire car cette personne habite à plus d'une heure de chez vous et elle nécessiterait un accompagnement rapproché qui ne pourrait être fournit par les voisins qui ne connaissent que xp.

J'ai ainsi installé une Mandrake chez mes parents afin de leur épargner Win98 pour surfer. Seul inconvénient, les voisins ne peuvent pas expliquer comment ouvrir un .wmv reçu par mail et expliquer une simple navigation dans une application au téléphone peut prendre 30 minutes, car on inclut le fait qu'on ne double clique pas le bouton droit de la souris..

Et là j'ai découvert le duo ssh-x11vnc grâce à un article de Karl Runge à http://www.karlrunge.com/x11vnc/. La page est très complète avec une faq à 100+ questions réponses, mon but ici est de faire une procédure simplifiée.

x11vnc est un programme qui renvoie le display :0 vers l'extérieur contrairement à vnc qui renvoie le display :1 ou plus. L'avantage principal par rapport à une session vnc est que l'on peut alors travailler sur le même écran que celui qui est vu par la personne qui est devant l'écran à distance (dans mon cas 300km dont 50km d'eau salée). On envoie le tout dans un tunnel ssh afin de sécuriser la transmission.


Comment s'y prendre

1. Nom de domaine

Afin de permettre la connexion à distance à toute heure, créer un nom de domaine dynamique pour la machine distante, et y installer un client de dns dynamique type ddclient pour maintenir le dns à jour des changement d'IP; ici ça sera monpapa.dyndns.org

2. Connexion ssh sur la machine 'perrier' correspondant à monpapa.dyndns.org avec le user papa.
ssh papa@monpapa.dyndns.org
[papa@perrier /home/papa]$

3. Télécharger l'archive tar de x11vnc depuis monpapa; si le serveur ci-dessous ne répond pas, allez d'abord sur sourceforge:
http://downloads.sourceforge.net/libvncserver/x11vnc-0.8.3.tar.gz?modtime=1163401368&big_mirror=0 sur votre pc pour récupérer une url correcte:
wget http://switch.dl.sourceforge.net/sourceforge/libvncserver/x11vnc-0.8.3.tar.gz

4. Décompresser l'archive
tar zxvf x11vnc-0.8.3.tar.gz

5. Entrer dans le répertoire des sources
cd x11vnc-0.8.3

6. Configurer la compilation. Il faut les librairies de developpement X. Si il ne trouve pas libjpeg, installer libjpeg-devel...
./configure

7. Compiler
make

8. Installer
su (vaut mieux passer en root là...)
make install et sortir de la session root

9. Mettre un mot de passe pour la connection vnc (en plus on teste x11vnc)
x11vnc -storepasswd

Là, vaut mieux saisir un autre mot de passe que celui du user linux. Pour éviter à papa de se souvenir d'un mot de passe potable, la machine est en autologin, de toutes façon, il n'y a que lui qui y accède dans son bureau... On peut alors fermer la session ssh, le poste distant est prêt.

10. La connexion, sur votre machine:
ssh -t -L 5900:localhost:5900 papa@monpapa.dyndns.org 'x11vnc -usepw -localhost -display :0'

11. Lancer le client vnc et se connecter à localhost:0. Fournir le deuxième mot de passe et vous voilà en train de donner un cours d'informatique à distance, par contre mieux vaut tout de même avoir le téléphone à portée de main!

Même sous Windows

Et si vous êtes sur un client Windows (faut bien être boulot de temps en temps), on peut utliser putty qu'il faut paramétrer comme suit:

1. Session: Host Name: monpapa.dyndns.org, Port: 22, Saved Sessions: Chez Papa et 'Save'
2. Tunnels: Source port 5900, Destination localhost:5900 et 'Add'
3. X11: Cocher Enable X11 forwarding et display location = localhost:0 => Cette ligne n'est pas indispensable au fonctionnement
4. SSH: Remote command: x11vnc -usepw -localhost -display :0
5. Data: Auto-login username (en option) papa
6. Session: 'Save' pour ne pas avoir à tout ressaisir la prochaine fois
7. Sélectionner la session et faire 'Open'

Et la sécurité dans tout ça

1. La sécurité est double puisqu'il faut d'abord s'authentifier dans la session ssh puis de nouveau pour la connection vnc.

2. Pour blinder l'accès ssh on peut éviter un nom de login correspondant à un prénom, modifier le /etc/ssh:sshd_config et mettre PermitRootLogin no AllowUsers papa Là, évidemment, on évite un login aussi simple que 'papa'...

3. Ajouter une petite règle iptables pour masquer et interdire la connexion en direct depuis l'extérieur sur autre port que le 22.

Outils personnels
Équipes