logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


x11vnc

Introduction

Ce programme permet de prendre le contrôle physique d'un ordinateur à distance ( contrôler clavier, souris, voir l'écran etc …). Utile pour dépanner une personne à distance ou utiliser un ordinateur sans écran ( serveur, ou écran abîmé… ). x11vnc est un programme à installer sur l'ordinateur distant à contrôler ( partie serveur ). Il fonctionne de paire avec un “client VNC” ( un second programme à installer sur votre machine ex : xtigervncviewer ), qui vous donnera le contrôle de la machine distante. x11vnc vient de X11 ( le serveur graphique de Linux ) et VNC, le nom du protocole utilisé ici ( Virtual Network Computing ).

Installation

Sur le poste distant à contrôler, que nous nommerons “serveur”

apt install x11vnc

Puis sur votre poste local ( client ) : Il existe de nombreux clients VNC ( graphiques, ou qui se lancent en console , multiprotocols etc). nous prendrons en exemple un client simple : tigervnc-viewer

apt install tigervnc-viewer
xtightvncviewer est un autre client VNC proche de tigervnc-viewer
vncviewer est un alias de ces deux client cités avant. C'est pourquoi dans les tutos sur x11vnc, vous verrez souvent ces 3 noms pour parler du client. Ca reste en gros la meme chose

Exemple

L'exemple suivant n'est pas configuré NI SECURISE et n'est la qu'a titre éducatif. Prenez l'exemple du chapitre suivant avec un mot de passe pour une réelle utilisation de VNC !

Sur le serveur distant à contrôler ayant une session graphique démarrée : lancez le serveur x11vnc

x11vnc

Le serveur x11vnc se lance, affiche ses informations dans votre console, et vous indique qu'il est prêt et attend une demande de connection d'un client sur le port par défaut 5900 :

retour de la commande
...
The VNC desktop is:      vnd:0
PORT=5900
...

A présent, votre poste local, lancez le client vnc ( xtigervncviewer ) en indiquant l'adresse IP de votre serveur ( ex: 192.168.122.140 ):

xtigervncviewer IP_du_SERVEUR

Une fenetre graphique s'ouvre, affichant l'écran distant, dont vous pouvez contrôler la souris et le clavier LOL.

Pour quitter depuis le poste client : fermez la fenetre. Ou, pour quitter depuis le poste serveur; stoppez le programme x11vnc depuis la console ou il a été lancé avec CTRL + C

Configuration

x11vnc permet beaucoup de configurations : des méthodes pour sécuriser par mots de passe, simplement montrer l'écran ou donner le controle complet ( avec souris clavier ), multi utilisateurs … Lisez le manuel

man x11vnc

.

Quelques options essentielles :

Option Explication Exemple
-display disp Précise l'affichage X11 à utiliser. Généralement :0 si vous n'avez qu'un écran. -disp :O
-auth fichier Nécessaire si x11vnc est lancé depuis une connection distante ssh ou en tant que service, ou par un script au démarrage du systeme ( donc lancé par root et non par vous ). Dans ce cas x11vnc doit s'identifier auprès du “serveur X” ( serveur graphique de Linux ) en montrant un “cookie” ( Xautority ); sans quoi le serveur X rejettera x11vnc et l'écran sera inaccessible. Le chemin de ce cookie dépend de votre gestionnaire de connection ( Lightdm, gdm3 etc ). Pour le trouver, dans une console sur votre serveur, faites :
pgrep -a Xorg | grep -o '[-]auth [^ ]*'
Pour lightdm :  -auth /var/run/lightdm/root/:0
Pour gdm3 : -auth /run/user/1000/gdm/Xauthority

etc…

-shared Autorise plusieur clients a se connecter en meme temps au serveur x11vnc
-forever (identique à -many ) A la déconection du client, x11vnc reste allumé en attente d'autres demandes. Utile pour lancer un serveur vnc toujours allumé .
-xkb FIXME Aide a configurer le clavier si différent entre serveur et client.
-bg (background) Va en arrière plan ( apres le message de lancement ). Utile pour les scripts ( ex: au demarrage du systeme ). Si besoin, activez les “logs” en fichiers, pour retrouver les messages de x11vnc.
logs FIXME
Option sécurité Choisissez une des méthodes suivantes pour sécuriser votre serveur vnc Exemple
-rfbauth fichier_mot_de_pass Méthode conseillée ! Protège votre serveur vnc par un mot de passe que vous définirez dans un fichier. La première fois avant d'utiliser cette option vous devrez créer et enregistrer un mot de passe ( par défaut dans ~/.vnc/passwd ) avec la commande
x11vnc -storepasswd
-rfbauth ~/.vnc_passwd
-usepw Si pas de mot de passe déjà stocké sur la machine, alors x11vnc vous demande d'entrer un mot de passe dans la console. Puis vous propose de l'enregistrer dans ~/.vnc/passwd pour les prochains lancements de x11vnc
-passwd Méthode déconseillée car le mot de passe sera visible dans votre ligne de commande depuis la liste des processus en cours Définit un mot de passe. -passwd secret
de même que la sécurisation par mot de passe ,

il y a possibilité de créer un “tunnel ssh” (voir ci - après et liens)

ou de créer une connexion vnc par ssl (ssvnc) .

ATTENTION ! ne confondez pas le mot de passe de vnc et le mot de passe user de votre systeme !

utilisation de ssh

ssh est un protocole de communication en console .

il permet , sur une console locale , de se connecter sur un ordinateur distant .

exactement comme si on y ouvrait une console .(sur le pc distant)

aussi : en ssh , (sur la machine locale) vers la machine distante :

ssh id_user_distant@ip_distante

exemple :

pour plus ample information , voire les liens en bas du document .

n.b.: ssh demande souvent une authentification par mot de passe , voire clé R.S.A. .

en réseau local , ssh est très bien . sur internet , c'est de suite plus difficile …

en ayant au préalable enregistré le mot de passe (au dessus) :

cette commande peut lancer x11vnc sur le pc distant depuis la console locale .

on peut aussi la lancer en direct sur le pc distant où est installé le logiciel

x11vnc -many -rfbauth ~/.vnc/passwd
IMPORTANT !

on parle bien ici du mot de passe de vnc !

stocké dans le fichier par défaut “~/.vnc/passwd” de la commande “x11vnc -storepasswd”

alain@debian:~$ x11vnc -many -rfbauth ~/.vnc/passwd
26/03/2019 03:06:08 passing arg to libvncserver: -rfbauth
26/03/2019 03:06:08 passing arg to libvncserver: /home/alain/.vnc/passwd
26/03/2019 03:06:08 x11vnc version: 0.9.13 lastmod: 2011-08-10  pid: 3843
26/03/2019 03:06:08 XOpenDisplay("") failed.
26/03/2019 03:06:08 Trying again with XAUTHLOCALHOSTNAME=localhost ...
26/03/2019 03:06:08 
26/03/2019 03:06:08 *** XOpenDisplay failed. No -display or DISPLAY.
26/03/2019 03:06:08 *** Trying ":0" in 4 seconds.  Press Ctrl-C to abort.
26/03/2019 03:06:08 *** 1 2 3 4 
26/03/2019 03:06:12 *** XOpenDisplay of ":0" successful.
26/03/2019 03:06:12 
26/03/2019 03:06:12 Using X display :0
26/03/2019 03:06:12 rootwin: 0x280 reswin: 0x800001 dpy: 0x24ad6c20
26/03/2019 03:06:12 
26/03/2019 03:06:12 ------------------ USEFUL INFORMATION ------------------
26/03/2019 03:06:12 X DAMAGE available on display, using it for polling hints.
26/03/2019 03:06:12   To disable this behavior use: '-noxdamage'
26/03/2019 03:06:12 
26/03/2019 03:06:12   Most compositing window managers like 'compiz' or 'beryl'
26/03/2019 03:06:12   cause X DAMAGE to fail, and so you may not see any screen
26/03/2019 03:06:12   updates via VNC.  Either disable 'compiz' (recommended) or
26/03/2019 03:06:12   supply the x11vnc '-noxdamage' command line option.
26/03/2019 03:06:12 
26/03/2019 03:06:12 Wireframing: -wireframe mode is in effect for window moves.
26/03/2019 03:06:12   If this yields undesired behavior (poor response, painting
26/03/2019 03:06:12   errors, etc) it may be disabled:
26/03/2019 03:06:12    - use '-nowf' to disable wireframing completely.
26/03/2019 03:06:12    - use '-nowcr' to disable the Copy Rectangle after the
26/03/2019 03:06:12      moved window is released in the new position.
26/03/2019 03:06:12   Also see the -help entry for tuning parameters.
26/03/2019 03:06:12   You can press 3 Alt_L's (Left "Alt" key) in a row to 
26/03/2019 03:06:12   repaint the screen, also see the -fixscreen option for
26/03/2019 03:06:12   periodic repaints.
26/03/2019 03:06:12 
26/03/2019 03:06:12 XFIXES available on display, resetting cursor mode
26/03/2019 03:06:12   to: '-cursor most'.
26/03/2019 03:06:12   to disable this behavior use: '-cursor arrow'
26/03/2019 03:06:12   or '-noxfixes'.
26/03/2019 03:06:12 using XFIXES for cursor drawing.
26/03/2019 03:06:12 GrabServer control via XTEST.
26/03/2019 03:06:12 
26/03/2019 03:06:12 Scroll Detection: -scrollcopyrect mode is in effect to
26/03/2019 03:06:12   use RECORD extension to try to detect scrolling windows
26/03/2019 03:06:12   (induced by either user keystroke or mouse input).
26/03/2019 03:06:12   If this yields undesired behavior (poor response, painting
26/03/2019 03:06:12   errors, etc) it may be disabled via: '-noscr'
26/03/2019 03:06:12   Also see the -help entry for tuning parameters.
26/03/2019 03:06:12   You can press 3 Alt_L's (Left "Alt" key) in a row to 
26/03/2019 03:06:12   repaint the screen, also see the -fixscreen option for
26/03/2019 03:06:12   periodic repaints.
26/03/2019 03:06:12 
26/03/2019 03:06:12 XKEYBOARD: number of keysyms per keycode 7 is greater
26/03/2019 03:06:12   than 4 and 51 keysyms are mapped above 4.
26/03/2019 03:06:12   Automatically switching to -xkb mode.
26/03/2019 03:06:12   If this makes the key mapping worse you can
26/03/2019 03:06:12   disable it with the "-noxkb" option.
26/03/2019 03:06:12   Also, remember "-remap DEAD" for accenting characters.
26/03/2019 03:06:12 
26/03/2019 03:06:12 X FBPM extension not supported.
26/03/2019 03:06:12 X display is capable of DPMS.
26/03/2019 03:06:12 --------------------------------------------------------
26/03/2019 03:06:12 
26/03/2019 03:06:12 Default visual ID: 0x21
26/03/2019 03:06:12 Read initial data from X display into framebuffer.
26/03/2019 03:06:12 initialize_screen: fb_depth/fb_bpp/fb_Bpl 24/32/4608
26/03/2019 03:06:12 
26/03/2019 03:06:12 X display :0 is 32bpp depth=24 true color
26/03/2019 03:06:12 
26/03/2019 03:06:12 Autoprobing TCP port 
26/03/2019 03:06:12 Autoprobing selected TCP port 5900
26/03/2019 03:06:12 Autoprobing TCP6 port 
26/03/2019 03:06:12 Autoprobing selected TCP6 port 5900
26/03/2019 03:06:12 listen6: bind: Address already in use
26/03/2019 03:06:12 Not listening on IPv6 interface.
26/03/2019 03:06:12 
26/03/2019 03:06:12 Xinerama is present and active (e.g. multi-head).
26/03/2019 03:06:12 Xinerama: number of sub-screens: 1
26/03/2019 03:06:12 Xinerama: no blackouts needed (only one sub-screen)
26/03/2019 03:06:12 
26/03/2019 03:06:12 fb read rate: 2137 MB/sec
26/03/2019 03:06:12 fast read: reset -wait  ms to: 10
26/03/2019 03:06:12 fast read: reset -defer ms to: 10
26/03/2019 03:06:12 The X server says there are 10 mouse buttons.
26/03/2019 03:06:12 screen setup finished.
26/03/2019 03:06:12 

The VNC desktop is:      debian:0
PORT=5900

******************************************************************************
Have you tried the x11vnc '-ncache' VNC client-side pixel caching feature yet?

The scheme stores pixel data offscreen on the VNC viewer side for faster
retrieval.  It should work with any VNC viewer.  Try it by running:

    x11vnc -ncache 10 ...

One can also add -ncache_cr for smooth 'copyrect' window motion.
More info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching

Créer un tunnel ssh :

L'inconvénient de cette méthode est que vnc passe par un port non crypté (5900 pour le display :0).

Pour traverser une box ou un routeur il faut ouvrir des ports spécifiques pour vnc.

L'idéal est de passer par un tunnel.

Seul le port 22 pour ssh est routé dans la box, tout ce qui passe à travers est crypté ainsi que les tunnels qu'il ouvrira.

ssh -L 5900:localhost:5900 machine_distante 'x11vnc -display :0'

Pour connecter le client à l'autre bout du tunnel

dans une nouvelle console :

vncviewer localhost

hop ! le bureau distant …

ici , un script qui fonctionne à peu près .

il est un peu capricieux , aussi , n'hésitez pas à le relancer si au bout de 10 secondes vous n'avez toujours rien à l'écran .

scriptvnc.sh
#!/bin/bash
 
#create SSH tunnel
ssh -f -L 5900:ip_distante:5900 -t user@ip_distante 'x11vnc -geometry 1280x800; /bin/bash'
 
#open vncviewer
vncviewer localhost:5900
 
exit 0

pour vous simplifier le travail , voici une commande à taper :

cat > ~/scriptvnc.sh <<EOF
#!/bin/bash
 
#create SSH tunnel
ssh -f -L 5900:ip_distante:5900 -t user@ip_distante 'x11vnc -geometry 1280x800; /bin/bash'
 
#open vncviewer
vncviewer localhost:5900
 
exit 0
EOF

n'oubliez pas les droits :

chmod u+x ~/scriptvnc.sh

dorénavant ,

./scriptvnc.sh

suffit pour lancer sur votre machine locale l'affichage de votre machine distante .

qui plus est , en passant par un tunnel ssh . (sécurité)

NB: n'hésitez pas à remplacer <user> par le nom de l'utilisateur distant

et <ip_distante> par l'adresse ip de votre machine distante .

vous pouvez accéder à l'ip de votre machine distante dans les paramètres de certaines box , ou ,

sur la machine distante , en tapant

ip a

et en cherchant les données “inet” pour l'interface concernée .

vous pouvez éditer le script avec nano (voir plus amples infos dans les notes de bas de page)
on parle , ici , de la connexion au systeme (en ssh) , donc , du mot de passe systeme (user)

connexion avec ssl (préambule)

SSVNC est un client ssl - vnc dérivé de tightvnc . il gère aussi le ssh ainsi que le ssl + ssh .

je ne parle pas de ces deux options annexes ici , je ne me suis pas penché dessus .

mais libre à vous . vous pourrez ainsi développer ce tuto .

installer ssvnc en local

apt install ssvnc 

on crée le dossier /.vnc/certs/accepted/

avant de le créer , vérifier , avec tree , s'il n'existe pas déjà :

auquel cas , l'étape de création est inutile .

tree ~/.vnc/
mkdir ~/.vnc/certs/
 
mkdir ~/.vnc/certs/accepted/

en ssh , on se connecte à la machine distante :

ssh <user_distant>@<ip_distant>
ici , il est question du mot de passe systeme (en cas de besoin)

on initialise la connexion :

x11vnc -ssl SAVE-key

après avoir rentré la passphrase , qu'on note sur un carnet de peur de l'oublier ,

ICI , il est question du mot de passe ssl (de la passphrase)

on va copier la clé depuis le serveur vers le client :

scp -r -p ~/.vnc/certs/server-key.crt id_locale@ip_locale:~/.vnc/certs/accepted/server-key.crt

connexion avec ssl (utilisation manuelle)

relancer x11vnc en ssh

x11vnc -ssl SAVE-key -forever
rentrer la passphrase que l'on a noté (pour ne pas l'oublier).

on ne ferme pas la console distante (ssh) et

on ouvre une console locale :

ssvnc

puis rentrer comme demandé l'adresse de l'hôte :

ici , le pc distant .

et le mot de passe du pc distant .

ne pas rentrer de proxy .

dans le cas présent , c'est inutile .

laisser les réglages par défaut et

cliquer sur connexion .

ssvnc demandera confirmation pour le certificat (la 1ere fois) et

lancera vncviewer en ssl .

voilà !

graphiques :

image de départ ssvnc

ssvnc menu "options"

écran d'accueil ssvnc

demande confirmation mot de passe systeme (ssh)

résultat par exemple (ssvnc d'une V.M. à l'origine)

Démarrage automatique

Au démarrage d'une session graphique avec "autostart"

Au démarrage du système avec les "services systemd"

testé sur stretch 9.8.0 mate 1.16.2 et lmde 3 cindy cinnamon : pas de souci .

Lmde3 cindy cinnamon download

debian stretch 9.8.0 mate

pour créer un démon , c.a.d. une routine qui lancera x11vnc en arrière plan au démarrage ,

on peut faire ceci :

ce n'est pas une solution universelle . il faut parfois l'adapter .
cat > /etc/systemd/system/x11vnc.service <<EOF 
[Unit]
Description=Service x11vnc
Requires=display-manager.service
After=display-manager.service
 
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -rfbauth /path/.vncpasswd -o /var/log/x11vnc.log -display :0 -auth /var/run/lightdm/root/:0 -forever -shared -rfbport 5900
Restart=on-failure
RestartSec=3
 
[Install]
WantedBy=multi-user.target
EOF

N.B.: remplacer

/path/.vncpasswd

par l'adresse du fichier de mot de passe .

ici (dans ce tuto):

/home/<user>/.vnc/passwd

par exemple :

/home/switch/.vnc/passwd

on attribue les bons droits au fichier :

chmod 0644 /etc/systemd/system/x11vnc.service

on l'installe dans systemd

systemctl enable x11vnc.service

on le lance :

systemctl start x11vnc.service

on vérifie son état :

systemctl status x11vnc.service

et c'est bon , le démon est installé . merci Delurk (irc) . reste plus qu'à redémarrer la machine pour tests .

mais normalement , vncviewer ou remmina vous donneront accès à l'interface graphique .

Démarrage à la demande avec Inetd

Astuces :)

Lancer un serveur vnc à distance , puis s'y connecter de chez vous, en une commande grâce à ssh : il s'agit d'un “tunnel ssh” .

ssh -f -L 5900:localhost:5900 your.ssh.server "x11vnc -safer -localhost -nopw -once -display :0"; vinagre localhost:5900

dans le cas présent , vous pouvez remplacer “vinagre” par “vncviewer” .

ce qui donne :

ssh -f -L 5900:localhost:5900 your.ssh.server "x11vnc -safer -localhost -nopw -once -display :0"; vncviewer localhost:5900

pareil : s'il est un peu capricieux , n'hésitez pas à le relancer plusiers fois de suite (2 ou 3 fois suffiront , normalement)

Lancer un serveur qui détecte le fichier X Authority :

 x11vnc -display :1  $(pgrep -a Xorg | grep -o '[-]auth [^ ]*')

création d'un alias

pour simplifier l'usage des commandes de x11vnc :

pour créer un alias , c'est simple :

nano ~/.bash_aliases

y copier le code suivant :

alias assistance='x11vnc -many -rfbauth ~/.vnc_passwd -xkb'

il suffira , dès lors , de taper la commande

assistance

en lieu et place de la longue ligne d'instructions d'origine

N.B.: pour quitter nano :

retour de la commande
CTRL + O <enter>

puis

retour de la commande
CTRL + X <enter>

si vous préférez , c'est plus facile , copiez - collez le bloc suivant :

cat > /home/switch/.bash_aliases <<EOF 
alias assistance='x11vnc -many -rfbauth ~/.vnc_passwd -xkb'
EOF
adaptez /home/switch/ à votre configuration .
normalement /home/<utilisateur>/

avec un tunnel ssh , on peut obtenir ceci :

nano .bash_aliases
alias tunnelssh='ssh -f -L 5900:localhost:5900 your.ssh.server "x11vnc -safer -localhost -nopw -once -display :0"; vncviewer localhost:5900'

je ne sais plus s'il faut redémarrer la session ou le pc après la création d'un alias .

culture générale <biliographies>

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
doc/reseau/x11vnc.1553566105.txt.gz · Dernière modification: 26/03/2019 03:08 par Debian Alain

Pied de page des forums

Propulsé par FluxBB