Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Reseau-resau plus-vnc


Client/Serveur VNC

Client/Serveur VNC
par Jonesy
Avec les remarques de Jice, Davy et Alexandre.
Installer, configurer et utiliser VNC.
(v.2)

Qu'est que c'est ?

Une petite définition, VNC signifie Virtual Network Computing.

Cela permet de se connecter à une machine distante de sa propre machine, comme telnet ou SSH, mais à la différence que vous êtes sous l'interface graphique du système hôte, et que vous avez la main sur le clavier et la souris. On dit que VNC permet de "déporter" l'affichage d'une machine sur une autre.

VNC rend ceci possible quelque soit le système d'exploitation de la machine distante et/ou le système de votre machine.
C'est à dire, par exemple, vous êtes sous MS Windows, vous avez un serveur Linux sur lequel vous avez un compte, vous vous connectez au serveur Linux avec un client et, c'est comme si vous vous retrouviez sur le serveur avec votre environnement graphique préféré !

Pour information, il existe d'autres solutions pour utiliser l'interface graphique d'une machine distante, telles que PCAnywhere®, ou le Bureau à distance (sous MS Windows XP) qui, eux, ne fonctionnent qu'avec des serveurs et des clients MS Windows © Microsoft.

Le principe de fonctionnement

En fait, c'est un système client/serveur. D'un coté, il vous faut installer un serveur VNC et de l'autre un client VNC. Le client va interroger le serveur, qui va lui renvoyer une image de l'environnement graphique du serveur.
Bien sûr, il existe des clients/serveurs VNC pour différents systèmes d'exploitation : MS Windows, Linux, Solaris, Macintosh et DEC.

Dans notre exemple, le serveur sera à installer sur Linux et le client sur MS Windows. Bien entendu, vous installez la version Linux du serveur sur Linux et la version MS Windows du client sur MS Windows. Comme toutes les versions utilisent le même protocole de communication, cela ne pose aucun problème.

De X vers X

Sachez qu'entre 2 machines dotées de serveur X, les Unices en général, VNC ne sert à rien. Car c'est une fonctionnalité native des serveurs X. Il suffit de lancer votre application sur la machine jouant le rôle de serveur en lui spécifiant sur quel écran elle doit s'afficher.
Par exemple, je lance xeyes depuis la machine pingouin avec affichage sur l'écran 0 (par défaut) de la machine poussin :

$ xeyes -display poussin:0


Si l'application ne permet pas de spécifier le display, utilisez :

$ export DISPLAY=poussin:0.0
$ xeyes


Ou, mieux, si vous vous connectez au serveur via SSH :

$ ssh -X pingouin
$ xeyes


Dans les 2 derniers cas, l'affichage sur le client poussin des applications est automatique durant toute la session shell.
Vous pouvez aussi vous référer aux Trucs & Astuces suivants :

Distributions VNC

Il existe de multiples distributions différentes pour le client et le serveur VNC, dont plusieurs Libres (Open-Source).
Nous verrons ici l'installation des 2 distributions principales :

  • RealVNC de AT&T Laboratories à Cambridge. Ils fournissent aussi une version Entreprise Edition, disponible à l'essai pendant 7 jours, mais ici la version testée est la Free Edition.
  • TightVNC.

Leur utilisation est absolument semblable, seule l'interface graphique du client (sous Linux ou MS Windows) diffère, mais la logique est la même. Notez que vous pouvez utiliser le serveur VNC de l'une et le client VNC de l'autre, elles sont compatibles.
Ces 2 distributions VNC sont sous licence GPL.

Installations

Téléchargements

Avant de les télécharger vérifiez que votre distribution Linux ne fournie pas une version empaquetée d'une distribution VNC. Si c'est le cas, installez le paquet et passez à l'utilisation.
Les versions utilisées ici sont les dernières versions au moment où j'écris ces lignes. Sont fournit des versions binaires pour Linux ou les Unix et pour les systèmes Microsoft, ainsi qu'une version Java (non vue ici).

  • Pour RealVNC allez sur la page Download, sachez que vos coordonnées sont demandées pour vous laisser les télécharger.
  • Pour TightVNC allez ici, (fournit aussi des RPM).

RealVNC sous Linux

A partir des sources
Si vous avez téléchargé l'archive vnc-4_1-unixsrc.tar.gz, faites comme suit :
Avec un utilisateur normal (sans privilèges) :

$ tar -xvzf vnc-4_1-unixsrc.tar.gz
$ cd vnc-4_1-unixsrc
$ cd common
$ ./configure
$ make
$ cd ../unix
$ ./configure
$ make


Puis en root, allez sous le répertoire /chemin/vers/vnc-4_1-unixsrc :

$ ./vncinstall /usr/local/bin /usr/local/man

Je vous conseille de lire attentivement les fichiers README se trouvant sous les différents répertoires.

A partir des binaires
Si vous avez téléchargé l'archive vnc-4_1-x86_linux.tar.gz, faites comme suit :
Avec un utilisateur normal (sans privilèges) :

$ tar -xvzf vnc-4_1-x86_linux.tar.gz
$ cd vnc-4_1-x86_linux


Puis en root, allez sous le répertoire /chemin/vers/vnc-4_1-x86_linux :

$ ./vncinstall /usr/local/bin /usr/local/man

TightVNC sous Linux

A partir des sources
Si vous avez téléchargé l'archive tightvnc-1.2.9_unixsrc.tar.gz, faites comme suit :
Avec un utilisateur normal (sans privilèges) :

$ tar -xvzf tightvnc-1.2.9_unixsrc.tar.gz
$ cd vnc_unixsrc
$ xmkmf
$ make World
$ cd Xvnc
$ ./configure
$ make


make World ne compile que le client et les divers outils.
Xvnc est le serveur X et VNC. Il est basé sur la distribution "server only" de XFree86 3.3.2.

Puis en root, allez sous le répertoire /chemin/vers/vnc_unixsrc :

$ ./vncinstall /usr/local/bin /usr/local/man

Je vous conseille de lire attentivement les fichiers README se trouvant sous les différents répertoires.

Important : Faites attention si vous lancez le serveur VNC sous Linux au démarrage, à bien avoir enregistré le mot de passe avant de redémarrer la machine, sinon elle restera bloquée au cours du démarrage.

Sous MS Windows

Les distributions VNC fournissent soit un exécutable d'installation, soit les binaires qu'il suffit de décompresser.
Je n'approfondis pas la question, car ce n'est pas le but de ce document.

Utilisation du serveur

Sous Linux

Il faut que chaque utilisateur lance le serveur VNC. Ou que l'administrateur le fasse pour eux. Un utilisateur peut très bien lancer VNC via une connexion telnet ou SSH.

Pour lancer le serveur VNC

$ vncserver


Lorsqu'on lance le serveur VNC, celui-ci vous retourne un numéro sous cette forme :

New 'pingouin:1 (jonesy)' desktop is pingouin:1

Starting applications specified in /home/jonesy/.vnc/xstartup
Log file is /home/jonesy/.vnc/pingouin:1.log

Ici, le numéro est 1. Notez le bien, car vous en aurez besoin pour le client.

Pour arrêter le serveur VNC

$ vncserver -kill :X


X étant le numéro renvoyé lorsque vous avez lancé le serveur.

La première fois que vous lancerez le serveur pour un utilisateur, il vous demandera un mot de passe, pour des raisons de sécurité évidentes, n'utilisez pas le mot de passe du compte Linux !
Par la suite, pour changer de mot de passe : $ vncpasswd

Et il créera sous le $HOME de l'utilisateur le répertoire .vnc avec différents fichiers dont xstartup, qui est intéressant à modifier afin de choisir votre environnement graphique et d'autres petites choses.

Par défaut, $HOME/.vnc/xstartup ressemble à ceci (avec quelques différences suivant la distribution VNC) :

#!/bin/sh

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &


twm étant l'environnement graphique par défaut. Vous pouvez bien évidemment modifier cette ligne afin de lancer l'environnement graphique qui vous plaît.
Par exemple :

  • Pour KDE : startkde &
  • Pour Gnome : startgnome &
  • Pour IceWm : starticewm &
  • Pour Fluxbox : fluxbox &


Pour que les modifications de xstartup soient prises en compte, il faut arrêter et relancer le serveur VNC.

Et bien entendu, il faut que l'interface graphique soit installée sous Linux, VNC ne va pas la simuler. ;-)

Sous MS Windows

Sous MS Windows, le serveur peut être lancé automatiquement au démarrage, en tant que service, ou en mode user.

Je n'ai pas pu (re)vérifier correctement les multiples connexions lors de la mise à jour de ce document. N'hésitez pas à me faire part de vos retours d'expériences.

Utilisation du client

Le client est très simple d'utilisation, lorsque vous le lancez, $ vncviewer, il vous demande le nom de la machine où est installé le serveur VNC. Supposons que notre serveur s'appelle pingouin.
Il vous faut donc taper :

pingouin:X


X étant le numéro renvoyé lorsque vous avez lancé le serveur. Puis il vous demande le mot de passe.
A la place du nom de la machine, pingouin, vous pouvez mettre son adresse IP, 192.168.0.2:X par exemple.

Et voilà, vous vous retrouvez sous votre compte sur le serveur avec votre environnement graphique préféré !

Pour quitter le client, c'est comme d'habitude. Sachez tout de même, que si vous fermez votre session X avant de quitter le client, il vous faudra relancer le serveur VNC pour la prochaine fois.
Si vous ne fermez pas votre session X et que vous quittez le client VNC avec votre navigateur ouvert, la prochaine fois que vous vous connecterez à VNC, vous retrouverez votre navigateur ouvert. Bien sûr, si la machine hôte avec le serveur n'a pas été arrêtée.

N'oubliez pas, vous êtes sur le serveur ! C'est comme un telnet ou SSH. Donc vous n'avez pas accès à votre disque dur local, CDROM ou lecteur de disquette. Sauf si le serveur y a accès via le réseau...


Vous l'aurez certainement remarqué le serveur VNC sous MS Windows ne fournit pas de numéro d'écran. Donc pour s'y connecter avec un client, il suffit taper le nom ou l'adresse IP du serveur sans ajouter :X.

Pensez à utiliser les versions Java pour toutes les plates-formes non prises en charge nativement.

Connexion sécurisée

Par défaut, les échanges réseaux s'effectuant entre le serveur et le client ne sont pas protégés, en-cryptés. Il est bien évidemment possible de le faire, mais RealVNC conseille l'utilisation de VNC sur un réseau local (privé) ou via un VPN (Virtual Private Network) qui lui peut être sécurisé. Cela dit, voici comment sécuriser sa connexion VNC.

Vous aurez besoin d'un serveur SSH sur le serveur et d'un client SSH sur le client. Bien évidemment ! ;-)
En supposant que sur votre serveur pingouin, vous ayez un serveur VNC sur l'écran 1, depuis le client, lancer :

$ ssh -L 5902:localhost:5901 pingouin


Ce qui signifie : Démarrer une connexion SSH sur le serveur pingouin, écouter le port 5902 sur localhost, ma machine le client, et transmettre toutes les connexions sur le port 5901 de pingouin, le serveur.

Puis lancer le client VNC :

$ vncviewer localhost:2


Au lieu de :

$ vncviewer pingouin:1

Pour le pare-feu

Pour la configuration du pare-feu (firewall, mur de feu), le protocole VNC utilise les ports 59xx. xx étant compris entre et le nombre de serveurs.
MS Windows, pouvant avoir un seul serveur, utilise le port 5900. Alors que sous Linux, les serveurs commenceront à 5901 pour ensuite s'incrémenter à chaque serveur.

Pour plus d'informations sur la sécurité, reportez-vous à cette page.

Quelques projets

Voici quelques projets annexes qui pourraient vous être utile :

  • VNC Reflector : VNC Reflector est un serveur VNC spécialisé qui agit comme un proxy entre un vrai serveur VNC et un certain nombre de clients. Il est conçu pour travailler efficacement avec un nombre important de clients.
  • DirectVNC : Client VNC fonctionnant avec le FrameBuffer de Linux. Permet donc de se connecter à un serveur VNC depuis un client Linux sans interface graphique (sans serveur X).
  • OSXvnc : Serveur VNC complet pour Mac OS X.
  • VNCaudio : Une extension à VNC permettant d'avoir le son sur le bureau virtuel.
  • Voir aussi les logiciels en relation sur le site de TightVNC.

Remarques

- La touche F8 donne donne accès au menu de TightVNC qui vous permet de quitter VNCviewer quand vous êtes en plein écran.

- Quand vous entrez l'adresse du serveur VNC dans TightVNC, la touche ENTER du pavé numérique efface l'adresse au lieu de l'envoyer comme on le voudrait !!! Il faut utiliser l'autre touche ENTER (celle sous BACKSPACE).

Voici les problèmes que j'ai pu rencontrer à l'utilisation :

Via VNC, aucun raccourci clavier ne marche. Par exemple, CTR+C ne fonctionne pas.


Voilà, c'est enfin terminé... ;-)



@ Retour à la rubrique Réseau et sécurité

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jonesy le 18/12/2001.

Copyright

Copyright © 18/12/2001, Jonesy

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
Affichages
Outils personnels

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA