Publié le 22 août 2016 - par

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

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

 

 

 

 

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

32 réflexions au sujet de « Prenez VRAIMENT la main à distance sur votre Raspberry Pi avec x11VNC »

  1. Bernard B

    Une solution intéressante pour faire de la sensibilisation à l’informatique avec quelques Raspberry en local.
    Merci François pour le retour aux sources et au coeur de métier de ce blog c’est à dire les articles orientés plutôt hard et système que langage de programmation.

    Cordialement.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Bernard
      merci pour ce retour 🙂
      les langages font aussi partie de l’apprentissage de l’informatique et c’est pour cela que j’ai ouvert les pages de framboise314 avec plaisir aux auteurs qui se sont proposés
      Mais bon…. je suis quand même un hardeux d’origine 😀
      cordialement
      François

      Répondre
  2. gUI

    A noter qu’il existe aussi des visionneuses VNC sous Android, donc on peut faire mumuse avec son Rasp depuis une tablette ou un smartphone (je ne sais pas sous iOS mais je me doute que ça doit exister aussi).

    Répondre
  3. Johann CAMBOLY

    Très intéressant. Merci.
    J’utilise « xrdp » personnellement, « sudo apt-get install xrdp », Connexion bureau à distance et Hop.

    Répondre
  4. Faouzi

    Bonsoir François,
    Merci pour ce tuto très intéressant.
    Par contre, quand je me connecte et je lance kodi je ne le vois pas sur ma session VNC.
    Il se lance seulement sur la TV 🙁
    Une idée pour palier à ce pb?
    Merci

    Répondre
  5. Sylvain

    J’utilise principalement de l’accès ssh (via Smartty) pour mes raspberry avec configuration du NAT de la freebox mais j’ai testé recemment Teamviewer sur le raspberry est c’est vraiment sympa car on a accès même en mode console.

    Pas besoin de configurer la box, si on a les 9 numéros d’identifiant alors ça marche

    plus besoin de passer par des conversion X86 comme on voit sur beaucoup de tuto sur le net pour le faire marcher mais l’adresse de téléchargement pour raspberry n’est pas simple à deviner (je suis tombé dessus par hasard)
    https://www.teamviewer.com/iotcontest

    Répondre
      1. François MOCQ Auteur de l’article

        Merci Sylvain
        j’en étais resté également aux versions compliquées de Teamviewer pour le Raspi ! Merci pour cette info qui va valoir un nouvel article 🙂
        cordialement
        François

        Répondre
  6. Doudy

    @Sylvain
    J’ai essayé d’installer Teamviewer sur mon Pi3-Jessie
    via lien : https://www.teamviewer.com/iotcontest
    après une « Attente d’authentification » assez longue, j’ai le message suivant : « L’installation du fichier a échoué » – « Veuillez vérifier les mots de passe ou les paramètres du compte » ????

    Une idée ?

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Doudy
      ici ça fonctionne sans problème… enfin presque
      le transfert de fichiers ne fonctionne pas mais la prise de main va très bien
      je préparer un article…
      cordialement
      François

      Répondre
  7. Doudy

    Moi le téléchargement du fichier « teamviewer-host_11.0.63329_armhf.deb » fonctionne.
    Depuis mon dossier Downloads, je clique deux fois dessus, préparation de l’installation et ensuite le message d’erreur

    Via LXTerminal en mode administarteur : dpkg -i teamviewer-host_11.0.63329_armhf.deb
    Message :
    dpkg: erreur de traitement du paquet teamviewer-host (–install) :
    problèmes de dépendances – laissé non configuré
    Des erreurs ont été rencontrées pendant l’exécution :
    teamviewer-host

    Voilà, voilà !

    Répondre
    1. François MOCQ Auteur de l’article

      d apres la page de man (RTFM)
      http://pwet.fr/man/linux/administration_systeme/apt_get
      -f, –fix-broken
      Correction~; essaye de réparer un système dont les dépendances sont défectueuses. Cette option, utilisée avec install ou remove, peut omettre tout paquet de façon à permettre à APT de déduire une solution viable. Chaque paquet spécifié doit complètement corriger le problème. Cette option est quelquefois nécessaire lorsque l’on exécute APT pour la première fois~; APT lui-même interdit les dépendances défectueuses dans un système. Il est possible que la structure de dépendances d’un système soit tellement corrompue qu’elle requiert une intervention manuelle (ce qui veut dire la plupart du temps utiliser dselect(8) ou dpkg –remove pour éliminer les paquets en cause). L’utilisation de cette option conjointement avec -m peut produire une erreur dans certaines situations. Élément de configuration~: APT::Get::Fix-Broken.

      Comme lors de l’install de Teamviewer apt s’aperçoit qu’il manque des dépendances il ne peut pas terminer l’install. le -f lui dit d’installer ce qui manque pour finir l’install 😉
      @+

      Répondre
  8. Doudy

    Bonjour,
    Constaté ce matin que Teamviewer démarre automatiquement sur mon Pi au lancement de celui-ci.
    Comment faut-il faire pour supprimer ce lancement automatique ?
    Merci.

    Répondre
  9. Graussak

    Merci pour ce sujet. j’ai fais basculer tous mes Rpi de tightvncserver à x11vnc.

    J’ai édité le fichier config.txt pour forcer l’affichage à la résolution souhaitée puisque les Rpi ne sont pas reliés à un écran.
    sudo nano /boot/config.txt
    supprimer les # devant les lignes
    hdmi_force_hotplug=1
    hdmi_group=XX
    hdmi_mode=XX
    Il ne reste juste qu’à choisir le groupe/mode correspondant à la résolution.
    pour du 1440×900 60hz
    hdmi_group=2
    hdmi_mode=47

    Répondre
  10. Christian

    Bonjour,
    Merci pour ce tuto !
    Pour info : j’ai installé x11vnc sur 2 sd card différentes (Rpi2 + Jessie) et dans les 2 cas l’icône n’est pas apparue dans le menu Internet. Il a fallu que j’édite le fichier x11vnc.desktop et que je le sauvegarde (sans forcément y apporter de modification) pour que l’icône apparaisse (et que je puisse établir la connexion) …

    Répondre
  11. davidobrasil

    salut,
    toute l installation c bien passer par contre je coince sur le lancement automatique sous raspbian jessie
    j arrive a creer le mot de passe par contre :
    Creer le service pour Raspbian jessie
    j ai pas compris voila ce que j ai fais :
    i@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 nano /lib/systemd/system/x11vnc.service
    pi@raspberrypi:~ $ sudo systemctl daemon-reload
    pi@raspberrypi:~ $ sudo systemctl enable x11vnc.service
    Failed to execute operation: Bad message
    pi@raspberrypi:~ $
    en fait c le dernier paragraphe que j ai pas compris.
    Disons que je suis plus que debutant et il me faut vraiment lancer x11vnc au demarrage car pas d ecran ni clavier.
    merci par avance car j adore ton site très facile pour un novice comme moi tuto super bien fait.
    a très bientôt.
    PS j aimerais échanger avec toi d un programme que j ai decouvert  » JARVIS » sur raspberry merci a plus

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      si vous êtes débutant pourquoi ne pas utiliser VNC qui est livré avec Raspian en natif ? Juste une case à cocher et vous avez la main sur le Raspberry Pi sans rien faire d’autre 🙂
      démarrage assuré
      cordialement
      François

      Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.