Quantcast
Channel: Configuration Archives - Framboise 314, le Raspberry Pi à la sauce française....
Viewing all articles
Browse latest Browse all 176

Prenez VRAIMENT la main à distance sur votre Raspberry Pi avec x11VNC

$
0
0

Prendre-la-main-250pxSi 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 🙂

NIVEAU_debutant

Cliquez pour avoir une définition de ces niveaux

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 🙂

 

Attention !
Ce tutoriel ne fournit pas une connexion sécurisée car il n’utilise pas de solution de communication sécurisée comme SSH. Il ne faudra l’utiliser que sur un réseau local !

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

principe_session locale_600pxLorsque 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

principe_session locale2_600pxLorsque 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

principe_sessionx11_600pxVoilà 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

ssvnc_04Si 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 :

ssvnc_09

Lancement manuel de x11vnc

Cliquez sur Serveur X11VNC dans le menu pour lancer le programme. Après quelques secondes, une fenêtre s’ouvre :

ssvnc_05Laissez 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 !

ssvnc_06Autorisez 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 😉 )

ssvnc_07ssvnc_10Si 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

 

Installation
Si ce n’est pas fait, téléchargez et installer RealVNC Viewer (https://www.realvnc.com/download/viewer/).

Lancez l’exécution de RealVNC sur le PC distant.

viewer_01Saisissez 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.

viewer_02De quoi je mêle ? Ignorez superbement ce message. C’est qui qui commande hein ? Dites lui OK et on n’en parle plus !

viewer_03RealVNC Viewer vous avertit que la connexion ne sera pas chiffrée. Allez on y va, cliquez sur Continuer.

viewer_04Hé 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 !

viewer_05Une 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.

ssvnc_08En 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

Installation
Si ce n’est pas fait, installez KRDC sur système Linux : sudo apt-get install krdc

Ouvrez KRDC sur le poste Linux.

krdc_01Saisissez 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.

krdc_02Une 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.

krdc_03bDans 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.

krdc_04_600px

Cliquez pour agrandir…

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

NIVEAU_avancé

Cliquez pour avoir une définition des niveaux

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

 

 

 

 


Viewing all articles
Browse latest Browse all 176

Trending Articles