Artisan Numérique

/système/réseau/ssh/dm/x11/ Lancer des applications graphiques à distance

Synergy permet, comme nous le savons, de connecter deux machines l'une à l'autre de manière simple et multi-plateforme. L'objet de cet article est de voir comment exploiter cet excellent outil pour déporter un ensemble d'application sur une seconde machine qui servira dés-lors d'écran secondaire.

Un autre utilisation de ces techniques consiste à exploiter l'écran d'une machine secondaire pour y déporter un certain nombre d'applications courante (courrier, messagerie instantanée, flux RSS, etc.) de sorte à "dégager" l'écran de la machine de bureau tout en ne chargeant pas le CPU de la machine secondaire. Les deux machines n'auront alors plus qu'à être reliées par synergy pour former un seul et même bureau.

Pour cet usage, la première technique "native" est clairement la plus efficace mais celle par SSH marche aussi très bien. Dans les deux cas cela consiste à ouvrir une connexion SSH de la machine secondaire vers la machine principale. Ensuite soit nous utilisons le report du serveur X11 par SSH et il n'y a rien a faire

machine_secondairessh -X machine_principale
gaston@machine_principale>evolution&
Ecran secondaire en mode SSH

soit nous ouvrons notre serveur X11 secondaire au sockets TCP/IP et il faut commencer par régler la bonne variable DISPLAY

machine_secondairexhost+
machine_secondairessh machine_principale
gaston@machine_principale>export DISPLAY=machine_secondaire:0.0
gaston@machine_principale>evolution&
Ecran secondaire en mode SSH

Tout ceci marche à merveille à quelques détails près que nous allons examiner maintenant.

Ouverture de liens

Sur notre écran distant, lorsque l'on clique sur un lien dans liferea, cela n'ouvre pas l'URL sur le firefox du desktop mais sur celui un firefox distant... En effet, FireFox utilise l'identifiant de l'écran (variable DISPLAY) pour savoir où ajouter son onglet.

La "Solution" est donc de se dire que si FireFox est toujours sur mon écran principal, autrement dit DISPLAY=:0, il suffit de faire un petit script qui va systématique ouvrir les URL sur cet écran en exportant la valeur de DISPLAY avant d'appeler FireFox :

#! /bin/sh

export DISPLAY=:0
/usr/bin/firefox $1
/usr/bin/open-url.sh

Pour que Gnome utilise ce script, il ne reste plus qu'à lancer Préférences/applications préférées pour remplacer l'appel d'origine à FireFox par celui à notre script. Du coup toutes les applications Gnome ouvrent maintenant sur le bon firefox.

Il se peut que cela continue de coincer pour des raisons de sécurité. Pour régler cela, lancez en tant que root gdmsetup et dans l'onglet sécurité, cochez la case Autoriser la connexion uniquement si l'utilisateur possède son répertoire personnel. Au redémarrage de votre session sur la machine desktop, le problème devrait être réglé.

Faire causer FireFox avec l'agrégateur de nouvelles

Pour ajouter un flux à liferea par l'intermédiaire de FireFox, il suffit normalement d'utiliser le script /usr/bin/liferea-add-feed. Tout se passe dans les préférences de FireFox, onglet Applications. Une fois là dedans, allez à la ligne Flux WEB, sélectionner Autres... et choisissez le script.

Maintenant cela marchera très bien si liferea est lancé directement sur le desktop, un peu moins s'il est affiché par l'écran secondaire. En effet, liferea utilise une session DBUS, désignée par variable DBUS_SESSION_BUS_ADDRESS, pour communiquer avec le script d'ajout. Le « problème » lorsque nous nous connectons via SSH est que cette fameuse variable n'existe pas et du coup les applications lancées dans le SSH ne peuvent communiquer avec celles lancées dans la session Gnome.

Pour régler cela, nous allons commencer par créer sur la machine principale un fichier /etc/X11/xinit.d/35export_dbus en y mettant le contenu suivant :

# to be sourced

echo DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS > ~/.ssh/environment
/etc/X11/xinit.d/35export_dbus

L'astuce ici est donc de créer, au lancement de la session sur la machine principale, un fichier ~/.ssh/environment qui est utilisé par ssh pour "nourrir" l'environnement d'une nouvelle session. Pour que cela fonctionne, il faut modifier le fichier /etc/ssh/sshd_config pour ajouter la permission PermitUserEnvironment yes et redémarrer le serveur ssh.

Ceci fait, toute session SSH ouverte sur la machine principale aura sa bonne variable DBUS et les applications pourront communiquer d'où qu'elles soient lancées.

Lancer X sur le portable à partir de la machine de bureau

Il n'est pas nécessaire, surtout si votre "écran externe" est une petite machine qui ne fait cela, de lancer toute l'artillerie Gnome. Vous pouvez très bien ne lancer que le serveur X11, avec dans ~/.xinitrc le strict minimum comme un openbox, fbpanel, etc.

Dans cette option, on aime bien l'idée de lancer ce serveur à la main à partir de la machine de bureau. Le seul "hic" c'est qu'un utilisateur ne peut "officiellement" pas lancer un serveur X, je donne ici le résultat pour que Google le mange :

gastonssh machine_esclave "startx" &
xauth: creating new authority file /home/yoran/.serverauth.9780

Authentication failed - cannot start X server.
Perhaps you do not have console ownership?

L'astuce est d'autoriser une telle chose en modifiant, sur la machine distante, le fichier /etc/pam.d/xserver comme suit :

#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_console.so
#auth required pam_permit.so
account required pam_permit.so

Maintenant vous pouvez lancer, via ssh, votre serveur X à distance et le nouvel écran devraient prendre vie et vous devez pouvoir y aller avec votre souris.

conclusion

Synergy et SSH forment ici un couple bien utile pour résoudre un problème d'espace de manière simple et efficace.