Outils pour utilisateurs

Outils du site


vnc_xinetd_opensuse

Accès à distance graphique multi-utilisateur par VNC

(application à la suse 10.1 et 10.2 kde)

Problème à résoudre:

Contrairement à windows, linux est multi-utilisateur. Cela veut dire que plusieurs personnes sur plusieurs machines d'un même réseau peuvent utiliser en même temps un même linux installé sur l'une des machines du réseau.

Mais concrètement, comment on fait ?

Principe:

Tout le monde connait le principe de “VNC”. Sur la machine serveur vnc, on exécute “vncserver”, et sur la machine cliente, on exécute “vncviewer” (avec les bons paramètres). Et l'on obtient sur la machine cliente le même écran graphique que l'on aurait en étant devant la machine serveur. On peut d'ailleurs faire cela quelque soit le système d'exploitation (windows ou linux) de chacune des 2 machines.

Mais l'inconvénient, c'est que le serveur vnc s'exécute alors sur la session déjà ouverte d'un compte donné. Cela peut avoir un intérêt, par exemple si on veut assister quelqu'un à distance. Mais ce n'est pas cela qu'on cherche ici: on veut accéder à la machine linux à partir de n'importe où sur le réseau, puis s'inscrire sur l'un quelconque des comptes existants sur cette machine (donc = accés à la page de login “kdm” pour KDE).

La solution est simple et déjà partiellement configurée sur la suse: il faut que le serveur vnc, au lieu d'être lancé sur un compte, soit lancé par xinetd au démarrage. L'accès par vncviewer sur la machine cliente affiche alors l'écran du login de linux, comme si vous étiez devant au démarrage.

Ainsi, au sein de votre réseau local, une fois votre machine linux configurée comme serveur vnc (qui peut être comme dans mon cas un pc de récupération situé à la cave…), n'importe quel pc de votre domicile, qu'il soit linux ou windows, peut utiliser la machine linux (jeux, bureautique, internet, …) en même temps. Et, bien sûr, on peut continuer à utiliser le poste serveur vnc directement!

La limite, c'est bien entendu la puissance du PC serveur VNC par rapport à la charge demandée par l'ensemble des utilisateurs. Une autre limite, c'est que les jeux qui nécessitent l'accélération 3D ne peuvent être utilisés que sur la machine elle-même !

Mode opératoire

installation sur le pc "serveur vnc" linux

Il faut d'abord qu'au démarrage du pc serveur vnc linux, on arrive à la page de login (kdm): il faut donc désactiver le login automatique s'il est actif. Pour cela, ça se trouve ici:

  • menu → configuration personnelle → Administration du système → gestionnaire de connexion → onglet “Commodités”

Ensuite, vous n'avez besoin que du package: xorg-x11-Xvnc, en principe installé par défaut, et déjà pré-configuré dans xinetd.

Vous n'avez pas besoin de mettre l'administration à distance ni dans yast, ni dans sax2.

Par contre, accédez à xinetd par yast:

  • yast → services réseaux → service réseaux (xinetd)

xinetd n'est pas actif tant qu'il n'a aucun module actif. Rendez xinetd actif. Il devrait déjà y avoir vnc1, vnc2 et vnc3 d'installés. Activez vnc1 par exemple. Ainsi, au lancement de linux, le serveur vnc “/usr/X11R6/bin/Xvnc” sera lancé, et sera accessible par le port 5901.

Vous voyez qu'il y a des “arguments serveur” qui sont passés avec le lancement de Xvnc par xinetd. En particulier, vous pouvez paramétrer les caractéristiques de l'écran de la machine cliente afin d'avoir un “plein écran” parfaitement adapté!. Sélectionnez la ligne vnc1, et cliquez sur “modifier”. Pour avoir le plein écran sur mon pc windows, j'ai mis les caractéristiques de cet écran: -geometry 1680×1050 -depth 24 (alors que le serveur vnc linux est à 1280×1024).

Ne touchez pas aux autres paramètres. Cela donne dans mon cas comme arguments serveur:

:42 -inetd -once -query localhost -geometry 1680x1050 -depth 24  

Validez. Yast entérine vos paramètres et relance xinetd. Si on regarde ce que cela donne dans le fichier de config de xinetd (etc/xinetd.d/vnc):

service vnc1
    {
    socket_type     = stream
    protocol        = tcp
    wait            = no
    user            = nobody
    server          = /usr/X11R6/bin/Xvnc
    server_args     = :42 -inetd -once -query localhost -geometry 1680x1050 -depth 24
    type            = UNLISTED
    port            = 5901
    }  

Et voilà, c'est fait !

A noter que votre machine linux, démarrée comme serveur vnc, n'a même pas besoin de dépasser l'écran du login si vous n'avez pas besoin de travailler directement dessus.

Un des avantages de cela est que vous pouvez rebooter votre pc serveur vnc à distance! Quand vous avez la liaison vnc, vous ouvrez une console sous root, et vous faites “reboot” ou “shutdown -r now”. Bien sûr la liaison sera coupée, et vous pourrez la rétablir au bout de quelques minutes, le temps que le reboot soit terminé. Cela nécessite, bien sûr, que votre linux soit celui “par défaut” dans le menu grub.

Je suppose qu'on doit pouvoir aussi déclencher à distance la mise en veille du pc serveur vnc ainsi que son réveil par la carte réseau, mais la mise en veille ne marche pas bien chez moi.

Installation sur un pc "client vnc" windows

Vous pouvez utiliser n'importe quel client VNC (=“vncviewer”). J'en connais au moins 3 sur windows: “realvnc” (l'original), “tightvnc” et “ultravnc”. J'utilise maintenant “realvnc” parce que c'est le seul à me transmettre les caractères accentués qui nécessitent un chapeau ou un tréma (â, ë, etc…), et donc 2 frappes de touche sur les claviers français.

Au lancement du client vnc, il suffit de mettre l'adresse du serveur vnc et le port. Pour l'adresse, je conseille de placer l'adresse ip au lieu du nom de l'ordinateur, ce qui évite la perte de temps lié à la résolution de nom, mais cela suppose que votre serveur vnc a une adresse ip fixe au sein de votre réseau local. Pour le port, vous n'avez pas le choix, il faut mettre celui qui correspond au réglage de votre vnc dans xinetd .

Pour moi, l'adresse placée dans le client vnc sera: “192.168.0.200:1”. Au lieu de “:1”, vous pouvez mettre “::5901”, c'est pareil (il y a bien “::” devant le 5901 !).

Au lancement du client vnc avec la bonne adresse et le bon port, vous avez l'écran login de votre serveur vnc linux avec tous les comptes. Vous mettez votre login et votre mot de passe, et vous vous retrouvez avec votre bureau graphique (kde ou gnome) sous votre compte. Si vous avez choisi le “plein écran”, vous avez, alors que vous êtes encore sous windows, le bureau de votre linux en plein écran !!!

Pour ma part, je travaille comme cela: sur mon pc principal avec windows (désolé…), je travaille sur linux avec vnc (ou freenx ou nx server), la machine linux étant à la cave, et je passe ainsi de linux à windows et de windows en linux en moins d'une seconde. J'ai donc à tout moment “le meilleur des 2 mondes”. Et c'est une situation étrange: je travaille à 90% sur linux sans jamais quitter Windows…

Encore mieux: je travaille très souvent avec plusieurs OS sous VMware Server (une quinzaine!), et je trouve que d'utiliser un programme d'accès à distance pour travailler avec les “OS invités” permet un travail beaucoup plus confortable que d'y accéder avec la console VMware.

Vous pouvez configurer une autre machine cliente en utilisant le même port si les caractéristiques de l'écran sont les mêmes. Sinon, vous pouvez paramétrer en conséquence un autre vnc (vnc2 par exemple) dans le xinetd du serveur vnc, par exemple “-geometry 1024×768 -depth 16”. Auquel cas, il faudra indiquer le port :2 (ou ::5902) à l'appel du client vnc. Cela suppose aussi que la personne qui accède ainsi à votre serveur vnc linux a déjà un compte perso sur ce serveur.

C'est fait ! Vous pouvez faire désormais vos développement en c++, pendant que votre conjoint fait son courrier, et que votre ado cause avec ses copains/copines avec kopete, tout ceci en travaillant sur la même machine linux et en même temps!

Installation sur un pc "client vnc" linux

Sur une machine cliente linux, c'est encore plus simple. Si vous avez kde, utilisez Krdc!!!

  • menu → système → accès à distance → connexion à un bureau distant (Krdc).

Vous utilisez les mêmes “adresse:port” que sur le client vnc de windows.

Et si vous avez gnome… utilisez Krdc aussi ! (j'ai essayé avec ubuntu, ça marche!).

Transmission du son

Désolé, vnc ne transmet pas le son pour l'instant, à part la “cloche” (parce qu'elle est prise en charge directement par le serveur X). Si vous avez absolument besoin du son, passez à FreeNX!

Utilisation pratique

Une fois installé, je vous suggère d'utiliser, dans le client vnc, la compression ZRLE, qui accélère un peu l'affichage. Mais en fait, cela dépend de votre installation: Si vous avez des machines puissantes et un débit de réseau limité, il faut compresser le plus possible (ZRLE). Si vous avez des machines limitées avec un réseau ethernet “gigabit”, vous avez plutôt intérêt à ne pas compresser (raw): essayez la solution qui vous convient le mieux!

Je vous suggère de supprimer le fond d'écran pour accélérer l'affichage. Pour ma part, j'utilise un fond bleu (0,0,192).

Lorsque vous recevez linux en plein écran sur votre machine windows, il faut savoir comment revenir à l'écran windows. Cela dépend du client vnc que vous utilisez. Avec RealVNC sur windows, il faut faire F8 et cliquer sur “réduire” dans le petit menu qui s'affiche à l'emplacement de la souris. Avec UltraVNC, vous approchez la souris du haut de l'écran, et il apparait une barre de type barre de fenêtre (c'est très pratique). Et on revient de windows à linux en cliquant simplement sur la case du vnc dans la barre des tâches windows.

Lorsque vous quittez la connexion, essayer de le faire proprement: “menu → déconnexion → terminez la session”. Si vous supprimez sauvagement la fenêtre, vous risquez de laisser des processus en fonctionnement qui vous gèneront lors de la prochaine connexion. Par exemple, firefox vous dira qu'il est déjà en fonctionnement et s'ouvrira sur une autre session, mais vous n'aurez plus vos bookmark! Si ça vous arrive, il vous faudra tuer les processus firefox: menu → système → moniteur → surveillance du système → onglet “processus”. Vous cherchez le ou les processus firefox et vous les tuez.

Bonus: permettre le copier-coller entre windows et linux!

Le copier-coller n'est pas transmis entre le client vnc et le serveur vnc ni dans un sens ni dans l'autre. Ce qui fait que le moindre échange d'un petit morceau de texte (une adresse web par exemple) nécessite de passer par un disque d'échange samba. J'ai travaillé comme cela quelques temps: ce n'est vraiment pas pratique.

Solution: utiliser autocutsel.

Comme ce n'est pas un rpm, il faudra compiler. Préparez donc d'abord les conditions pour que la compilation se déroule bien. Avec yast, vous devez installer, si ce n'est pas déjà fait, les packages “gcc”, “make” et le “kernel source”. Il est possible qu'il soit nécessaire d'avoir d'autres packages: regardez bien les messages d'erreur lors de la compilation: ils diront eux-même ce qu'il manque!

Téléchargez le programme source “autocutsel-0.8.1.tar.gz” ici: http://www.lepton.fr/tools/autocutsel/

Placez le dans un répertoire quelconque, /tmp par exemple (moi, je le met dans /resources/progsup/).

Décompressez avec Ark sous kde ou par un autre moyen → tout se place dans un répertoire /tmp/autocutsel-0.8.1

Avec une console sous root, placez-vous dans ce répertoire, compilez et installez:

# cd /tmp/autocutsel-0.8.1
# ./configure
# make
# make install  

Vous placez l'exécutable “autocutsel” quelque part (/chemin/autocutsel) qui peut être /usr/bin pour que ce soit dans votre PATH.

Il ne reste plus qu'à le lancer en tâche de fond, une fois que la connection vnc est établie, et sous le login correspondant à la connexion vnc (pas en root!).

$ /chemin/autocutsel &  

C'est le “&” à la fin de la ligne qui permet au programme de rester en tâche de fond (=démon).

Et voilà, vous avez désormais quelque chose de rare et d'inattendu: un copier-coller entre windows et linux, qui fonctionne dans les 2 sens!

Automatisation:

Dans le répertoire utilisateur /home/utilisateur/.kde/Autostart, placez un fichier texte (script shell) appelé par exemple “startautocutseld” avec comme contenu:

#! /bin/bash
/chemin/autocutsel &  

Rendez-le exécutable et effacez l'éventuel fichier backup placé par votre éditeur de texte.

A partir de maintenant, pour cet utilisateur, le copier-coller marchera automatiquement à chaque nouvelle connexion sans intervention supplémentaire.

Si vous voulez faire “propre”, assurez l'arrêt du démon à la fin de la session kde de la façon suivante. Créez un nouveau répertoire “shutdown” au même niveau que le “Autostart” précédent, et placez-y un fichier texte appelé, par exemple, “stopautocutseld”, et contenant:

#! /bin/bash
killall autocutsel  

Rendez-le exécutable et effacez l'éventuel fichier backup placé par votre éditeur de texte.

C'est fait: vous avez le copier-coller automatique dans les 2 sens!

KDE ou gnome: pour ceux qui ne veulent pas choisir!

Dès que vous accédez à votre machine linux par la page de login, vous avez accès au choix de votre type de bureau: KDE, gnome, etc… Pour autant, bien sûr, que ces bureaux aient été installés.

Si vous avez KDE, c'est facile d'installer gnome en plus: Avec “yast → logiciels → ajouter ou supprimer des logiciels”. Choisissez le filtre “sélections” et cochez la case “système gnome”. Yast va charger tout ce qui permet à gnome de fonctionner.

Une fois que c'est fait, à partir de votre machine cliente vnc windows (par exemple), ouvrez une 2ème session vncviewer, et demandez simplement à la page de login de charger le bureau gnome.

—> Vous avez désormais une session KDE et une session gnome de votre compte linux sur votre machine windows!

Vous pouvez aussi, à l'intérieur de votre session KDE, ouvrir une session gnome avec krdc… ou le contraire!

Non d'un chien, mais comment linux peut-il faire cela sans se mélanger les pinceaux?

Connection vnc sécurisée avec ssh

Le protocole vnc n'est pas sécurisé (tout au moins celui qui est gratuit). Ainsi, toutes les données échangées entre les machines circulent en clair, y compris les logins et mots de passe. Cependant, l'exigence de sécurité au sein d'un réseau local domestique est loin du “secret défense”. Quoique… Mais en tout cas, si vous utilisez vnc via internet, ce n'est vraiment pas raisonnable…

Toujours est-il qu'il est intéressant de savoir faire fonctionner vnc dans un cadre sécurisé grâce à “ssh”.

Le principe est simple: il y a un serveur ssh sur la machine “serveur vnc” linux, et un client ssh sur la machine “cliente vnc” (windows ou linux). il faut établir la liaison sécurisée ssh (un “tunnel”) entre les 2 machines, puis lancer le vncviewer sur la machine cliente vnc avec l'adresse de la machine cliente vnc elle-même (localhost). Ce qui fait que le flux échangé entre le client vnc et le serveur vnc sera entièrement crypté/decrypté par le tunnel ssh déjà établi entre les 2 machines. Et ça marche aussi bien au sein du réseau local que via internet.

C'est simple à comprendre, mais quand on passe à la pratique, c'est autre chose. Et je n'ai pas trouvé beaucoup de howtos simple sur le sujet sur le web…. Voici le mien.

Configuration du "serveur ssh" sur le "serveur vnc" linux

Sur la machine “serveur vnc” linux, on utilise le package “openssh” qui est installé et démarré par défaut sur la suse. Il fournit le serveur démon “/usr/sbin/sshd”, qui est lancé au démarrage et apparaît comme processus en cours (vérifiez dans menu → système → moniteur → surveillance du système → onglet “processus”).

S'il n'est pas lancé, vous pouvez le configurer et le lancer avec webmin, ou vous noterez que le fichier de config est: /etc/ssh/sshd_config (la config par défaut convient) et le lancement du service est obtenu par: /etc/init.d/sshd start.

Si vous voulez installer vnc dans un tunnel ssh par internet, n'oubliez pas d'ouvrir le port 22 TCP de votre pare feu pour les demandes venant d'internet vers le serveur ssh.

Configuration du "client ssh/vnc" windows

Sur la machine cliente windows, j'utilise “putty”.

Téléchargement: http://www.chiark.greenend.org.uk/~sgtatham/putty/

Tant qu'à faire, téléchargez la version windows qui s'installe toute seule…

Lancez ensuite putty. Configuration:

Page “session”:

  • hostname=le nom ou l'adresse ip de votre serveur ssh (dans mon cas: 192.168.0.200 en interne, ou nesti.dyndns.org pour internet).
  • ne touchez à rien d'autre (port=22, protocole ssh)

Page “ssh” → “ tunnel”:

  • source port=5909 par exemple. Rappelez-vous du dernier chiffre (9).
  • destination=localhost:5901. (attention à la légère différence de syntaxe: c'est “:5901” et pas “::5901” comme dans vncviewer)
  • cliquez sur “add”

Pour vous faciliter la vie, sauvegardez vos paramètres pour pouvoir les rappeler le prochain coup. Car, les zones sont toujours vides au lancement de putty.

C'est tout pour la config. Lancez la connexion ssh en cliquant sur “open”. Il s'établit entre le client ssh windows et le serveur ssh linux un échange pour préparer les cryptages futurs.

Un écran shell apparaît sur le bureau windows: vous êtes dans une console shell linux du serveur vnc linux, et vous devez vous loguer sur votre compte linux. Quand c'est fait, ça y est, le canal ssh est installé. Vous pouvez travailler avec la console dans la fenêtre windows, comme si vous étiez dans une console shell devant votre machine linux! Mais ce n'est pas ce que nous cherchons ici. Continuons.

Lancez ensuite votre vncviewer comme tout à l'heure. Mais l'adresse change: au lieu de mettre 192.168.0.200:1 qui aurait établi une connexion directe avec le serveur vnc, il faut mettre “localhost:9” parce que c'est le canal ssh qui assurera la liaison. En fait, ce qui est dirigé par le viewer vnc vers localhost:9 sera crypté par le client ssh et envoyé au serveur vnc indiqué (192.168.0.200 ou nesti.dyndns.org) par l'intermédiaire du serveur ssh. Simple, non ? (là, j'en rajoute un peu…).

Et voilà, vous avez de nouveau sur votre pc windows, votre bureau préféré de votre serveur vnc linux, mais les liaisons sont maintenant sécurisées tant en local que par internet.

Configuration du "client ssh/vnc" linux

Si votre machine cliente est linux, vous avez toujours besoin de openssh, changé et exécuté à l'installation sur la suse

Pour établir une liaison ssh avec votre serveur ssh/vnc linux, vous vous placez sur votre machine cliente dans une console sous votre compte (pas en root), et vous faites:

$ ssh   -L   5909:localhost:5901   192.168.0.200  

ou, pour une liaison par internet:

$ ssh   -L   5909:localhost:5901   nesti.dyndns.org  

Je rappelle que dans mon exemple, l'adresse ip locale (et fixe) de mon serveur ssh/vnc est: 192.168.0.200, et que nous utilisons vnc1 de xinetd: port 5901.

Il vous demande si vous voulez vraiment faire cela (→ “yes”), …, puis le login du compte que vous avez sur la machine serveur linux, et vous vous retrouver dans la console shell sur votre compte de la machine serveur linux. Laissez comme cela.

Vous lancez ensuite krdc sur la machine cliente (menu → système → accès à distance → connexion à un bureau distant (krdc)), et vous mettez comme adresse:

localhost:9  

Au lieu de 192.168.0.200:1 que vous auriez mis sans le tunnel ssh.

Voilà, c'est fait, vous travaillez sur une même machine avec les 2 linux, les liaisons avec la machine distante (le serveur ssh/vnc) étant maintenant sécurisées.

Amusez-vous bien !

vnc_xinetd_opensuse.txt · Dernière modification: 2007/12/15 09:37 par tyrtamos

Outils de la page