Petites précisions (même si le fil de discussion est vieux) car j'ai été confrontée au problème aujourd'hui.
Pour déporter l'affichage d'une application lancée sur PC1 de sorte à l'afficher vers PC2. Imaginons que PC1 ait pour IP 192.168.1.10 et que PC2 ait pour IP 192.168.1.20. Dans tout ce qui suit, j'écrirai les adresses IP de PC1 et de PC2, mais on peut bien entendu utiliser le "hostname" de la machine distante si celui-ci est référencé dans le DNS (voir le fichier /etc/resolv.conf et la commande nslookup) ou dans le fichier /etc/hosts.
Imaginons que sur PC2 il y ait sur cette machine un utilisateur "mando" capable d'ouvrir une session graphique.
Sur PC2 :
Il faut dans un premier temps dire au serveur graphique qu'il autorise l'affichage d'une application graphique qui est lancée depuis un autre PC par le réseau. Ceci se configure dans le gestionnaire de connexion graphique (gdm pour gnome, kdm pour KDE).
- Sous KDE3, il faudra modifier en root le fichier /etc/kde3/kdm/kdmrc.
- Sous KDE4, il faudra modifier en root le fichier /etc/kde4/kdm/kdmrc (c'est d'ailleurs la seule différence entre KDE3 et KDE4 dans ce qui suit).
- Sous gnome, ce serait dans la configuration de gdm...
Admettons que l'on soit sous KDE4. On modifie ce fichier en root ou avec un sudo, par exemple à l'aide de l'éditeur texte nano :
sudo nano /etc/kde4/kdm/kdmrc
Vers la 50ème ligne, il y a écrit :
ServerArgsLocal=-br -nolisten tcp
Il faut soit supprimer cette ligne, soit la commenter (en rajoutant un # au début de la ligne). On sauve et on quitte (ctrl x). Pour prendre en compte la modification, on relance kdm (ce qui va relancer le mode graphique). :
sudo /etc/init.d/kdm restart
Note : une syntaxe équivalente serait :
sudo service kdm restart
À présent, PC2 écoute sur le port 6000 en vue de recevoir des applications graphiques à dessiner par le réseau.
On se loggue en graphique sur PC2 par exemple avec un utilisateur mando. A priori, seul mando peut dessiner des fenêtre dans sa session graphique et à partir de ce PC. Comme ici, il s'agit d'une application de PC1, il va falloir que mando autorise le dessin de l'application venant de PC1 (qui a pour IP 192.168.1.10 dans cet exemple) que l'on souhaite déporter sur PC2. C'est le rôle de la commande xhost.
xhost + 192.168.1.10
Désormais, tout est prêt sur PC2 pour accueillir l'application déportée depuis PC1.
Sur PC1 :
En admettant que PC2 soit routable depuis PC1 et que le port 6000 de PC2 soit ouvert, PC1 peut désormais déporter l'affichage. On peut vérifier que c'est le cas par exemple avec la commande nmap (qu'il faudra peut-être installer via le gestionnaire de paquet).
nmap 192.168.1.20
Si le fameux port 6000 n'apparaît pas, c'est sans doute un problème de pare-feu ou plus généralement d'ordre réseau sur le chemin qui mène PC1 à PC2.
De nombreux exécutables proposent une option "-display" ou "--display" dans cette optique (comme par exemple firefox). Dans le cas général, on peut simplement modifier la variable d'environnement DISPLAY. La syntaxe est la même pour une option display et la variable DISPLAY :
1) On précise (éventuellement) l'adresse IP de la machine sur laquelle est déporté l'affichage (par défaut, la machine courante).
2) On écrit le caractère ':'.
3) On écrit le numéro du serveur X. En général une machine ne lance qu'un seul serveur X et ceux-ci sont numérotés à partir de 0. Ce fameux nombre est donc en général le chiffre 0.
4) On écrit le caractère '.'.
5) On écrit le numéro de l'écran du serveur X vers lequel l'affichage est déporté (numéroté à partir de 0). En général ce nombre sera donc en général encore la valeur 0.
Ainsi dans cet exemple, on écrira dans un terminal de PC1 :
export DISPLAY="192.168.1.20:0.0"
Note : le mot clé export est spécifique au shell bash. Pour un autre shell, il peut s'agir d'un autre mot clé. Par exemple en tcsh, ce serait setenv. Le shell utilisé par défaut se configure avec la commande chsh. La commande "bash" permet de lancer dans la console courante un shell bash par dessus le shell actuel. Pour plus de détails :
man chsh
man bash
À présent, toutes les exécutables graphiques lancé dans ce terminal de PC1 seront affichés sur PC2 tant que la variable d'environnement DISPLAY n'est pas modifiée. Par exemple, si je tape sur PC1 l'instruction :
xeyes
... et effectivement, les deux "yeux" ne seront pas dessinés sur PC1, mais sur PC2.