J’espère qu’à la fin de ce tutoriel vous allez vous dire que finalement ce n’était pas si compliqué et que surtout ça marche pour vous. Le besoin est simple. Il s’agit de pouvoir prendre le contrôle à distance sur une machine Linux à distance. Enfin pas vraiment, car ici, on va parler de réseau local, mais je vous écris cet article, car j’ai plusieurs machines en local, et c’est beaucoup trop contraignant d’utiliser un écran avec clavier souris sur chacune des machines. Si vous avez plusieurs machines, vous n’allez pas débrancher rebrancher vos périphériques à chaque fois …
Attention, je connais très bien SSH pour avoir un accès via le terminal, mais ce n’est pas ce qui nous intéresse ici. J’ai déjà écrit plusieurs articles concernant SSH qui est largement plus adapté pour administrer des serveurs avec par exemple l’envoi ou le téléchargement de fichiers via SCP, l’envoi de fichier entre deux serveurs de manière sécurisée ou encore l’utilisation d’un fichier de configuration SSH pour gagner du temps pour se connecter à ses machines. Cependant, ce n’est pas ce qui nous intéresse ici, car nous voulons afficher l’interface graphique de notre distribution Linux.
L’idée, c’est donc que vous avez votre réseau local avec vos machines sous Ubuntu, Debian ou autre qui tournent h24 pour vos besoins, mais votre problème, c’est que vous voulez prendre la main de temps en temps dessus. En effet, il faut faire les mises à jour, relancer un script qui plante, bref, voir ce qu’il se passe. C’est un besoin qui semble assez naturel dans ce genre de cas.
Je préfère préciser bien qu’il s’agit d’une prise de contrôle de votre machine en local. Dans le cas contraire, SSH avec paire de clés sera beaucoup plus adapté dans la plupart des cas. En-tout-cas en tant que « vrai » administrateur système.
VNC pour contrôler l’interface graphique à distance
C’est là qu’intervient VNC (Virtual Network Computing). Si vous ne connaissez pas, c’est un outil qui permet d’afficher et de contrôler à distance l’interface graphique d’une autre machine. En gros, avec VNC, vous voyez l’écran de votre ordinateur distant directement sur votre poste principal, comme si vous y étiez physiquement branché avec un écran, un clavier et une souris. Pratique non ?
L’avantage de VNC, c’est qu’il ne se limite pas à la ligne de commande. Bien sûr, pour beaucoup de tâches, le terminal suffit largement, mais parfois vous avez besoin de passer par l’interface graphique : ouvrir une application, vérifier une fenêtre qui plante, ou simplement manipuler un logiciel qui n’a pas d’équivalent en CLI. Dans ce cas, VNC devient un allié très utile.
Maintenant, il faut aussi être honnête : VNC n’est pas parfait. Ce n’est pas l’outil le plus rapide du monde, surtout si vous espérez streamer une vidéo ou faire de la 3D à distance. Ce n’est pas fait pour ça. Son but, c’est avant tout de dépanner et d’administrer une machine en ayant accès à son environnement graphique. Et en plus, comme il n’est pas chiffré par défaut, il faut être prudent : l’utiliser tel quel sur Internet serait une très mauvaise idée. Dans notre cas, on est sur du réseau local, donc on peut se permettre un peu plus de souplesse, mais il est toujours bon de garder ces limites en tête.
VNC c’est une solution simple, éprouvée et largement utilisée pour prendre la main graphiquement sur une machine Linux (ou même Windows, ça marche aussi). Ça fait le job pour l’administration en local, et c’est exactement ce dont on a besoin ici.
Installer le service VNC sur le PC Linux (Ubuntu, Debian, Mint, Cinnamon, …)
Ce tutoriel complet est conçu pour vous permettre de prendre le contrôle de votre bureau sur Ubuntu. Comme je l’ai précisé précédemment cela signifie que vous verrez et interagirez avec la même session que si vous étiez physiquement devant l’ordinateur, et non une session virtuelle séparée. Nous utiliserons un serveur VNC appelé x11vnc, qui est spécifiquement conçu pour partager l’affichage physique actuel. C’est la solution la plus simple pour notre besoin.
Ouvrez un terminal sur votre machine, mettez à jour la liste de vos paquets pour vous assurer d’avoir les dernières versions et installez x11vnc avec la commande :
sudo apt install x11vnc
Ensuite, vous allez devoir définir un mot de passe qui sera utilisé pour vous connecter depuis Windows, un autre système Linux ou encore macOS depuis votre client VNC. Dans le terminal, lancez la commande suivante. Elle va vous inviter à créer et à stocker un mot de passe de manière sécurisée pour pouvoir utiliser la prise contrôle à distance :
x11vnc -storepasswd
Le terminal vous demandera Enter VNC password:.
Saisissez le mot de passe que vous souhaitez utiliser.
Il vous demandera Verify password:. Saisissez-le à nouveau. Le système confirmera que le mot de passe a été enregistré dans le fichier /home/VOTRE_NOM_UTILISATEUR/.vnc/passwd.
Création d’un service pour le démarrage automatique de VNC
Pour que VNC se lance tout seul à chaque redémarrage, nous allons créer un service systemd, qui est le gestionnaire de services moderne de Linux. Nous allons créer un fichier de configuration pour notre nouveau service. Utilisez l’éditeur de texte nano (ou vi si vous préférez) pour créer ce fichier. Il faut les droits d’administrateur, d’où le classique sudo :
sudo nano /etc/systemd/system/x11vnc.service
Une fenêtre d’édition vide va s’ouvrir. Copiez et collez l’intégralité du texte ci-dessous dans cette fenêtre.
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/VOTRE_NOM_UTILISATEUR/.vnc/passwd -rfbport 5901 -shared
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Attention il faut remplacer VOTRE_NOM_UTILISATEUR dans la ligne ExecStart par votre propre nom d’utilisateur Ubuntu. Vous pouvez trouver votre nom d’utilisateur en tapant whoami dans un autre terminal.
Ce fichier est un service systemd qui permet de lancer automatiquement x11vnc
au démarrage de la machine. La première partie, [Unit]
, sert simplement à décrire le service et à préciser qu’il doit démarrer une fois que le système a atteint l’état multi-utilisateur (c’est-à-dire quand la machine est prête à fonctionner normalement).
Ensuite, dans la section [Service]
, on définit comment x11vnc
doit être lancé. Ici, la commande ExecStart
contient toutes les options nécessaires :
-auth guess
laissex11vnc
deviner le fichier d’autorisation pour accéder au serveur X,-forever
et-loop
assurent que le service reste actif même si une déconnexion ou une erreur survient,-noxdamage
améliore la compatibilité graphique et évite certains problèmes d’affichage,-repeat
gère correctement les touches répétées au clavier,-rfbauth
indique le fichier où est stocké le mot de passe VNC,-rfbport 5901
définit le port d’écoute (ici 5901),- et
-shared
permet à plusieurs clients de se connecter en même temps.
Les directives Restart=on-failure
et RestartSec=5
demandent à systemd de relancer automatiquement x11vnc
s’il s’arrête par erreur, avec un délai de 5 secondes avant chaque tentative.
Enfin, la section [Install]
précise que ce service doit être rattaché à la cible multi-user.target
, ce qui permet de l’activer pour qu’il démarre automatiquement à chaque boot avec la commande :
Maintenant que le fichier de service est en place, il faut indiquer à systemd de le prendre en compte et de l’activer pour qu’il se lance automatiquement au démarrage de la machine. Rechargez le gestionnaire systemd afin qu’il détecte le nouveau fichier de service :
sudo systemctl daemon-reload
Activez le service pour qu’il soit exécuté à chaque démarrage :
sudo systemctl enable x11vnc.service
Lancez immédiatement le service, sans attendre un redémarrage :
sudo systemctl start x11vnc.service
Vérifiez que tout fonctionne correctement :
sudo systemctl status x11vnc.service
Si tout s’est bien passé, vous devriez voir une ligne verte indiquant active (running). Cela signifie que votre serveur VNC est bien lancé et qu’il redémarrera automatiquement à chaque boot. Pour sortir de l’affichage du statut, appuyez simplement sur la touche q.
Configuration du firewall UFW pour VNC
Pour que les connexions depuis le réseau soient acceptées, nous devons ouvrir le port 5901 dans le pare-feu de notre distribution dérivée de Debian. Autorisez le port 5901 :
sudo ufw allow 5901/tcp
Assurez-vous que le pare-feu est bien actif :
sudo ufw enable
Si le pare-feu était déjà actif, la première commande suffit. Votre machine Ubuntu est maintenant entièrement configurée pour faire fonctionner VNC en local. Je ne l’ai pas précisé, mais ce sera très utile pour vous de fixer l’adresse IP de votre machine sur votre réseau local. Cela vous évitera de la chercher lorsque votre DHCP décide de changer d’IP pour votre machine. C’est assez trivial à faire donc je ne vais pas en parler ici.
Se connecter via VNC depuis votre PC sous Windows
J’évoque Windows, car c’est dans l’environnement où je me suis retrouvé en faisant cet article. Cependant, c’est exactement la même chose en se connectant depuis macOS ou encore une autre machine Linux. La seule chose qui change, c’est éventuellement votre client VNC. Vous deviez néanmoins vous y retrouver.
Donc, dans notre option Windows, il faut donc choisir un client VNC. Je trouve ce terme horrible et daté, mais j’ai vu que parfois, on parlait de visionneuse … C’est un terme que je trouve terrible et que je préfère oublier, mais soit, il faut bien choisir un programme et mon choix se porte sur TightVNC. Il existe d’autre client comme RealVNC ou encore UltraVNC pour citer les 3 principaux, mais il s’agit plus de goûts qu’autre chose, au final, ils font la même chose.
Avec TightVNC, ouvrez le client VNC. Dans le champ VNC Server ou Remote Host, indiquez l’adresse IP de votre machine Ubuntu ou autre suivie du port configuré précédemment. Par exemple :

Il ne vous reste plus qu’à cliquer sur « Connect » dans votre client VNC. Une fenêtre s’ouvrira alors vous demandant le mot de passe : saisissez celui que vous avez configuré plus haut dans cet article.

Et voilà ! Vous devriez maintenant voir apparaître, en temps réel, le bureau de votre machine directement sur votre PC Windows. Vous pouvez le contrôler entièrement avec votre clavier et votre souris, comme si vous étiez devant l’écran. Mieux encore, après chaque redémarrage de votre machine Ubuntu, le service VNC se lancera automatiquement, et vous pourrez vous reconnecter de la même manière, sans avoir à refaire la configuration.
