Afficher/cacher Sommaire
Il peut être utile de prendre la main à distance sur un PC équipé de GNU/Linux pour aider un de nos amis dans la détresse, ou pour accéder à un ordinateur de la maison constamment allumé, sans écran.
x11vnc
Installation
On va installer donc le paquet x11vnc qui permet à un utilisateur de se connecter sur sa machine à distance à la manière de RDP sur Windows (Connexion Bureau à distance).
Ubuntu et dérivés :
sudo apt-get install x11vnc
Archlinux Manjaro
sudo pacman -S x11vnc
Et voila, c’est installé !
Utiliser x11vnc
Générer un mot de passe
Pour protéger la prise de main à distance, il est recommandé de créer un mot de passe pour permettre la prise de main (où **** est le mot de passe) :
x11vnc -storepasswd "*******" ~/.vnc_passwd
Lancement Manuel
Pour lancer le serveur VNC, c’est en console, en session utilisateur :
x11vnc -many -rfbauth ~/.vnc_passwd -xkb
Il est possible de placer dans son .bashrc
un alias de manière à ne taper qu’un mot mnémotechnique :
alias assistance='x11vnc -many -rfbauth /home/yann/.vnc_passwd -display :0 -listen localhost'
Faire Ctrl+C pour arrêter le serveur vnc.
Tunnel SSH
Vous devez avoir installé et configuré SSH.
Utilisez le drapeau -localhost
avec x11vnc pour qu’il se lie à l’interface locale. Une fois que c’est fait, vous pouvez utiliser SSH pour tunneliser le port ; puis, connectez-vous à VNC via SSH.
ssh -t -L 5900:localhost:5900 remote_host 'x11vnc -localhost -display :0'
# exemple avec clés et port différent de 22
ssh -f -L 5900:localhost:5900 -p 56230 -i /home/yannick/.ssh/e6230 yann@192.168.0.32 'x11vnc -localhost -display :0'
(Vous devrez probablement fournir des mots de passe/phrases de passe pour vous connecter de votre emplacement actuel à votre compte Unix remote_host ; nous supposons que vous avez un compte de connexion sur remote_host et qu’il fait tourner le serveur SSH)
Puis, dans une autre fenêtre du terminal de votre machine actuelle, exécutez la commande :
vncviewer -PreferredEncoding=ZRLE localhost:0
Si le curseur est mal affiché, c’est possible de mettre l’option -cursor
à la ligne de commande x11vnc
Le programme écoute sur le port 5900. Il faut penser à ouvrir le parefeu sur ce port en TCP
Comment configurer x11vnc pour accéder à un écran de connexion graphique ?
En supposant que vous utilisez lightdm pour la connexion, vous pouvez résoudre ce problème en démarrant x11vnc avec la commande :
sudo x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw
Exemple via le tunnel SSH :
ssh -f -L 5900:localhost:5900 -p 52022 marina@82.64.153.201 'sudo x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw'
Mot de passe VNC dans /root/.vnc/passwd
Pour ne pas avoir à saisir le mot de passe de l’utilisateur distant, donner les droits sudo pour l’exécution du programme x11vnc dans le fichier /etc/sudoers
Exemple pour un utilisateur nommé ‘test’
test ALL=(ALL) NOPASSWD: /usr/bin/x11vnc
Script - Tunnel SSH
Ouverture distant et redirection du port 5900 via tunnel ssh, reprise de la main (nohup
)
On mémorise le processus ssh (pidof
)
Lancement de vncviewer
En sortie du viewer, on tue le processus ssh ...
avec kill
nano vnc.sh
#!/bin/bash
nohup ssh -f -L 5900:localhost:5900 -p 56230 -i /home/yannick/.ssh/e6230 yann@192.168.0.32 'x11vnc -localhost -display :0'
p=$(pidof -s ssh)
vncviewer -PreferredEncoding=ZRLE localhost:0
kill $p
echo "FIN"
exit 0
Droits en exécution
chmod +x vnc.sh
TigerVNC
Implantation avec service utilisateur
Afin d’avoir un serveur VNC exécutant x0vncserver, qui est le moyen le plus simple pour la plupart des utilisateurs d’avoir rapidement accès à distance au bureau actuel, créez une unité systemd comme suit en remplaçant l’utilisateur et les options par ceux désirés :
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/x0vncserver.service
[Unit]
Description=Remote desktop service (VNC)
[Service]
Type=simple
#ExecStartPre=/bin/sh -c 'while ! pgrep -U "$USER" Xorg; do sleep 2; done'
ExecStart=/usr/bin/x0vncserver -rfbauth %h/.vnc/passwd
[Install]
WantedBy=default.target
La ligne ExecStartPre attend que Xorg soit démarré par ${USER}.
Pour vous connecter avec votre nom d’utilisateur et votre mot de passe, remplacez ExecStart par /usr/bin/x0vncserver -PAMService=login -PlainUsers=${USER} -SecurityTypes=TLSPlain
Start/enable le service x0vncserver.service