Outils pour utilisateurs

Outils du site


vnc_debian

Accès à distance par VNC sur un compte ouvert

Objectif

On dispose d'un ordinateur avec une debian etch, installée avec un bureau graphique (gnome ou KDE).

Il s'agit ici d'obtenir à distance sur un autre ordinateur, par l'intermédiaire d'une liaison réseau, le bureau graphique de la debian.

Dans ce tuto, l'accès à distance concernera uniquement un compte déjà ouvert sur l'ordinateur.
Attention: il y a une autre solution, traitée ailleurs, qui donne accès à la page de login, permettant ainsi à chaque utilisateur d'accéder à distance à son bureau.

Ce qui suit a été testé sur une debian etch fraichement installée:

  • pour les spécificités “gnome”: avec gnome mais sans KDE,
  • pour les spécificités “KDE”: avec KDE mais sans gnome,
  • pour les non-spécifiques dans les 2 situations: gnome sans KDE et KDE sans gnome.

Principe de solution

Deux cas différents:

  • 1- Accès à distance avec affichage du même écran graphique que celui déjà affiché en local
    • dans ce cas, toute modification sur l'un des écrans se répercute immédiatement sur l'autre
    • ⇒ on utilise “vino” pour gnome et “krfb” pour KDE.
  • 2- Accès à distance à un bureau graphique suplémentaire du compte déjà ouvert en local
    • ⇒ on utilise “vnc4server” (gnome et KDE).

1- Accès à distance avec affichage du même écran graphique que celui déjà affiché en local

Cas de gnome

On utilise “vino”, installé par défaut avec gnome. Si vous ne l'avez pas, installez-le (paquet “vino”).

Pour configurer vino, on lance au menu gnome: Bureau → Préférences → Bureau à distance. On peut aussi appeler “vino-preferences” dans une console sous votre login.

vous pouvez configurer comme suit:

Si vous cochez “vous demandez confirmation”, il faudra que quelqu'un devant l'ordinateur soit là pour répondre “oui”.

Le mot de passe est le mot de passe de la connexion vnc, pas celui de l'utilisateur.

Après cette config, c'est tout pour le côté serveur vnc.

Sur la machine cliente, utilisez un client vnc de votre choix:

  • vnc4viewer sur linux en console
  • Terminal Serveur Client (tsclient) sur gnome
  • Krdc sur KDE
  • realvnc, tightvnc ou ultravnc sur Windows

Donnez l'adresse suivante (mettez la bonne adresse):

192.168.0.215:0

ou, bien entendu:

192.168.0.215:5900

Et vous aurez une fenêtre avec le même écran que celui qui est affiché sur l'ordinateur serveur. Toute modification sur l'un des écrans (y compris la souris) se répercutera sur l'autre!

Bon, ce n'est pas très rapide de ce fait (charge de synchronisation permanente des 2 écrans).

On peut passer par internet, mais ce n'est pas raisonnable, car les mots de passe circulent en clair: il faut dans ce cas mettre la liaison vnc dans un tunnel SSH. Voir plus loin pour cela!

Cas de KDE

On utilise “krfb”, installé par défaut avec KDE. Si vous ne l'avez pas, installez-le (paquet “XXXXX”).

Pour configurer krfb, on lance au menu KDE: menu → système → krfb Partage de bureau.

Puis → bouton “configurer”

vous pouvez configurer comme suit:

Si vous cochez “Confirmer les connexions non-invitées avant acceptation”, il faudra que quelqu'un devant l'ordinateur soit là pour répondre “oui”.

Le mot de passe est le mot de passe de la connexion vnc, pas celui de l'utilisateur.

Prenez l'onglet “Réseau” et décochez la case pour être sûr que le port choisi sera bien “5900”.

Après cette config, c'est tout pour le côté serveur vnc.

Sur la machine cliente, utilisez un client vnc de votre choix:

  • vnc4viewer sur linux en console
  • Terminal Serveur Client (tsclient) sur gnome
  • Krdc sur KDE
  • realvnc, tightvnc ou ultravnc sur Windows

Donnez l'adresse suivante (mettez la bonne adresse):

192.168.0.215:0

ou, bien entendu:

192.168.0.215:5900

Et vous aurez une fenêtre avec un bureau graphique supplémentaire du compte déjà ouvert en local.

On peut passer par internet, mais ce n'est pas raisonnable, car les mots de passe circulent en clair: il faut dans ce cas mettre la liaison vnc dans un tunnel SSH. Voir plus loin pour cela!


2- Accès à distance à un bureau graphique suplémentaire du compte déjà ouvert en local

Installer le serveur VNC

Installation du paquet “vnc4server” qui entraine l'installation de vnc4-common

Activer XDMCP

Pour permettre l'accès graphique à distance, il faut activer XDMCP:

Avec gdm de gnome

Vous pouvez configurer correctement avec le programme graphique: Bureau → Administration → fenêtre de connexion.

Onglet “Distante”. Choix style: “Identique à locale”.

A la fin, votre fichier /etc/gdm/gdm.conf doit avoir:

[xdmcp]
Enable=true

Relancez gdm par:

# /etc/init.d/gdm restart

Si à la suite de cette commande vous vous retrouvez en console (écran noir), loguez-vous en root et lancez gdm avec:

# /etc/init.d/gdm start

Avec kdm de KDE

Dans un éditeur de texte sous root, cherchez dans le fichier /etc/kde3/kdm/kdmrc le bloc de données commençant par

[Xdmcp]

Et dans ce bloc, activez XDMCP comme suit:

Enable=true

Et relancer kdm par:

# /etc/init.d/kdm restart

Si à la suite de cette commande vous vous retrouvez en console (écran noir), loguez-vous en root et lancez kdm avec:

# /etc/init.d/kdm start

Lancer le serveur VNC une première fois

Lancer vnc4server la 1ère fois sous votre login (pas sous root!)

$ vnc4server

→ il vous demande de définir un mot de passe pour la connexion VNC (et vous le fait répéter), mais il ne le demandera plus les fois suivantes: ce mot de passe servira à l'authentification du client VNC.

→ et lance l'écran “1” (en fait, le 1er écran non déjà pris, l'écran :0 étant l'écran qui est affiché et que vous utilisez normalement).

→ vous pouvez demander un écran particulier (non encore pris!), par exemple l'écran :3:

$ vnc4server :3

Vous pouvez aussi demander une définition particulière d'écran, pour s'ajuster au mieux au moniteur que vous avez sur votre machine cliente:

$ vnc4server :1 -geometry 1680x1050 -depth 24

Cela représente une fonctionnalité très intéressante. En effet, si, par exemple, votre écran normal sur le serveur VNC est de 1280×1024:

  • vous pouvez demander un écran 1680×1050 (par exemple) à distance pour avoir le plein écran sur la machine cliente.
  • Ou au contraire un écran 800×600 pour diminuer la charge du réseau (si ça passe par internet par exemple).

Correction du fichier de lancement xstartup

La 1ère fois que vnc4server est lancé, il fabrique un script de lancement dans votre home: /home/user/.vnc/xstartup. Nous allons modifier ce script (éditeur sous votre login).

Il faut décommenter les 2 lignes au début comme cela est proposé (en anglais). Puis, il faudra ajouter à ce fichier le lancement du bureau graphique, selon que vous serez sous KDE ou sous gnome.

Sous gnome:

#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
x-window-manager &
gnome-session &

Sous KDE:

#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
x-window-manager &
startkde &

Rendre le script /etc/X11/xinit/xinitrc exécutable

(mais pourquoi ne l'est-il pas? j'ai cherché un bon moment…).

En console sous root, cela donnera:

# cd /etc/X11/xinit
# chmod a+x xinitrc

Correction des chemins de recherche des polices de caractères

Quand on lance vnc4server et qu'on regarde le fichier log /home/user/.vnc/nomduserveur:1:log, on constate un certain nombre d'erreurs concernant des polices de caractères non trouvées. Messages du genre:

Could not init font path element /usr/share/fonts/X11/100dpi, removing from list!

En fait, le serveur VNC cherche les polices de caractères ici: /usr/X11R6/lib/X11/fonts alors qu'elles sont là: /usr/share/fonts/X11.

Pour éviter cela, il suffit d'ajouter des liens symboliques suivants (en console sous root):

# cd /usr/X11R6/lib/X11/fonts
# ln -s /usr/share/fonts/X11/misc misc
# ln -s /usr/share/fonts/X11/100dpi 100dpi
# ln -s /usr/share/fonts/X11/75dpi 75dpi
# ln -s /usr/share/fonts/X11/Type1 Type1

Pour éviter l'erreur qui concerne la police de caractères “cyrillic”, il suffit d'installer cette police (paquet “xfonts-cyrillic”) et, bien sûr, d'ajouter comme précédemment le lien symbolique qui manque (en étant toujours dans le répertoire précédent /usr/X11R6/lib/X11/fonts).

# ln -s /usr/share/fonts/X11/cyrillic cyrillic

Mais bon, les caractères cyrillic…

Pour éviter l'erreur suivante:

Could not init font path element /var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType, removing from list!

il suffit d'installer le paquet: “x-ttcidfont-conf”.

Après tout cela, le lancement du serveur VNC ne déclenche plus aucune erreur dans le fichier log (c'est quand même plus propre :-D).

Redémarrage du serveur VNC

Après ces modifications, il faut tuer l'écran créé (ici, on a pris l'exemple du “:1”) et le relancer (en console sous votre login):

$ vnc4server -kill :1
$ vnc4server :1

Lancer le client VNC

Vous pouvez utiliser n'importe quel client VNC:

  • vnc4viewer sur linux en console
  • Terminal Serveur Client (tsclient) sur gnome
  • Krdc sur KDE
  • realvnc, tightvnc ou ultravnc sur Windows

Dans tous les cas, l'adresse à indiquer dans ces client VNC sera (ajuster l'adresse IP et le numéro d'écran):

192.168.0.215:1

ou encore (remarquez les 2 points!):

192.168.0.215::5901

Sur linux, avec le vnc4viewer installé, cela donnerait (en console sous votre login):

$ vncviewer 192.168.0.215:1

Avec Windows, j'utilise realvnc, bien qu'il ne soit pas le plus performant, parce que c'est le seul qui me passe tous les caractères de mon clavier, y compris les caractères qui demandent 2 touches successives (comme “ê”).

Avec tous les clients VNC, il vous sera demandé le mot de passe de la connexion VNC (celui que vous avez rentré en lançant le serveur la 1ère fois sur votre compte), et vous aurez une fenêtre graphique avec votre bureau.


Sécurisation d'une connexion VNC par un tunnel SSH

NB: pour le tunnel SSH, ça fonctionne de la même façon pour KDE et pour gnome.

Préalable pour SSH côté serveur VNC

En plus de la configuration du serveur VNC comme ci-dessus, il vous faut SSH :-D (installez le paquet “ssh” si vous ne l'avez pas, et vérifiez qu'il est activé).

Lancement d'une connexion VNC-SSH avec Windows XP

On utilise le programme putty comme console SSH pour Windows. Si vous ne l'avez pas, installez-le: http://www.chiark.greenend.org.uk/~sgtatham/putty/.

Pour mettre en place le tunnel, lancez putty et configurez-le comme suit:

  • Page “session” → case “host name” → mettez l'adresse du serveur VNC (192.168.0.215 dans mon exemple)
  • Page connexion→SSH→tunnel:
    • case “source port” → mettre “5909”
    • case “destination” → mettre “localhost:5901”
    • cliquer sur le bouton “add”

Vous pouvez sauvegarder sous un nom de votre choix (à chaque lancement de putty, toutes les cases sont vides).

Et vous lancez la connexion (bouton “open” en bas)

La 1ère fois, il vous est demandé si c'est bien la machine que vous voulez atteindre (selon son “fingerprint”) → yes

  • après cette réponse, le serveur VNC sera inscrit comme “hôte connu” dans votre machine cliente et la question ne vous sera plus posée.
  • Si vous passez par internet, il serait prudent d'avoir connaissance du fingerprint SSH du serveur VNC pour éviter les usurpations d'adresses.

Dans la console SSH → vous vous loguez sous votre compte (celui de la machine serveur VNC que vous voulez atteindre).

C'est tout pour putty: le tunnel est maintenant en place.

Lancez maintenant le client VNC (realvnc, tight, ultravnc, …), avec l'adresse suivante:

localhost:9

ou, bien sûr,

localhost::5909

Et vous aurez une fenêtre avec le bureau graphique du serveur VNC, ouvert sur votre compte. Mais cette fois-ci, tout passera par le tunnel SSH à commencer, bien sûr, par les mots de passe.

Si vous avez à traverser un parefeu, n'oubliez pas d'ouvrir le port 22 (=SSH).

Cas particulier: partage de l'écran déjà affiché en local

Si vous avez choisi le partage complet de l'écran déjà affiché en local (cf chapitre 1 de cette page):

==⇒ Dans l'exemple précédent, il suffit de remplacer “5901” par “5900”

Lancement d'une connexion VNC-SSH avec Linux

Comme pour le serveur VNC, il vous faut SSH activé (paquet “ssh”).

Dans une console sous votre login (pas en “root”!), vous faites:

$ ssh -L 5909:localhost:5901  192.168.0.215

⇒ 5909: ce sera le nouveau port à mettre dans le client vnc pour passer par le tunnel SSH

⇒ 5901: c'est le port à atteindre effectivement au bout du tunnel SSH pour atteindre le serveur VNC (et l'écran :1 déjà ouvert sous votre compte)

⇒ 192.168.0.215: c'est l'adresse de la machine serveur vnc (on pourrait avoir un nom de domaine)

Pour la 1ère fois, il vous est demandé si c'est bien la machine que vous voulez atteindre (selon son “fingerprint”) → “yes”.

  • Le client SSH inscrit alors cette machine comme “hôte connu” et ne vous reposera plus la question.
  • Si vous passez par internet, il serait prudent d'avoir connaissance du fingerprint SSH du serveur VNC pour éviter les usurpations d'adresses.

Le lancement de cette commande vous demande votre mot de passe (celui de votre compte déjà ouvert sur la machine serveur VNC que vous voulez atteindre).

Et vous laissez la console ouverte!

Vous lancer alors votre client VNC préféré (vncviewer (paquet “vnc4viewer”) en console sous votre login, ou Krdc sur KDE, ou lsclient sur gnome) avec comme adresse:

localhost:9

ou, bien sûr:

localhost::5909

Après l'introduction du mot de passe de la connexion VNC, vous aurez la fenêtre avec le bureau graphique du serveur VNC ouvert sur votre compte. Mais cette fois-ci, tout passera par un tunnel SSH, à commencer, bien sûr, par les mots de passe.

Si vous avez à traverser un parefeu, n'oubliez pas d'ouvrir le port 22 (=SSH).

Cas particulier: partage de l'écran déjà affiché en local

Si vous avez choisi le partage complet de l'écran déjà affiché en local (cf chapitre 1 de cette page):

==⇒ Dans l'exemple précédent, il suffit de remplacer “5901” par “5900”

vnc_debian.txt · Dernière modification: 2007/12/15 09:35 par tyrtamos

Outils de la page