Des captures d'écran énormes avec VNC

par Viktor Horvath, <viktor@ibiblio.org>, novembre 2006 (article #393). Traduit par Jean-Etienne Poirrier (homepage).

Résumé:

Etant situé entre une "astuce" et un article du point de vue de la longueur, cette page va vous montrer comment produire des captures d'écran gigantesques en utilisant un bureau virtuel VNC. Aucune magie d'importance n'est içi impliquée ; c'est donc plutôt un conseil pour ceux qui ne connaîtrait pas les possibilités de VNC.

 

Motivation

Il est courant qu'une image (ou une capture d'écran) en dit plus que mille mots. Mais imaginez que la capture d'écran que vous souhaitez s'étend sur plusieurs pages de votre écran. Par exemple, un énorme graphique qui ne peut être exporté en PostScript ni PDF.

Dans mon cas particuliers, je voulais montrer comment je corrige un texte ; c'est pourquoi je voulais que l'autre personne voie les changements que j'avais effectués. Maintenant, c'est un cas classique d'utilisation de diff. Mais que se passe-t-il si la personne ne sait pas comment le lire ou, pire encore, s'il a un système sans outils diff graphiques sophistiqués comme TkDiff ou KDiff3 [1] ? C'est pourquoi je préfère envoyer une capture d'écran de ma vue agréable avec KDiff3 – cependant, la fenétre est contenue dans plus de cinq pages écran, vous devez la faire défiler vers le bas. Prendre cinq captures d'écran et les assembler dans GIMP serait une possibilité. Créer un énorme écran virtuel et faire une capture de cet énorme écran en est une autre, que je vais vous décrire ici.  

Qu'est-ce que VNC?

Je ne veux pas répéter les bonnes introduction au Virtual Network Computing qui existent sur le web [2]. Brièvement, un bureau (desktop, sortie d'écran, entrés souris et clavier) est partagé sur le réseau : l'ordinateur dont vous voulez partager le bureau fait tourner le serveur VNC et l'ordinateur où vous voulez voir et contrôler l'autre bureau dans une fenêtre fait tourner le client VNC. Développé à l'origine par l'Université de Cambridge (UK) et AT&T, le quartier général de VNC est maintenant dans la compagnie RealVNC [3] . Heureusement, ce n'est pas seulement une implémentation libre du protocole VNC mais c'est aussi une implémentation indépendante de la plate-forme informatique. Ainsi, vous pouvez contrôler un bureau Mac OS X à partir d'une station GNU/Linux et vice versa. Et il y a de nombreux outils et idées autour de VNC.

Sous Microsoft Windows ou Mac OS X, vous n'avez qu'un seul bureau donc vous ne partagez que ce bureau actuel ; sous Unix et GNU/Linux, vous créez habituellement un autre bureau (bien qu'il existe des programmes pour partager votre bureau courant [4]), de la même manière que vous pouvez avoir plusieurs serveurs X sur la même machine. En fait, le nouveau bureau VNC est un bureau X "enveloppé" par VNC. Si vos machines se trouvent derrière un pare-feu ou si vous souhaitez sécuriser vos communications, vous pouvez faire passer votre connexion VNC dans un tunnel SSH (pourvu que la machine à laquelle vous vous connectez héberge un serveur SSH) [5].  

VNC contre X11

Comme vous le savez peut-être, vous pouvez également transmettre des fenêtres X11 seules à travers le réseau, ayant ainsi une application tournant sur une machine A tout en voyant les fenêtres sur une machine B. Les principales différences avec VNC sont :

  • VNC héberge un bureau complet (incluant habituellement un gestionnaire de fenêtre).
  • Avec VNC, si la connexion tombe, vous pouvez simplement ré-attacher votre client. Rien n'est perdu, comme dans une session "screen". C'est plus difficile si une connexion X11 tombe.
  • Il existe différents modes de transfert des données : si votre connexion est lente, vous pouvez réduire la profondeur des couleurs. La compression est aussi possible, minimisant ainsi la quantité de données transférées.
  • J'ai trouvé que de nombreuses applications semblent être plus réactives, parce qu'elle n'attendent pas que je voie le bouton pour être prêtes à accepter des entrées. Cependant, la coordination entre différentes dispositions de clavier sur le serveur et le client peut étre déroutante. Donc, il se peut que vous obteniez une meilleure expérience avec quelques applications en utilisant X11.

 

Installation, configuration et démarrage du serveur VNC

Chaque distribution importante fournit des paquets pour le serveur et le client VNC. Si vous avez de la chance, vous possédez déjà des commandes comme vncserver ou xvncviewer. Sous Debian et distributions dérivées, vous pouvez installer VNC grâce aux commandes habituelles, en étant super-utilisateur :
apt-get install vncserver xvncviewer
Je fais cela sur une machine Debian mais il ne devrait pas y avoir de différences majeures entre les distributions.

Normalement, vous n'avez qu'à taper :
vncserver :1 -localhost
et vous avez un nouveau serveur X tournant sur l'affichage :1, accessible en se connectant au serveur VNC qui écoute sur le port 5900 + numéro d'affichage. Ainsi, dans notre cas, ce sera sur le port 5901. A cause du paramètre -localhost, vous ne pouvez que vous connecter de manière locale ou en utilisant SSH.

Vous pouvez vous connecter à ce serveur avec le client :
xvncviewer :1
Si vous avez sécurisé votre connexion VNC avec un mot de passe (en utilisant vncpasswd), vous devez l'entrer maintenant. Ensuite, votre bureau devrait apparaître dans une fenêtre.

Cependant, probablement du à mes scripts personnels de démarrage dans ~/.xsession, le gestionnaire de fenêtre n'est pas apparu sur le client (ou pire, il créera continuellement de nouvelles fenêtres d'erreur). Ainsi, j'ai du quitter le serveur VNC :
vncserver -kill :1
et créer un fichier ~/.vnc/xstartup avec juste une configuration minimale (exec icewm comme seule ligne). C'est la configuration pour le serveur X démarré par VNC, pas la configuration de VNC elle-même ! Cette dernière est située dans /etc/vnc.conf et ~/.vncrc. J'ai du écrire une ligne dans ce dernier fichier pour utiliser en fait le xstartup que je viens de créer. Ainsi, mon fichier ~/.vncrc ressemble à ceci :
$vncStartup = "~/.vnc/xstartup";

Maintenant, nous voulons créer notre énorme capture d'écran. Ainsi, démarrez le serveur VNC aussi grand que vous le voulez. Je trouve agr´able d'avoir la largeur un petit peu plus petite que la largeur actuelle de l'écran, de manière à n'avoir qu'une direction à faire dérouler. Mais peut-être que vous avez besoin d'une largeur plus grande pour votre application.
vncserver :1 -localhost -depth 16 -geometry 950x5000
Connectez-vous au serveur comme précédemment (xvncviewer :1).  

Capturer l'écran de VNC

Le reste est assez simple : démarrez votre application contenant la fenêtre que vous souhaitez capturer et disposez-la de la manière dont vous voulez. Pour capturer l'écran, je suis toujours paresseux et j'utilise l'éditeur d'image bien connu GIMP. Cette fois, bien sûr, vous devez le démarrer à l'intérieur du bureau VNC, tout comme votre application. Ensuite, vous pouvez faire "File -> Acquire -> Screen Shot..." comme d'habitude. Vous souhaiterez probablement simplement sauver le fichier et l'éditer plus tard dans votre bureau normal, afin d'éviter de faire défiler l'image. Parfois, vous devez faire défiler l'écran pendant un certain temps avant de trouver la fenêtre qui vient de s'ouvrir !  

Exigences matérielles

Ne pensez pas que vous avez besoin de beaucoup de mémoire vidéo pour effectuer cette manipulation. Ma machine a cinq ans et ma carte graphique a même dix ans (4Mo de RAM). Vous devez juste attendre un peu, c'est tout.  

Mon résultat

C'est juste un exemple : je compare deux version de la même section du manuel allemand de l'installateur de Debian dans KDiff3. Cliquez dessus pour voir la résolution originale.

 

Références

Toutes les références ont été vérifiées le 15 novembre 2006 (et généralement en anglais, NdT).

[1] Deux utilitaires diff graphiques parmi d'autres :
TkDiff : http://tkdiff.sourceforge.net
KDiff3 : http://kdiff3.sourceforge.net

[2] VNC dans Wikipedia :
http://en.wikipedia.org/wiki/VNC
Quelques informations de base, par Tim Waugh pour le Red Hat Magazine :
http://cyberelk.net/tim/articles/VNC/index.html

[3] Page d'accueil de RealVNC :
http://www.realvnc.com

[4] x11vnc (une longue page):
http://www.karlrunge.com/x11vnc/
Aussi, ReanVNC version 4 et supérieure revendiquent la possibilité de partager la session X11 en cours.

[5] Jason's Web Thingy: Securing a VNC connection with OpenSSH
http://www.trekweb.com/~jasonb/articles/vnc_ssh.shtml
From the old AT&T/Cambridge VNC pages: Making VNC more secure using SSH
http://www.cl.cam.ac.uk/research/dtg/attarchive/vnc/sshvnc.html

L'auteur:

[Photo of the Author]

Je suis en dernière année d'informatique (et un peu de neurobiologie) à l'Université de Hamburg, en Allemagne. Pendant mon temps libre, j'aime faire de l'aviron, enregistrer et écouter des audiobooks, les logiciels libres et le contenu ouvert, ainsi que la philosophie derrière tout cela.