Artisan Numérique

/système/réseau/ssh/dm/freenx/nomachine/x11/ Mettre en oeuvre NoMachine

NoMachine est un système client-serveur s'appuyant sur X11 en y ajoutant une forte compression. Le résultat est un accès quasi tout-terrain à votre session graphique à distance.

De NoMachine à FreeNX

FreeNX est la version libre d'un excellent produit NoMachine. L'objectif de ces serveurs est de permettre, même à très bas débit, de "transporter" les données X11 d'un serveur distant à une machine locale, et ce même sous Windows.

L'idée de NoMachine exploiter le tube chiffré SSH mais en le combinant avec une compression, optimisation et mise en cache pour réduire au minimum le volume de données échangées. Le résultat d'une qualité et d'une rapidité étonnante.

Le système NoMachine ne demande aucune modification des applications qui utilise le protocole X11 classique. En revanche il n'utilise pas directement le serveur X11 local et passe, comme VNC, par un client gratuit fournit par NoMachine et disponible sur GNU/Linux, Windows, MacOS et Solaris.

Le serveur NX était à l'origine seulement commercial et les sources pas toutes libres. C'est pour cela qu'est né le projet FreeNX permettant d'intégrer dans toutes les distributions un serveur libre exploitant le protocole NX. Ceci dit, FreeNX ne serait rien sans la société NoMachine, donc pensez-y pour un usage en entreprise et prenez plutôt les licences chez eux.

Mise en oeuvre

L'installation du serveur FreeNX sur la machine distante est très simple, il suffit juste de faire un urpmi freenx. Ceci fait, il faut indiquer à freenx que l'utilisateur gaston est autorisé à s'y connecter :

rootnxserver --adduser gaston --system
rootnxserver --passwd gaston
mon_de_passe_gaston

Ceci fait, il faut maintenant télécharger et installer le client NX sur votre machine. Ensuite, il ne reste alors plus qu'à tester. Pour cela lancez le nxclient, ce qui devrait faire apparaître une fenêtre de connexion. Saisissez gaston comme login, le mot de passe, donnez le nom qui vous amuse à la session, puis cliquez sur configure...

Dans le cadre Server, saisissez le nom ou l'IP de la machine distante et cliquez sur Key....

NX utilisant le système SSH sans mot de passe pour se connecter. Il va donc nous falloir récupérer la clef publique du serveur qui se trouve sur la machine distante dans le fichier /var/lib/nxserver/nxhome/.ssh/client.id_dsa.key. Faites un simple copier/coller dans la boite de dialogue et validez.

Dans le cadre Desktop, sélectionnez le bureau de votre machine distante (Gnome, Kde, etc.) et le type de ligne utilisé (MODEM, ADSL, LAN, etc.). Ensuite allez dans l'onglet Advanced et vérifiez que l'option Disable SSL encryption of all traffic est bien décoché. Cliquez sur OK, puis sur login. Et le bureau distant devrait apparaître.

Maintenant cette approche "bureau" est certes sympathique mais peu adaptée pour ne lancer qu'une seule commande graphique distante. Fort heureusement il est possible de changer cela et de configurer une session dans ce sens.

Pour cela relancez le client, repassez dans la configuration de la session, et dans le groupe Desktop, sélectionnez cette fois Custom et clickez sur Settings.

Dans le groupe Application, sélectionnez Run the following command, et tapez par exemple /usr/bin/evolution. Vous aurez remarqué qu'en faisant cela, vous êtes passé de New Virtual Desktop à Floating Window. Pressez OK puis Save et connectez-vous. Là devrait apparaître une seule fenêtre pour un évolution exécuté sur la machine distante.

Vous pouvez spécifier ce qui vous chante comme commande distante, comme par exemple un /usr/bin/xterm vous permettant de lancer d'autres commandes distantes par la suite.

L'approche NX est ultra adaptée à un usage à travers internet que ce soit pour afficher un bureau complet ou une commande unique. Cependant dans le second cas l'intégration au bureau n'est pas aussi parfaite qu'avec les deux précédentes méthodes avec par exemple une boîte à miniatures inaccessibles aux applications distantes. En revanche NX permet l'export de l'audio et de l'impression ce qui n'est pas le cas des autres approches.

En cas de problème

Il y a un paquet de choses qui peuvent bloquer la connexion à NX, en voici quelques-unes :

Activation des logs

Il y a bien un fichier de logs créé sur le serveur en /Var/log/nxserver.log mais il n'est pas très bavard par défaut... Pour activer les logs, il faut ouvrir le fichier /etc/nxserver/node.conf puis décommenter/modifier la ligne NX_LOG_LEVEL<.kbd> en changeant le 0 par un 6 ou un 7. Sauver puis redémarrez le serveur par un nxserver --restart. Les logs devrait d'un coup être beaucoup plus loquaces.

Il y a des sessions suspendues...

Si la connexion ne passe pas, vérifiez qu'il n'y a pas de session existante bloquée dans le tuyau. Pour cela, il faut utiliser sur la machine distante la commande nxserver --list. Si des sessions apparaissent, lancez un nettoyage par nxserver --cleanup. Retentez la connexion.

Version du client incompatible

Cela coince avec les versions .4 de freeNX si l'on utilise une version du client supérieure à la 1.5. On peut trouver facilement cette ancienne version via google (me la demander le cas échéant).

Mauvaise configuration de sshd

Si l'on obtient l'erreur Failed publickey for nx from ... dans les logs serveurs de ssh, il est possible qu'il vous faille commenter dans le fichier /etc/sshd/sshd_config une ligne du style AuthorizedKeysFile home/lobs/.ssh/authorized_keys2. Relancez ensuite le serveur et recommencez la connexion.

Si vous obtenez l'erreur

Error: Failure negotiating the session in stage '7'.
Error: Wrong version or invalid session authentication cookie.
erreur de cookie

Dans mon cas, il s'agissait seulement d'un serveur X non opérationnel sur la machine distante. Ceci a été réglé par un simple urpmi xinit.

Si les fontes sont moches

Si les fontes sont trop petites, vous devez rajouter sur le compte local un fichier ~/.Xresources et y mettre la ligne

Xft.dpi: 96

Si les fontes sont moches ET les icônes aussi

Là vous êtes sûrement sous Gnome. Auquel cas il faut que vous lanciez, dans la session NX, la commande /usr/lib/gnome-settings-daemon avant de lancer d'autres applications. Tous les thèmes devraient alors être correctement utilisés.

Si la connexion cale en disant que le serveur ne peut se connecter au localhost:22

Peut-être avez-vous suivi mes conseils et placé SSHD sur un port différent du 22. Auquel cas sur le serveur il vous faut éditer /etc/nxserver/node.conf, décommenter la ligne #Port 22 et replacer 22 par le port que votre SSHD écoute.

Conclusion

NoMachine est un très bon protocole dés lors qu'il est nécessaire d'accéder à une machine à travers une connexion un peu limite (WAN). Ceci étant dit, une alternative bien plus légère lorsque l'on a le même besoin, mais sur un LAN, est de passer simplement par SSH