<h2>Afficher une application sur un écran</h2>
<p class="spip">Voici comment procède, schématiquement, X sur les distributions courantes pour lancer une application :</p>

<h3>L’écran</h3>
<p class="spip">Chaque application se connecte à X sur un écran déterminé. Chaque écran est composé de deux chiffres. Traditionnellement nous avons :</p>

<p class="spip">0.0</p>

<p class="spip">Cela signifie première session X et premier écran. Si nous avons un ordinateur avec deux écrans configurés avec xinerama, le première écran sera 0.0 et le deuxième 0.1.</p>

<p class="spip">Si nous lancons une deuxième session X (par exemple avec gdmXnest) nous auront 1.0.</p>

<p class="spip">Ce chiffre est enregistré dans la variable "DISPLAY".</p>

<h3>Le cookie MIT-MAGIC-COOKIE</h3>
<p class="spip">Pour savoir si vous êtes autorisé ou non à lancer une application, X vérifie que vous ayez le même cookie de session. C’est xauth qui gere cette partie.</p>

<p class="spip">Ce cookie est recréé à chaque instance de X et est créé aléatoirement.</p>

<p class="spip">Le cookie utilisateur est stocké dans le fichier .Xauthority dans votre répertoire personnel. Ce fichier est connu grâce à la variable XAUTHORITY.</p>

<h3>Désactiver le contrôle d’accès du client</h3>
<p class="spip">Il est possible de désactiver le contrôle d’accès (la vérification du cookie).</p>

<p class="spip">Pour cela, nous allons utiliser la commande "xhost".</p>

<p class="spip">Pour désactiver tout contrôle, il suffit de faire "xhost +". Dans ce cas, tout le monde (même d’autre machine) pourront lancer des applications sur notre session X. Il est possible de désactiver pour un hôte spécifique en faisant "xhost +<i class="spip">nom_d’hôte</i>".</p>

<p class="spip"><strong class="spip">Attention :</strong> désactiver tout contrôle signifie autoriser n’importe qui à lancer n’importe quelle commande en local comme en distant !</p>

<h2>Lancer une application depuis un autre utilisateur local</h2>
<h3>Désactiver le contrôle d’accès</h3>
<p class="spip">La solution la plus simple est de désactiver le contrôle en faisant :</p>

<pre>[gnunux@serveurx ]$ xhost +localhost
[gnunux@serveurx ]$ su -
Mot de passe :
[root@serveurx ]# export DISPLAY=":0.0"</pre>
<p class="spip">(<strong class="spip">j’insiste</strong>, il ne faut jamais faire "xhost +" sans nom d’hôte !).</p>

<p class="spip">Mais dans ce cas, n’importe qui en local pourra lancer n’importe quelle commande.</p>

<h3>Utiliser le cookie utilisateur</h3>
<p class="spip">Voici la solution la plus propre pour cela :</p>

<p class="spip">Modifier la variable "$DISPLAY" et la variable "$XAUTHORITY" comme suit (gnunux est l’utilisateur ayant lancé X) :</p>

<pre>[gnunux@serveurx ]$ su -
Mot de passe :
[root@serveurx ]# export DISPLAY=":0.0"
[root@serveurx ]# export XAUTHORITY=/home/gnunux/.Xauthority 
[root@serveurx ]# gedit 
[root@serveurx ]#</pre>
<h2>Lancer une application depuis une autre machine</h2>
<p class="spip">Pour que cela fonctionne, il faut impérativement que X écoute sur le port TCP. Pour vérifier si c’est la cas, en root faire :</p>

<pre>[root@serveurx ]# netstat -tap|grep X
tcp        0      0 *:6000                  * :*                     LISTEN 3237/X</pre>
<p class="spip">Si ce n’est pas activer, vérifier votre configure de xdm, gdm (avec gdmsetup) ou kdm.</p>

<h3>Désactiver le contrôle d’accès</h3>
<p class="spip">Je pars du principe que vous êtes sur la machine distante et non en SSH, VNC ou autre.</p>

<p class="spip">La procédure ressemble à celle d’un utilisateur local :</p>

<p class="spip">Sur la machine avec X :</p>

<pre>[gnunux@serveurx ]$ xhost +192.168.1.3</pre>
<p class="spip">Sur la machine distance :</p>

<pre>[gnunux@distant ]$ export DISPLAY="192.168.1.4:0.0"
[gnunux@distant ]$ gedit
[gnunux@distant ]$</pre>
<p class="spip"><strong class="spip">Attention :</strong> n’importe qui sur la machine distante pourra lancer n’importe quelle application.</p>

<h3>Copie du cookie</h3>
<p class="spip">Il suffit de recopier le cookie de la machine avec X sur la machine distante :</p>

<p class="spip">Sur la machine distance :</p>

<pre>[gnunux@distant ]$ scp 192.168.1.4 :/home/gnunux/.Xauthority Xauth_dist
[gnunux@distant ]$ export DISPLAY="192.168.1.4:0.0"
[gnunux@distant ]$ export XAUTHORITY=/home/gnunux/Xauth_dist
[gnunux@distant ]$ gedit
[gnunux@distant ]$</pre>
<h3>Lancer une application a distance avec SSH</h3>
<p class="spip">Il suffit de recopier le cookie de la machine avec X sur la machine distante :</p>

<p class="spip">Sur la machine distance :</p>

<pre>[gnunux@serveurx ]$ ssh -X 192.168.1.3 :/home/gnunux/.Xauthority Xauth_dist
[gnunux@distant ]$ scp 192.168.1.4 :/home/gnunux/.Xauthority Xauth_dist
[gnunux@distant ]$ export DISPLAY="192.168.1.4:0.0"
[gnunux@distant ]$ export XAUTHORITY=/home/gnunux/Xauth_dist
[gnunux@distant ]$ gedit
[gnunux@distant ]$</pre>
<h2>Conclusion</h2>
<li> Si nous n’avons pas besoin de lancer des applications distantes : désactiver le port de X ;
<br /><li> il ne faut pas désactiver la protection interne de X pour lancer une application, qu’elle soit locale ou distante (ne pas utiliser xhost quoi) ;
<br /><li> si nous utilisons xhost, toujours spécifier le nom d’hôte ou l’adresse ip.