Si vous êtes un lecteur habituel du blog, vous vous souvenez sans doute que je vous avais expliqué comment installer et démarrer automatiquement tightvncserver sous Raspbian Jessie.
Alors, me dires-vous, on sait déjà prendre la main à distance sur le Raspberry Pi…. Pourquoi ajouter VRAIMENT dans le titre ? Eh bien cette fois tout ce que vous ferez sur la machine distante sera fidèlement reproduit en local sur le Raspberry Pi ! Vous bougez la souris sur votre PC ? Le curseur se déplace sur l’écran du Raspberry Pi. Vous ouvrez un menu sur l’écran local du Raspberry Pi ? Il s’ouvre aussi sur la machine distante
Prenez la main à distance sur un Raspberry Pi avec x11vnc
Présentation
Comme indiqué plus haut, l’avantage de ce type de prise en main, c’est que tous les mouvements de souris, frappes clavier et affichage écran sont absolument identiques et simultanés sur l’écran local du Raspberry Pi et sur la machine distante sur laquelle vous intervenez.
Imaginez une classe avec 10 Raspberry Pi en service… Vous pouvez vous connecter sur chacun des Raspberry Pi pour voir ce que l’utilisateur est en train de faire, et comment il le fait. De plus si un des participants a un souci, vous pouvez prendre la main à distance sur sa machine et lui montrer comment il faut faire… sans bouger de votre place
Ceci étant dit voilà ce que je vous propose :
- Voir comment fonctionnent les sessions graphiques sur le Raspberry Pi
- Installer x11vnc sur le Raspberry Pi
- Vérifier que ça fonctionne avec RealVNC sous Windows et KDRC sous Linux
- Pour ceux que ça intéresse, lancer x11VNC automatiquement au démarrage de Raspbian
Ça vous va ?
Alors on y va
Comment ça marche ?
Session graphique locale
Lorsque vous ouvrez une session graphique en local sur un Raspberry Pi sous Raspbian Jessie, les informations à afficher sont envoyées au DISPLAY :0. c’est celui qui est affiché sur l’écran local via HDMI si vous êtes connecté(e) à l’écran de cette façon.
Session graphique distante avec tightvncserver
Lorsque vous ouvrez une session distante avec tightvncserver, une nouvelle session graphique est ouverte sur le Raspberry Pi. Les images sont envoyées sur le DISPLAY :1.
Ce que vous affichez sur l’écran de la machine distante est différent de ce qui est affiché sur l’écran du Raspberry Pi. Votre souris et votre clavier interagissent avec votre session graphique, mais absolument pas sur la session DISPLAY :0.
C’est un peu comme si vous étiez connecté(e) sur une autre machine
Session graphique distante avec x11vnc
Voilà ce qui nous intéresse ! Avec une machine distante connectée sur le même DISPLAY :0 que le Raspberry Pi en local. Conséquence : toute action d’une machine (clavier, souris, clics sur un menu, une icône…) est instantanément dupliquée sur l’autre machine. Dans un sens et dans l’autre.
Installation de X11vnc sur le Raspberry Pi
Mettez le système à jour
Comme d’habitude, partez d’une machine mise à jour avant de procéder à l’installation de x11vnc :
sudo apt-get update sudo apt-get upgrade
Installez x11vnc
Vous pouvez maintenant passer à l’installation de x11vnc. Rien de bien compliqué : un simple sudo apt-get install x11vnc fera tout le travail pour vous
pi@raspberrypi:~ $ sudo apt-get install x11vnc Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets supplémentaires suivants seront installés : libvncclient0 libvncserver0 tcl tcl8.6 tk tk8.6 x11vnc-data Paquets suggérés : tcl-tclreadline Les NOUVEAUX paquets suivants seront installés : libvncclient0 libvncserver0 tcl tcl8.6 tk tk8.6 x11vnc x11vnc-data 0 mis à jour, 8 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 1 621 ko dans les archives. Après cette opération, 3 403 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer ? [O/n] o Réception de : 1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libvncclient0 armhf0.9.9+dfsg2-6.1+deb8u1 [118 kB] Réception de : 2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libvncserver0 armhf0.9.9+dfsg2-6.1+deb8u1 [174 kB] .../... Paramétrage de tk (8.6.0+8+b1) ... Paramétrage de x11vnc-data (0.9.13-1.2) ... Paramétrage de x11vnc (0.9.13-1.2) ... Traitement des actions différées (« triggers ») pour libc-bin (2.19-18+deb8u4) . .. pi@raspberrypi:~ $
Une entrée dans le menu
L’installation de x11vnc crée un fichier dans /usr/share/applications. ce fichier s’appelle x11vnc.desktop et il contient les informations destinées à l’insertion d‘une entrée de menu permettant d’accéder à x11vnc :
pi@raspberrypi:/usr/share/applications $ cat x11vnc.desktop [Desktop Entry] Name=X11VNC Server Comment=Share this desktop by VNC Exec=x11vnc -gui tray=setpass -rfbport PROMPT -bg -o %%HOME/.x11vnc.log.%%VNCDISPLAY Icon=computer Terminal=false Type=Application StartupNotify=false #StartupWMClass=x11vnc_port_prompt Categories=Network;RemoteAccess;
Ce qui produit l’affichage suivant dans le menu
Si vous souhaitez franciser cette entrée du menu, rien de plus simple, modifiez le fichier x11vnc.desktop en l’ouvrant avec nano et changez le texte de ces deux lignes :
[Desktop Entry] Name=Serveur X11VNC Comment=Partager ce bureau avec VNC
Ce qui fait que le texte sera en français dans le menu ainsi que la bulle d’aide qui s’ouvre quand on passe la souris sur le texte :
Lancement manuel de x11vnc
Cliquez sur Serveur X11VNC dans le menu pour lancer le programme. Après quelques secondes, une fenêtre s’ouvre :
Laissez le port sur 5900 (en principe le port 5900 correspond au DISPLAY :0, le port 5901 au DISPLAY :1 etc. Si vous modifiez le port, faites le en connaissance de cause et attendez vous à faire des modifs aussi sur la machine qui va se connecter à distance
Si vous avez des fichiers à transférer choisissez un mode de transfert. J’ai coché UltraVNC bien que je n’utilise pas cette possibilité… On ne sait jamais.
Validez vos choix en cliquant sur le bouton OK en bas à gauche de la fenêtre.
Encore quelques secondes d’attente (et on voit sur le moniteur CPU que celui-ci bosse !
Autorisez les connexions distantes (cochez la case Accept Connections) sinon vous risquez d’avoir des soucis pour vous connecter à distance
Dans la zone de texte Password saisissez un mot de passe qui sera demandé lorsque vous vous connecterez à distance. On n’est jamais trop prudent. Sans honte, j’ai choisi raspberry comme mot de passe (bah si un pirate russe hacke mon raspberry pi il aura fait du boulot pour rien ). Vous pouvez laisser ViewOnly Password vide. C’est le mot de passe qui serait demandé pour une connexion en view only (sans possibilité d’interaction).
Cliquez sur Apply pour valiser vos choix puis sur OK.
En haut à droite de la barre de tâches vous voyez apparaître une icône de x11vnc (bon, ils se sont pas forcés pour le côté graphique )
Si vous cliquez sur cette icône, vous ouvrez un menu qui vous permettra de régler certains paramètres de x11vnc.
En particulier vous disposez ici de l’aide de x11vnc mais aussi de la possibilité d’arrêtre x11vnc.
D’autre part l’icône est un indicateur puisque si cette icône disparait cela signifie que x11vnc s’est arrêté de fonctionner pour une raison ou pour une autre.
Suite à ces opérations, x11vnc tourne sur le Raspberry Pi, nous pouvons essayer de nous connecter depuis un poste distant.
Connexion depuis un poste Windows
Lancez l’exécution de RealVNC sur le PC distant.
Saisissez l’adresse et le numéro de port de la machine sur laquelle vous voulez vous connecter (normalement c’est le Raspberry Pi dont on parle depuis le début de cet article ). Cliquez sur le bouton Connexion.
De quoi je mêle ? Ignorez superbement ce message. C’est qui qui commande hein ? Dites lui OK et on n’en parle plus !
RealVNC Viewer vous avertit que la connexion ne sera pas chiffrée. Allez on y va, cliquez sur Continuer.
Hé non ce n’est pas encore fini Entrez le mot de passe que vous avez saisi tout à l’heure dans la fenêtre de x11vnc sur le Raspberry, puis cliquez sur OK.
Allez c’était le clic final !
Une superbe fenêtre s’ouvre sur votre écran et vous voici sur la session de votre Raspberry Pi. Pas de croix noire comme lors du premier lancement de tightvncviewer mais vous avez ici la flèche habituelle de Raspbian Jessie. Bougez la souris, ouvrez le menu et observez l’écran d’origine de votre Raspberry Pi…. Alors ?
Tout en haut, au milieu de la fenêtre il ya un rectangle. Si vous mettez le curseur de la souris dessus vous ouvrez un menu qui vous donne accès aux options de RealVNC.
En particulier une des icônes vous permet d’envoyer CTRL ALT DEL sur la machine distante. Passez le curseur sur les icônes pour obtenir des infos sur l’utilisation de celles-ci.
Connexion depuis un poste Linux
Ouvrez KRDC sur le poste Linux.
Saisissez l’adresse du Raspberry Pi et le numéro de port sur lequel vous pouvez accéder à x11vnc. Cliquez sur la flèche située à droite de la zone de saisie pour accéder à x11vnc.
Une fenêtre de configuration (Host Configuration – KRDC) s’ouvre. Vous pouvez choisir la qualité de transmission. Si votre réseau fonctionne bien, optez pour High Quality. Cochez la case Remember password si vous souhaitez mémoriser le mot de passe.
Lorsque vous avez terminé la configuration, cliquez sur le bouton OK.
Dans la fenêtre qui s’ouvre, saisissez le mot de passe qui vous permet d’accéder à la session ouverte sur le Raspberry Pi puis cliquez sur le bouton OK.
Et voilà votre fenêtre du bureau Raspbian Jessie ouverte dans KRDC…
Bon, il reste un inconvénient… Le lancement de x11vnc est valable pour cette session du bureau. Si vous éteignez le Raspberry Pi, il faudra relancer à chaque fois x11vnc. Pas cool si c’est un Raspberry headless (sans clavier, souris ni écran )
Alors il nous reste une dernière étape : automatiser le lancement de x11vnc !
Lancement automatique sous Raspbian Jessie
Créer un fichier mot de passe
Comme il faut saisir le mot de passe à chaque lancement, ce n’est pas pratique avec un Raspberry Pi headless… La solution, c’est de créer un fichier, d’y ranger le mot de passe et d’indiquer à x11vnc où il doit aller récupérer le mot de passe.
Il n’y a pas d’endroit privilégié pour stocker le mot de passe. Il peut être dans /home/pi/.vnc/ ou dans /etc. C’est cette option que j’ai choisie en créant un fichier x11vnc.pass avec l’option -storepasswd.
pi@raspberrypi:~ $ sudo x11vnc -storepasswd /etc/x11vnc.pass Enter VNC password: Verify password: Write password to /etc/x11vnc.pass? [y]/n y Password written to: /etc/x11vnc.pass pi@raspberrypi:~ $ sudo cat /etc/x11vnc.pass ë▒▒▒▒▒
Ne cherchez pas à lire le mot de passe, il n’est bien entendu pas stocké en clair dans le fichier !
Créer le service pour Raspbian Jessie
Pour permettre le lancement automatique, il faut créer un fichier x11vnc.service dans /lib/systemd/system avec nano.
sudo nano /lib/systemd/system/x11vnc.service
Saisissez les lignes suivantes dans le fichier
[Unit] Description=Start x11vnc at startup. After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared [Install] WantedBy=multi-user.target
Maintenant que le service est prêt il faut demander à systemd de le prendre en compte pour qu’il soit lancé au démarrage :
sudo systemctl daemon-reload
sudo systemctl enable x11vnc.service
pi@raspberrypi:/usr/share/applications $ sudo systemctl daemon-reload pi@raspberrypi:/usr/share/applications $ sudo systemctl enable x11vnc.service Created symlink from /etc/systemd/system/multi-user.target.wants/x11vnc.service to /lib/systemd/system/x11vnc.service.
Bon, tout s’est bien passé, on peut rebooter le Raspberry Pi, vérifier en se connectant à distance que le lancement automatique de x11vnc a bien été fait.
Conclusion
C’est une demande souvent formulée : « tightvncserver c’est bien mais ce que je voudrais c’est intervenir sur le bureau de Raspbian Jessie, celui qui est ouvert, pas un autre…«
Dans cette article vous trouverez les bases pour prendre la main à distance sur un Raspberry Pi. Tout n’est pas parfait, vous voudrez sans doute adapter la résolution de l’écran… Bon, je vous laisse un peu de boulot Vous ne pensiez pas vous en tirer comme ça ?
Et puis si vous êtes sage, on verra peut-être un de ces jours comment prendre la main à distance mais de façon sécurisée, cette fois… Mais ça… c’est une autre histoire !
Sources
- http://www.karlrunge.com/x11vnc/#downloading
- https://sourceforge.net/projects/ssvnc/
- http://www.karlrunge.com/x11vnc/ssvnc.html