29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
29-01-2012 : Parce que nous sommes un peuple debout, agissons pour rester dignes et responsables !
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / Réseau / TightVNC : VNC libre





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox

TightVNC : VNC libre

Date de publication: le mercredi 16 mai 2007 à 18h34
Dernière modification: par Pascal BOYER le mardi 28 décembre 2010 à 13h50
« Article précédent: Installer une imprimante Canon i-SENSYS ML4660PL sous Linux/Debian

Qu’est-ce que TightVNC

 TightVNC est la version allégée de VNC .

Il a été spécialement concu pour fonctionner sur des réseaux à faible débit comme le sont les réseaux basés sur des modems 56 kB/s (comme dans certaines écoles par exemple). De plus TightVNC corrige certains bugs et lenteurs de VNC.

TightVNC est donc un formidable outil qui permet:

  •  de prendre le contrôle à distance d’un autre ordinateur par un réseau local voire par le réseau Internet,
  •  de voir ce qui se passe sur un autre ordinateur (sans en prendre forcément le contrôle),
  •  à plusieurs personnes de voir ce qu’il se passe sur un même ordinateur,
  •  aucun temps de latence de la souris ou du curseur,
  •  un temps de latence ultra court pour les saisies au clavier,
  •  des besoins limités en bande passante, compatibles avec les réseaux WiFi,
  •  un taux de compression élevé pour les images,
  •  une compatibilité avec OpenGL et les extensions XFree 4.3 sur n’importe quelle plate-forme,
  •  une approche unifiée de la prise de contrôle à distance sur les clients légers.

Voici quelques caractéristiques de TightVNC dans la langue de Shakespear:

  •  File transfers in Win32 version. You can updload files from your local machine to the TightVNC server, and download files from the server to you computer.
  •  Local cursor handling. Cursor movements do not generate screen updates any more, remote cursor movements are processed locally by the viewer, so you do not see slow remote cursor movements behind the local cursor.
  •  Efficient compression algorithms. New Tight encoding is optimized for slow and medium-speed connections and thus generates much less traffic as compared to traditional VNC encodings. At the same time, TightVNC supports all the standard VNC encodings, so it can operate efficiently over fast networks, too. Thus, with TightVNC you can work remotely almost in real time in most network environments.
  •  Configurable compression levels. You can choose any appropriate level of compromise between compression ratios and coding speed, depending on your connection speed and processor power.
  •  Optional JPEG compression. If you don’t care too much about perfect image quality, you can use JPEG compression which will compress color-rich screen areas much more efficiently (the image quality level is configurable too).
  •  Enhanced Web browser access. TightVNC includes a greatly improved Java viewer with full support for Tight encoding, local cursor feature, 24-bit color mode, and more. The Java viewer applet can be accessed via built-in HTTP server like in the standard VNC.
  •  Support for two passwords (full-control and read-only). The server allows or disallows remote keyboard and mouse events depending on which password was used for authentication.
  •  Advanced Properties dialog in WinVNC. Unlike the standard VNC, TightVNC gives you the possibility of setting a number of advanced settings directly from the WinVNC GUI, and to apply changed settings immediately. There is no need to launch regedit to set query options, connection priority, to allow loopback connections, disable HTTP server etc.
  •  Flexible configuration options. Unlike the standard VNC, TightVNC allows you to choose arbitrary port numbers for TCP/IP connections, in addition to display numbers traditionally used in VNC.
  •  Automatic SSH tunneling on Unix. The Unix version of TightVNC viewer can tunnel connections via SSH automatically using a local SSH/OpenSSH client installation (provided that an SSH/OpenSSH server is running on the server as well).
  •  And more. TightVNC features a number of other improvements, performance optimizations and bugfixes, see change logs for more information.

1°/ Installer tightvnc

 Les packages requis

Bien sûr, en plus d’une distribution en état de fonctionnement, il faut installer les packages suivants:

dpkg -l '*tightvnc*'

Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom               Version    Description
+++-=================-==========-===================
ii  tightvncserver    1.2.9-5    Virtual network computing server software
ii  xtightvncviewer   1.2.9-5    Virtual network computing client software for X

Il faut aussi les librairies jpeg et zlib:

dpkg -l '*zlib*'

Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom               Version       Description
+++-=================-=============-========================
ii  zlib1g            1.2.2-4       compression library - runtime
ii  zlib1g-dev        1.2.2-4       compression library - development
ii  zlib1g-dev        1.2.2-4       compression library - development

dpkg -l '*libjpeg*'

Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom              Version    Description
+++-================-==========-=========
ii  libjpeg-progs    6b-9       Programs for manipulating JPEG files
ii  libjpeg62        6b-9       The Independent JPEG Group's JPEG runtime library
ii  libjpeg62-dev    6b-9       Development files for the IJG JPEG library

2°/ Lancer/arrêter le serveur

Pour cela point besoin d’être root car tout utilisateur de la machine sur laquelle est installé le serveur tightvncserver peut vouloir exporter sont environnement graphique.

Donc, pour lancer le serveur on utilise la commande:

tightvncserver : 64 -geometry 1024x768 -depth 16

où:

  • :64 est le numéro du serveur X sur lequel va tourner le serveur tightvncserver

    Le seul numéro de serveur qu’il ne faut pas utiliser est le numéro du serveur auquel votre session est attachée (couramment le 0) (12350 fonctionne parfaitement !)

    Remarquez, dans le cadre ci-dessous, que les ports d’écoute sont 59 64 et 60 64

Pour information, le nom réel du démon/serveur qui tourne est Xtightvnc:

netstat -anpt |grep tight

tcp        0      0 0.0.0.0:5964            0.0.0.0:*               LISTEN     17848/Xtightvnc
tcp        0      0 0.0.0.0:6064            0.0.0.0:*               LISTEN     17848/Xtightvnc
tcp        0      0 82.67.66.131:5964       82.67.64.88:34361       ESTABLISHED17848/Xtightvnc
  •  -geometry 1024x768 désigne la résolution graphique qui sera affichée sur l’écran des machines clientes.
  •  -depth 16 désigne la quantité de couleurs qui doit être transmise (ici 2^16 = 65536 couleurs).

Lorsque vous lancez la commande pour la première fois, voici ce que vous obtenez:

You will require a password to access your desktops.
 
Password: xxxxxxxx
Verify:   xxxxxxxx
 
New 'X' desktop is euphorie.linuxorable.fr:3
 
Creating default startup script /home/pascal/.vnc/xstartup
Starting applications specified in /home/pascal/.vnc/xstartup
Log file is /home/pascal/.vnc/euphorie.linuxorable.fr:3.log

:
Le numéro du serveur (ici 64) et le mot de passe que vous saisissez devront être communiqués à toute personne désirant accèder graphiquement à votre environnement par l’intermédiare du client graphique xtightvncviewer

:
La commande qui lance le serveur crée deux fichiers /tmp/.X64-lock et /tmp/.X11-unix/X64 qui seront effacés par la commande d’arrêt du serveur.

:
Lorsque vous lancez le serveur, si vous obtenez des messages d’erreur contenant des lignes comme celles-ci:

failed to set default font path '/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/100dpi/,
          /usr/share/fonts/X11/75dpi/,'
Fatal server error:
could not open default font 'fixed'

ou:

Font directory '/usr/share/fonts/X11/misc//usr/share/fonts/X11/Type1/' not found - ignoring
 
 Fatal server error:
could not open default font 'fixed'

...alors vous avez très vraissemblablement un problème avec la configuration des chemins menant à vos polices.
 Pour y remédier, repporter les chemins de vos polices mentionnés dans le fichier de confugration de votre serveur X ( /etc/X11/ xorg.conf ) dans le fichier de configuration du serveur tightvncserver, à savoir le fichier /etc/ vnc.conf

Respectez bien la syntaxe:

$fontPath =  "/usr/share/fonts/X11/misc/,";
$fontPath .=  "/usr/share/fonts/X11/Type1/,";
$fontPath .=  "/usr/share/fonts/X11/100dpi/,";
$fontPath .=  "/usr/share/fonts/X11/75dpi/";

Comme vous pouvez le lire dans le cadre ci-dessus, un script de démarrage a été créé dans un nouveau répertoire .vnc

C’est dans ce fichier que vous allez pouvoir indiquer les applications ou mieux, l’environnement de travail, que vous souhaitez exporter.

Vous allez donc, avant de configurer ce fichier, arrêter le serveur:

tightvncserver -kill : 64

3°/ Configurer les applications à exporter

Pour ce faire, éditez le fichier .vnc/xstartup et voici ce que contient le mien:

#!/bin/sh
 
xrdb $HOME/.Xresources
xsetroot -solid grey
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
startkde &

Je n’ai donc commenté que la dernière ligne pour la remplacer par une autre qui démarre KDE, mon environnement de travail.

Une fois que vous aurez correctement configuré ce fichier, relancez le serveur:

tightvncserver : 64 -geometry 1024x768 -depth 16

4°/ Se connecter au serveur:

Une fois que le serveur est démarré, il suffit de lancer le client graphique xtightvncviewer à partir de n’importe quelle machine où celui-ci est installé. Cela peut être également fait à partir de la machine sur laquelle tourne le serveur. Dans tous les cas, la commande est:

xtightvncviewer

 Fig. 1: Le client garphique xtightvncviewer

Vous avez donc deux façons d’identifier la machine qui exécute le serveur tightvncserver: soit par son adresse IP soit par son nom de machine internet.

Il est primordial de faire suivre l’adresse IP du serveur ou son nom internet par le numéro de serveur X auquel on cherche à se connecter. Ici, c’est :64

Puis après avoir validez avec Enter, vous devrez taper le mot de passe défini lors du premier démarrage du serveur (voir 2°/ ):

 Fig. 2: Mot de passe d’accès au serveur tightvncserver

Si tout est correct, une fenêtre s’ouvrira et apparaitra l’environnement graphique de l’utilisateur qui a lancé le serveur. Vous pourrez dès lors utiliser cet environnement graphique comme si vous étiez devant la machine.

5°/ Et alors ?...

Ben c’est déjà pas si mal !

Vous pouvez maintenant prendre le contrôle de votre machine à distance et graphiquement.

Mais le fin du fin est à venir. Et pour cela il est nécessaire que deux personnes, au minimum, se connectent au même serveur tightvncserver. Vous pourrez alors observer l’interaction des souris et des claviers et envisager l’étendue des possibiltés qui maintenant s’offrent à vous.

6°/ Quelques options intéressantes

Ces options concernent la commande de démarrage du serveur.

  • -viewonly désactive l’utilisation du clavier et de la souris.

    Cette option peut être intéressante si l’on souhaite faire une démonstration à plusieurs personnes sans que celles-ci ne puissent intervenir avec leur clavier ou souris.

  •  -compatiblekbd active les touches META et ALT permettant de conserver l’utilisation des raccourcus claviers !
  •  -nocursor n’affiche tout simplement pas le curseur de la souris qui est remplacé par une toute petite mire.
  •  -nevershared définit la machine locale (celle sur laquelle est démarré le serveur) comme seule machine pouvant avoir accès au serveur tightvncserver.
  •  -alwaysshared (non testée) voir man Xtightvnc

7°/ Modifier le mot de passe

Lorsque vous lancez le server tightvncserver pour la première fois, vous devez définir un mot de passe qui sera utilisé par les personne qui souhaiteront se connecter à votre serveur.

Si vous désirez ultérieurement modifier ce mot de passe, utlisez la commande:

vncpasswd Connexion cryptée avec SSH

1ère solution

Par défaut, la connexion entre le poste client et le serveur VNC n’est pas cryptée laissant circuler en clair sur le réseau les mots de passe et les données.

Pour remédier à ce manque de sécurité, il est possible de créer un tunel SSH par lequel transiteront de manière cryptées toutes ces données.

Voici la procédure à suivre pour mettre en place un tunel SSH.

Démarrer le serveur VNC

La première chose à faire est de démarrer le serveur VNC.

Nous supposerons par la suite que la commande qui lance le serveur VNC est la suivante:

tightvncserver : 3 -geometry 1024x768 -depth 16

Le port d’écoute du serveur est donc 5903

Configuration SSH de la machine cliente

Sur la machine cliente, il est impératif que le client SSH supporte le transfert du protocole X. Vous devez donc vérifier que la ligne:

ForwardX11 yes

...est bien décommentée dans le fichier /etc/ssh/ ssh_config qui est le fichier de configuration du client SSH.

En ce qui concerne la configuration du serveur SSH ( /etc/ssh/ssh d_config) de la machine client, il peut indifféremment supporter ou non le transfert du protocole X ( X11Forwarding yes), ce n’est pas à lui que l’on demande de fournir ce service.

De même, ces deux options GatewayPorts yes et AllowTcpForwarding yes ne sont pas nécessaires dans le fichier /etc/ssh/ssh d_config

Après d’éventuelles modifications de ces deux fichiers, relancez le serveur SSH:

/etc/init.d/ssh restart

Configuration SSH du serveur VNC

Sur le serveur VNC, il est impératif que le serveur SSH supporte le transfert du protocole X. Vous devez donc vérifier que la ligne:

X11Forwarding yes

...est bien décommentée dans le fichier /etc/ssh/ssh d_config qui est le fichier de configuration du serveur SSH.

Ces deux options GatewayPorts yes et AllowTcpForwarding yes ne sont pas nécessaires dans le fichier /etc/ssh/ssh d_config

En ce qui concerne la configuration du client SSH ( /etc/ssh/ssh_config) du serveur VNC, il peut indifféremment supporter ou non le transfert du protocole X ( ForwardX11 yes), il n’est pas utilisé.

Après d’éventuelles modifications de ces deux fichiers, relancez le serveur SSH:

/etc/init.d/ssh restart

Connexion au serveur VNC

Dans un premier temps, il faut, à partir de la machine cliente, établir une connexion SSH avec le serveur VNC:

ssh -C -l login -L XXXX:localhost:5903 @IP du serveur VNC

Explications:

  •  -C active la compression des données ce qui améliore la fluidité de l’interface graphique.
  • -l indique que le login qui suit est celui de votre compte Unix sur le serveur distant (ici le serveur VNC).

    Ceci implique donc que vous ayez un compte Unix sur le serveur VNC.

  • -L XXXX:localhost:5903 transfert le port XXXX de la machine cliente sur le port 5903 du serveur VNC.

    XXXX peut prendre n’importe quelle valeur de port supérieur à 1024, pourvu bien sûr que ce ne soit pas un port déjà utilisé par une autre application.

  •  @IP du serveur VNC devra évidemment être remplacé par l’adresse IP du serveur VNC. Vous pouvez mettre le nom de machine du serveur VNC au lieu de son adresse IP.

Lancer le client graphique VNC

Dans un deuxième temps, ouvrez, toujours sur la machine cliente, un xterm et lancez le client graphique VNC ainsi:

xtightvncviewer localhost::XXXX

...puis saisissez le mot de passe VNC et l’application graphique se lancera:

 Fig. 3: Capture d’écran

Vous pouvez également contrôler que la connexion établie transite bien par le port XXXX et par SSH.

Dans l’exemple ci-dessous, le port est 32544:

lsof -i tcp:32544

COMMAND    PID     USER   FD   TYPE DEVICE SIZE NODE NAME
ssh       6304 virginie    4u  IPv4 488017       TCP localhost:32544 (LISTEN)
ssh       6304 virginie    8u  IPv4 488060       TCP localhost:32544->localhost:36884 (ESTABLISHED)
xtightvnc 6310 virginie    4u  IPv4 488059       TCP localhost:36884->localhost:32544 (ESTABLISHED)

2ème solution

Cette solution est plus simple à mettre en oeuvre et ne requière pas une connexion SSH préalable au démarrage du client VNC.

Donc, sans rien changer à la configuration SSH décrite ci-dessus ( Configuration SSH de la machine cliente et Configuration SSH du serveur VNC) une seule commande suffit pour lancer, depuis la machine cliente, une connexion cryptée avec SSH vers le serveur VNC:

xtightvncviewer -via pascal@<IP serveur VNC> localhost:3

Dans cette commande il est impératif de spécifier:

  •  le nom (ici pascal) du compte unix sur le serveur VNC
  •  le numéro du display (ici :3) utilisé par le serveur TightVNCserver

Chez moi, la commande ci-dessus renvoie une sortie un peu surprenante mais qui fonctionne quand même:

Password:
Password:
Password:
pascal@82.67.66.131's password:
VNC server supports protocol version 3.3 (viewer 3.3)
Password:

Je dois donc taper 3 fois le mot de passe VNC puis une fois le mot de passe de mon compte unix sur le serveur et enfin à nouveau le mot de passe VNC. Vraiment très surprenant!

Une fois connecté, on peut contrôler que la connexion SSH est bien en place:

lsof -i tcp |grep vnc

xtightvnc 5842 virginie    4u  IPv4  31503       TCP localhost:35382->localhost:5599 (ESTABLISHED)

Ceci montre la redirection du port d’écoute du client Xtightvnc 35382 vers le port 5599

lsof -i tcp |grep ssh

ssh       5761 virginie    4u  IPv4  19412       TCP localhost:5599 (LISTEN)
ssh       5761 virginie    8u  IPv4  19423       TCP localhost:5599->localhost:35382 (ESTABLISHED)

Cette commande montre que c’est SSH qui écoute (LISTEN) sur le port 5599 puis redirige vers le port d’écoute 35382 du client Xtightvncviewer.

Commentaires