mini-HOWTO : Comment ex�cuter des applications X � distance
 Vincent Zweije, [email protected]
 V 0.6.1, 19 Novembre 1999

 Ce mini-HOWTO d�crit comment ex�cuter des applications X � distance.
 C'est-�-dire, comment faire pour qu'un programme X s'affiche sur un
 �cran d'ordinateur diff�rent de celui sur lequel il s'ex�cute. Ou,
 autrement dit, comment faire tourner un programme X sur un ordinateur
 diff�rent de celui devant lequel vous �tes assis. L'accent de ce mini-
 HOWTO sera mis sur les questions de s�curit�. Ce mini-HOWTO contient
 �galement des informations sur la mani�re de faire tourner des appli�
 cations X en local, mais avec un identificateur d'utilisateur (user-
 id) diff�rent.  Adaptation fran�aise : Albert-Paul Bouillot apb@club-
 internet.fr
 ______________________________________________________________________

 Table des mati�res


 1. Introduction

 2. Lectures compl�mentaires

 3. Le contexte

 4. Un peu de th�orie

 5. Dire au client ...

 6. Dire au serveur ...

    6.1 Xhost
    6.2 Xauth
       6.2.1 Fabrication du Cookie
       6.2.2 Transfert du Cookie
       6.2.3 Utilisation du Cookie
    6.3 Ssh

 7. Les applications X avec un identificateur d'utilisateur (User-id) diff�rent

    7.1 Plusieurs utilisateurs sur le m�me h�te
    7.2 Root est l'utilisateur client

 8. Faire tourner un gestionnaire de fen�tres distant

 9. Maintenance



 ______________________________________________________________________

 11..  IInnttrroodduuccttiioonn

 Ce mini-HOWTO constitue un guide  sur la mani�re de faire tourner des
 applications X � distance.  J'ai r�dig� ce document pour plusieurs
 raisons :


 1. Il y a eu de nombreuses questions, sur Usenet, sur la mani�re de
    faire tourner des applications X � distance;

 2. J'ai vu beaucoup, beaucoup, de conseils d'utilisation de �des
    connexions X.  CC''eesstt dd''uunnee iinnss��ccuurriitt�� ttoottaallee, et il existe de bien
    meilleures m�thodes;


 3. Je n'ai pas connaissance d'un document simple d�crivant les options
    dont _o_n _p_e_u_t disposer. Si vous avez des informations
    compl�mentaires, s'il vous pla�t, faites-le moi savoir :
    <[email protected]>.

 Ce document a �t� �crit en pensant � des syst�mes de type Unix.  Si le
 syst�me d'exploitation de votre ordinateur local ou de celui qui est �
 distance est de type diff�rent, vous devriez trouver ici des
 informations sur la mani�re dont les choses se passent. Cependant, il
 vous faudra modifier les exemples par vous-m�me pour les utiliser sur
 votre (vos) propre(s) syst�mes(s).

 La version (anglaise) la plus r�cente de ce document est toujours
 disponible sur le WWW � http://www.xs4all.nl/~zweije/xauth.html.  Il
 est �galement disponible en tant que mini-HOWTO Linux Applications X �
 distance (Remote X Apps) � :
 http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps. Les (mini-)HOWTOs
 Linux sont disponibles par http ou ftp sur sunsite.unc.edu.

 Ceci constitue la version 0.6.1. Aucunes garanties, seulement de
 bonnes intentions. Je suis ouvert aux suggestions, id�es, ajouts,
 pointeurs utiles, corrections (typo), etc... Je veux que cela reste un
 document simple et lisible, dans la bonne moyenne du style HOWTO.  Les
 querelles seront redirig�es vers /dev/null.

 Le contenu de ce mini-HOWTO a �t� mis � jour le 19 Novembre 1999 par
 Vincent Zweije


 22..  LLeeccttuurreess ccoommppll��mmeennttaaiirreess

 Un document, en rapport avec cela, sur le WWW traite de ''Quoi faire
 quand Tk dit que votre �cran n'est pas s�r'', http://ce-
 toolkit.crd.ge.com/tkxauth/.  Il a �t� �crit par Kevin Kenny. Il
 sugg�re une solution similaire � celle de ce document pour
 l'authentification X (xauth). Cependant, Kevin vise plus �
 l'utilisation de xdm pour diriger xauth � votre place.

 On m'a indiqu� que le volume 8 du ``Guide de l'administrateur du
 syst�me X Window'' (X Window System Administrator's Guide Vol. 8) de
 chez O'Reilly and Associates �tait une bonne source d'informations.
 Malheureusement, je n'ai pas pu le v�rifier.

 Il y a �galement un autre document qui ressemble beaucoup � celui que
 vous �tes en train de lire, dont le titre est ''Securing X Windows'',
 et qui est disponible �
 http://ciac.llnl.gov/ciac/documents/ciac2316.html.

 Consultez �galement les listes de diffusion usenet, telles que :
 comp.windows.x, comp.os.linux.x, et comp.os.linux.networking.


 33..  LLee ccoonntteexxttee

 Vous utilisez deux ordinateurs. Sur le premier, vous �tes dans
 l'environnement X Window pour taper au clavier et regarder l'�cran.
 Sur le second vous effectuez un important traitement graphique. Vous
 voulez que les sorties du second soient affich�es sur l'�cran du
 premier. Le syst�me X window rend cela possible.


 Naturellement, vous devez disposez de connexions � un r�seau pour
 pouvoir le r�aliser. De pr�f�rence rapides, car le protocole X est un
 d�voreur de ressources r�seau. Mais, avec un peu de patience et un
 protocole de compression de donn�es adapt�, vous pouvez m�me faire
 tourner des applications par l'interm�diaire d'un modem. Pour un
 protocole de compression pour X, vous pouvez aller consulter les sites
 : dxpc <http://ccwf.cc.utexas.edu/~zvonler/dxpc/> ou LBX
 <http://www.ultranet.com/~pauld/faqs/LBX-HOWTO.html> (�galement connu
 comme �tant le LBX mini-HOWTO).

 Vous avez deux choses � faire pour r�aliser tout cela :


 1. Indiquer � l'unit� d'affichage locale (le serveur) qu'elle doit
    accepter les connexions venant de l'ordinateur � distance.

 2. Dire � l'application � distance (le client) de rediriger ses
    sorties vers votre unit� d'affichage locale.


 44..  UUnn ppeeuu ddee tthh��oorriiee

 Le mot magique est DISPLAY (unit� d'affichage). Dans le syst�me X
 window, une unit� d'affichage est constitu�e (en simplifiant) d'un
 clavier, d'un mulot et d'un �cran. Une unit� d'affichage est g�r�e par
 un programme serveur, plus connu sous le nom de serveur X. Le serveur
 fourni des fonctionnalit�s d'affichage aux autres programmes qui se
 connectent � lui.


 Une unit� d'affichage est identifi�e par un nom, de type, par exemple
 :


 �  DISPLAY=light.uni.verse:0

 �  DISPLAY=localhost:4

 �  DISPLAY=:0

 Un nom d'unit� d'affichage est constitu� d'un nom d'h�te (par exemple
 : light.uni.verse et localhost), du signe deux point (:), et d'un
 num�ro de s�quence (tels que 0 et 4). Le nom d'h�te de l'unit�
 d'affichage est le nom de l'ordinateur sur lequel tourne le serveur X.
 Si le nom de l'h�te est omis, cela signifie qu'il s'agit de
 l'ordinateur local.  D'habitude, le num�ro de s�quence est 0 -- cela
 peut changer s'il y a plusieurs unit�s d'affichage connect�es sur le
 m�me ordinateur.

 Si jamais il vous arrive de voir le nom d'une unit� d'affichage avec
 un .n suppl�mentaire accol� � son nom, c'est qu'il s'agit d'un num�ro
 d'�cran. Une unit� d'affichage peut, en th�orie, avoir plusieurs
 �crans.  Cependant, d'habitude, il n'y en a qu'un, qui porte le num�ro
 n=0, et c'est le num�ro par d�faut.


 D'autres formes de DISPLAY existent, mais celle-ci suffira pour notre
 propos.

 Pour celui qui est curieux de technique :

 �  hostname:D.S signifie �cran S sur unit� d'affichage D de l'h�te
    hostname; le serveur X de cette unit� d'affichage est � l'�coute du
    port TCP 6000+D.

 �  host/unix:D.S signifie �cran S sur unit� d'affichage D de l'h�te
    host; le serveur X de cette unit� d'affichage est � l'�coute du
    socket de domaine UNIX /tmp/.X11-unix/XD (et donc, seul host peut
    l'atteindre).


 �  :D.S est �quivalent � host/unix:D.S, o� host est le nom de l'h�te
    local.


 55..  DDiirree aauu cclliieenntt ......

 Le programme client (par exemple, votre application graphique) sait �
 quelle unit� d'affichage il doit se connecter en consultant la
 variable d'environnement DISPLAY. Cependant ce param�trage peut �tre
 modifi�, en lan�ant le client avec l'argument  -display hostname:0
 dans la ligne de commande. Quelques exemples peuvent clarifier les
 choses.


 Notre ordinateur est connu du monde ext�rieur sous le nom light, et
 nous sommes dans le domaine uni.verse.  Si nous fonctionnons avec un
 serveur X normal, l'unit� d'affichage est connue comme �tant
 light.uni.verse:0.  Nous voulons faire tourner le programme de dessin
 xfig sur un ordinateur � distance, appel� dark.matt.er, et afficher sa
 sortie ici, sur light.

 Supposons que vous vous soyez d�j� connect� par telnet � l'ordinateur
 distant, dark.matt.er.

 Si l'interpr�teur de commande de l'ordinateur �loign� est csh :



      dark% setenv DISPLAY light.uni.verse:0
      dark% xfig &




 Ou, d'une autre mani�re :



      dark% xfig -display light.uni.verse:0 &




 Si c'est sh qui tourne sur l'ordinateur � distance :



      dark$ DISPLAY=light.uni.verse:0
      dark$ export DISPLAY
      dark$ xfig &




 Ou, autrement :



      dark$ DISPLAY=light.uni.verse:0 xfig &




 Ou, bien s�r, �galement :


      dark$ xfig -display light.uni.verse:0 &




 Il para�t que certaines versions de telnet transmettent
 automatiquement la variable DISPLAY � l'ordinateur h�te �loign�. Si
 vous avez l'une ce celles-ci, vous avez de la chance, et c'est
 effectivement automatique. Si ce n'est pas le cas, la plupart des
 versions de telnet _d_o_i_v_e_n_t transmettre la variable d'environnement
 TERM, et avec un bidouillage judicieux, il est possible de superposer
 la variable DISPLAY sur la variable TERM.

 L'id�e, sous-jacente � cette superposition, est de r�aliser une sorte
 de script pour effectuer ceci : avant la connexion par telnet, donner
 la valeur de DISPLAY � TERM. Puis de lancer telnet. Du c�t� de
 l'ordinateur distant, dans le fichier .*shrc concern�, lire la valeur
 de DISPLAY � partir de TERM.


 66..  DDiirree aauu sseerrvveeuurr ......

 Le serveur n'acceptera pas de connexions venant de n'importe o�. Vous
 ne voulez pas que n'importe qui puisse afficher des fen�tres sur votre
 �cran. Ou lire ce vous tapez -- souvenez-vous que votre clavier fait
 partie de votre unit� d'affichage!


 Trop peu de gens semble r�aliser que permettre l'acc�s � leur unit�
 d'affichage pose des probl�mes de s�curit�. Quelqu'un qui dispose d'un
 acc�s � votre unit� d'affichage peut lire et �crire sur vos �crans,
 lire vos frappes au clavier, et suivre les d�placements de votre
 mulot.

 La plupart des serveurs disposent de deux mani�res d'authentifier les
 demandes de connexions qui arrivent : le m�canisme de la liste d'h�tes
 (xhost) et le m�canisme du mot de passe secret (magic cookie) (xauth).
 De plus, il y a ssh, l'interpr�teur de commande s�curis�, qui peut
 acheminer les connexions X.


 66..11..  XXhhoosstt

 Xhost permet les acc�s bas�s sur les nom d'h�tes. Le serveur
 entretient une liste des h�tes qui sont autoris�s � se connecter �
 lui. Il peut aussi d�sactiver compl�tement la v�rification des h�tes.
 Attention : cela signifie que plus aucun contr�le n'est effectu�, et
 donc, que _n_'_i_m_p_o_r_t_e _q_u_e_l h�te peut se connecter!


 Vous pouvez contr�ler la liste des h�tes du serveur avec le programme
 xhost.  Pour utiliser ce m�canisme dans l'exemple pr�c�dent, faites :



      light$ xhost +dark.matt.er




 Ceci permet toutes les connexions � partir de l'h�te dark.matt.er.
 D�s que votre client X a r�alis� sa connexion et affiche une fen�tre,
 par s�curit�, supprimez les permissions pour d'autres connexions avec
 :


      light$ xhost -dark.matt.er




 Vous pouvez d�sactiver la v�rification des h�tes avec :



      light$ xhost +




 Ceci d�sactive la v�rification des acc�s des h�tes et donc permet �
 _t_o_u_t _l_e _m_o_n_d_e de se connecter. Vous ne devriez _j_a_m_a_i_s faire cela sur
 un r�seau o� vous n'avez pas confiance dans _t_o_u_s les utilisateurs (tel
 internet). Vous pouvez r�activer la v�rification des h�tes avec :



      light$ xhost -




 xhost - par lui-m�me _n_e _s_u_p_p_r_i_m_e _p_a_s tous les h�tes de la liste
 d'acc�s (ce qui serait tout � fait inutile - vous ne pourriez plus
 vous connecter de n'importe o�, pas m�me de votre h�te local).

 _X_h_o_s_t _e_s_t _u_n _m_�_c_a_n_i_s_m_e _v_r_a_i_m_e_n_t _t_r_�_s _p_e_u _s_�_r_. Il ne fait pas de
 distinction entre les diff�rents utilisateurs sur l'h�te � distance.
 De plus, les noms d'h�tes (en r�alit� des adresses) peuvent �tre
 manipul�s. C'est mauvais si vous vous trouvez sur un r�seau douteux
 (d�j�, par exemple, avec un acc�s PPP t�l�phonique � Internet).


 66..22..  XXaauutthh

 Xauth autorise l'acc�s � tous ceux qui connaissent le bon secret.  On
 appelle un tel secret un enregistrement d'autorisation ou cookie.  Ce
 m�canisme d'autorisation est d�sign� c�r�monieusement comme �tant le
 MIT-MAGIC-COOKIE-1.


 Les cookies pour les diff�rentes unit�s d'affichage sont stock�s
 ensembles dans ~/.Xauthority.Votre fichier ~/.Xauthority doit �tre
 inaccessible pour les utilisateurs groupe/autres. Le programme xauth
 g�re ces cookies, donc le surnom xauth dans ce sch�ma.

 Au d�marrage d'une session, le serveur lit un cookie dans le fichier
 qui est indiqu� par l'argument -auth. Ensuite, le serveur ne permet la
 connexion que des clients qui connaissent le m�me cookie. Quand le
 cookie dans ~/.Xauthority change, _l_e _s_e_r_v_e_u_r _n_e _r_�_c_u_p_�_r_e_r_a _p_a_s _l_a
 _m_o_d_i_f_i_c_a_t_i_o_n.


 Les serveurs les plus r�cents peuvent g�n�rer des cookies � la vol�e
 pour des clients qui le demandent. les cookies sont cependant encore
 conserv�s dans le serveur; ils ne finissent pas dans ~/.Xauthority �
 moins qu'un client ne les y mettent. Selon David Wiggins :


      Une possibilit� suppl�mentaire , qui peut vous int�resser, a
      �t� ajout�e dans X11R6.3.  Par l'interm�diaire de la nou�
      velle extension SECURITY, le serveur X lui-m�me peut g�n�rer
 et renvoyer de nouveaux cookies � la vol�e. De plus on peut
 d�signer les cookies comme �tant ``douteux'' de sorte que
 les applications qui se connectent avec de tels cookies
 auront une capacit� op�ratoire restreinte. Par exemple, ils
 ne pourront pas regarder les entr�es au clavier/mulot, ou le
 contenu des fen�tres, d'autres clients ``fiables''.  Il y a
 une nouvelle sous-commande ``generate'' de xauth pour rendre
 cette fonctionnalit�, pas forc�ment facile, mais au moins
 possible � utiliser.


 Xauth poss�de un avantage clair, au niveau de la s�curit�, sur xhost.
 Vous pouvez limiter l'acc�s � des utilisateurs sp�cifiques sur des
 ordinateurs sp�cifiques. Il ne permet pas l'usurpation d'adresse comme
 le permet xhost.  Et, si vous le d�sirez, vous pouvez encore utiliser
 xhost en parall�le pour permettre des connexions.


 66..22..11..  FFaabbrriiccaattiioonn dduu CCooookkiiee

 Si vous voulez utiliser xauth, vous devez lancer le serveur X avec
 l'argument -auth authfile. Si vous utilisez le script ssttaarrttxx pour
 lancer le serveur X, c'est le bon endroit pour le faire. Cr�ez
 l'enregistrement d'autorisation comme indiqu� ci-dessous dans votre
 script startx.

 Extrait de /usr/X11R6/bin/startx:



      mcookie|sed -e 's/^/add :0 . /'|xauth -q
      xinit -- -auth "$HOME/.Xauthority"




 Mcookie est un petit programme du paquetage util-linux, site primaire
 ftp://ftp.math.uio.no/pub/linux/. Autrement, vous pouvez utiliser
 md5sum pour cr�er quelques donn�es al�atoires (de, par exemple,
 /dev/urandom ou ps -axl) au format cookie :



      dd if=/dev/urandom count=1|md5sum|sed -e 's/^/add :0 . /'|xauth -q
      xinit -- -auth "$HOME/.Xauthority"




 Si vous ne pouvez pas �diter le script startx (parce que vous n'�tes
 pas root), demandez � votre administrateur de syst�me de configurer
 startx correctement, ou, � la place, laissez-le configurer xdm. S'il
 ne peut, ou ne veut, pas, vous pouvez �crire un script ~/.xserverrc.
 Si vous avez ce script, il sera ex�cut� par xinit au lieu du v�ritable
 serveur X. Alors, vous pourrez lancer le serveur X v�ritable � partir
 de ce script avec les arguments adapt�s.  Pour faire cela, faites
 utiliser par votre ~/.xserverrc le mcookie de la ligne ci-dessus pour
 cr�er un cookie puis lancer le v�ritable serveur X :



      #!/bin/sh
      mcookie|sed -e 's/^/add :0 . /'|xauth -q
      exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"


 Si vous utilisez xdm pour g�rer vos sessions X, vous pouvez utiliser
 xauth facilement. D�finissez les ressources du DisplayManager.authDir
 dans /etc/X11/xdm/xdm-config.  Xdm passera l'argument -auth au serveur
 X � son d�marrage. Au moment de la connexion sous xdm, xdm place le
 cookie dans ~/.Xauthority pour vous. Consultez xdm(1) pour de plus
 amples information.  Par exemple, mon /etc/X11/xdm/xdm-config contient
 la ligne suivante :



      DisplayManager.authDir: /var/lib/xdm





 66..22..22..  TTrraannssffeerrtt dduu CCooookkiiee

 Maintenant que vous avez lanc� votre session X sur le serveur h�te
 light.uni.verse et que vous avez votre cookie dans ~/.Xauthority, il
 vous faut transf�rer le cookie sur le client, dark.matt.er.


 Le plus simple est que vos r�pertoires sur light et dark soient
 partag�s. Les fichiers ~/.Xauthority sont les m�mes, donc le cookie
 est transf�r� instantan�ment.  Cependant, il y a un pi�ge : lorsque
 vous mettez un cookie pour :0 dans ~/.Xauthority, dark va croire que
 c'est un cookie pour lui au lieu de light. Il faut que vous utilisiez
 un nom d'h�te explicite � la cr�ation du cookie; on ne peut pas faire
 autrement. Vous pouvez installer le m�me cookie pour, � la fois, :0 et
 light:0 avec :



      #!/bin/sh
      cookie=`mcookie`
      xauth add :0 . $cookie
      xauth add "$HOST:0" . $cookie
      exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"




 Si les r�pertoires _h_o_m_e ne sont pas partag�s, vous pouvez transf�rer
 le cookie au moyen de rsh, le shell � distance :



      light$ xauth nlist "${HOST}:0" | rsh dark.matt.er xauth nmerge -





 1. Extraire le cookie de votre fichier local ~/.Xauthority (xauth
    nlist :0).

 2. Le transf�rer vers dark.matt.er (| rsh dark.matt.er).

 3. >Le mettre dans ~/.Xauthority l� (xauth nmerge -).


 Notez l'utilisation de ${HOST}. Vous devez transf�rer le cookie qui
 est explicitement associ� � l'h�te local. Une application X distante
 interpr�terait une valeur d'unit� d'affichage �gale � :0 comme �tant
 une r�f�rence � la machine distante, ce qui ne correspond pas � ce que
 l'on veut !

 Il est possible que rsh ne fonctionne pas chez vous. En plus de cela,
 rsh a un inconv�nient en ce qui concerne la s�curit� (noms d'h�tes
 parodi�s, si je me souviens bien). Si vous ne pouvez, ou ne voulez,
 pas utiliser rsh, vous pouvez �galement transf�rer le cookie
 manuellement, comme ceci :



      light$ echo $DISPLAY
      :0
      light$ xauth list $DISPLAY
      light/unix:0 MIT-MAGIC-COOKIE-1 076aaecfd370fd2af6bb9f5550b26926
      light$ rlogin dark.matt.er
      Password:
      dark% setenv DISPLAY light.uni.verse:0
      dark% xauth add $DISPLAY . 076aaecfd370fd2af6bb9f5550b26926
      dark% xfig &
      [15332]
      dark% logout
      light$




 Consultez �galement rsh(1) et xauth(1x) pour de plus amples
 informations.

 Il doit �tre possible de superposer le cookie sur la variable TERM ou
 DISPLAY quand vous utilisez telnet sur l'h�te �loign�. Cela doit
 fonctionner de la m�me mani�re que de superposer la variable DISPLAY
 sur la variable TERM. Regardez la section 5 : Dire au Client. De mon
 point de vue, sur ce sujet, vous prenez vos responsabilit�s, mais cela
 m'int�resse si quelqu'un peut me confirmer ou m'infirmer cela.


 66..22..33..  UUttiilliissaattiioonn dduu CCooookkiiee

 Une application X, telle que xfig ci-dessus, sur dark.matt.er, ira
 automatiquement voir le cookie dans ~/.Xauthority pour s'authentifier.


 L'utilisation de localhost:D entra�ne une petite difficult�.
 L'application X cliente peut traduire localhost:D en host/unix:D pour
 les besoins de recherche du cookie.  Effectivement, cela signifie
 qu'un cookie pour localhost:D dans votre ~/.Xauthority n'a _a_u_c_u_n
 effet.


 66..33..  SSsshh

 Les enregistrements d'autorisation sont transmis sans codage. Si vous
 vous souciez de ce que l'on puisse espionner vos connexions, utilisez
 ssh, le shell s�curis�. Il effectuera des transmissions X s�curis�es
 au moyen de connexions crypt�es. De plus, il est g�nial pour d'autres
 choses aussi.  C'est une bonne am�lioration structurelle de votre
 syst�me. Allez voir simplement http://www.cs.hut.fi/ssh/, la page
 d'accueil de ssh.

 Qui poss�de d'autres informations sur les m�thodes d'authentification
 ou de cryptage des connexions X ?  Peut-�tre Kerberos ?




 77..  LLeess aapppplliiccaattiioonnss XX aavveecc uunn iiddeennttiiffiiccaatteeuurr dd''uuttiilliissaatteeuurr ((UUsseerr--iidd))
 ddiiffff��rreenntt

 Supposez que vous vouliez faire tourner un outil graphique de
 configuration qui n�cessite d'avoir les privil�ges du compte _r_o_o_t
 alors que la session X actuelle se d�roule sous votre compte. Cela
 peut sembler �trange au premier abord, mais le serveur X _n_e permettra
 _p_a_s � cet outil d'acc�der � votre unit� d'affichage. Comment cela est-
 il possible alors que _r_o_o_t peut normalement tout faire ? Et comment
 contourner ce probl�me ?


 �largissons le propos au cas o� l'on veut faire tourner une
 application X, sous un identificateur d'utilisateur clientuser, alors
 que la session X a �t� lanc�e par serveruser. Si vous avez lu le
 paragraphe sur les _c_o_o_k_i_e_s, il est �vident que clientuser ne peut pas
 acc�der � votre unit� d'affichage : ~clientuser/.Xauthority ne
 contient le cookie magique qui permet d'acc�der � l'unit� d'affichage.
 Le cookie correct se trouve dans ~serveruser/.Xauthority.


 77..11..  PPlluussiieeuurrss uuttiilliissaatteeuurrss ssuurr llee mm��mmee hh��ttee

 Naturellement, tout ce qui marche pour un X distant marchera aussi
 pour un X � partir d'un identificateur d'utilisateur diff�rent
 (particuli�rement slogin localhost -l clientuser). Et ici l'h�te
 client et l'h�te serveur sont pr�cis�ment les m�mes. Cependant, quand
 les deux h�tes sont les m�mes, il y a quelques raccourcis pour
 transf�rer le _c_o_o_k_i_e _m_a_g_i_q_u_e.


 On supposera que l'on utilise su pour passer d'un identificateur
 utilisateur � l'autre. Essentiellement, il faut �crire un script qui
 appelle su, mais enveloppe la commande que su ex�cute d'un peu de code
 qui effectue les t�ches n�cessaires pour le X distant.  Ces t�ches
 n�cessaires sont l'initialisation de la variable DISPLAY et le
 transfert du _c_o_o_k_i_e _m_a_g_i_q_u_e.


 L'initialisation de DISPLAY est relativement facile ; il faut
 simplement d�finir DISPLAY="$DISPLAY" avant d'ex�cuter l'argument de
 la commande su. Donc, il faut simplement faire :



      su - clientuser -c "env DISPLAY="$DISPLAY" clientprogram &"





 Ce n'est pas tout, il faut encore transf�rer le cookie. On peut le
 retrouver en utilisant xauth list "$DISPLAY".  Cette commande renvoie
 le cookie dans un format qui convient pour le mettre dans xauth; ce
 dont nous avons justement besoin ! Donc, on met le cookie obtenu dans
 xauth dans le commande su, on initialise DISPLAY ici, et on lance la
 commande d�sir�e



      su - clientuser -c "xauth add `xauth list $DISPLAY`; \
                          exec env DISPLAY=$DISPLAY clientprogram"




 On peut �crire un script pour r�aliser tout cela, en le param�trant
 avec clientuser et clientprogram. Am�liorons un peu le script pendant
 que nous y sommes, �a va le rendre un peu moins compr�hensible mais un
 peu plus robuste. Le tout ressemble � cela :



      #!/bin/sh
      if [ $# -lt 2 ]
      then echo "usage: `basename $0` clientuser command" >&2
           exit 2
      fi
      CLIENTUSER="$1"; shift
      exec su - "$CLIENTUSER" -c "xauth add `xauth list \"$DISPLAY\"`; \
                                  exec env DISPLAY='$DISPLAY' "'"$SHELL"'" -c '$*'"





 Je pense que c'est portable et que cela fonctionne suffisamment
 correctement dans la plupart des circonstances. Le seul d�faut auquel
 je pense en ce moment est d� � l'utilisation de '$*', les guillemets
 simples dans command vont perturber les guillemets de l'argument('$*')
 de la commande su. Si cela entra�ne quelque chose de vraiment g�nant,
 envoyez-moi un courrier �lectronique.


 Nommez le script /usr/local/bin/xsu, et vous pouvez faire :



      xsu clientuser 'command &'





 Facile, non ?


 77..22..  RRoooott eesstt ll''uuttiilliissaatteeuurr cclliieenntt

 �videmment, tout ce qui marche pour un client non root doit
 fonctionner pour root. Cependant, avec root vous pouvez faire cela
 encore plus facilement, car celui-ci peut lire le fichier
 ~/.Xauthority de tout le monde. Il n'y a pas besoin de transf�rer le
 cookie. Tout ce qu'il y a � faire consiste � initialiser DISPLAY, et �
 faire pointer XAUTHORITY sur ~serveruser/.Xauthority. Donc, vous
 pouvez �crire :



      su - -c "exec env DISPLAY='$DISPLAY' \
                        XAUTHORITY='${XAUTHORITY-$HOME/.Xauthority}' \
                        command"





 Et, en mettant cela dans un script, cela donne quelque chose comme




 #!/bin/sh
 if [ $# -lt 1 ]
 then echo "usage: `basename $0` command" >&2
      exit 2
 fi
 su - -c "exec env DISPLAY='$DISPLAY' \
                   XAUTHORITY='${XAUTHORITY-$HOME/.Xauthority}' \
                   "'"$SHELL"'" -c '$*'"





 Nommez le script /usr/local/bin/xroot, et vous pouvez faire :



      xroot 'control-panel &'





 Encore plus facile, non ??


 88..  FFaaiirree ttoouurrnneerr uunn ggeessttiioonnnnaaiirree ddee ffeenn��ttrreess ddiissttaanntt

 Un gestionnaire de fen�tres (comme twm, wmaker, ou fvwm95) est une
 application comme n'importe quelle autre. La proc�dure normale devrait
 fonctionner.


 Enfin, presque. Il ne peut tourner, au plus, qu'un seul gestionnaire
 de fen�tres � un instant donn� dans une unit� d'affichage. Si vous
 faites d�j� tourner un gestionnaire de fen�tre local, vous ne pouvez
 pas lancer le gestionnaire distant (il le dira et s'arr�tera). Il faut
 tuer (ou simplement quitter) le gestionnaire local en premier.


 Par manque de chance, beaucoup de scripts de sessions X se terminent
 par un



      exec le-gestionnaire-de-fenetre-de-votre-choix




 et cela signifie que quand le gestionnaire de fen�tre (local) se
 termine, votre session se termine, et le syst�me (xdm ou xinit)
 consid�re que votre session est termin�e, et effectivement, vous
 d�connecte.


 Vous aurez encore � faire quelques contorsions, mais vous devez y
 arriver et ce n'est pas trop difficile. Amusez-vous un peu avec votre
 script de session (normalement ~/.xsession ou ~/.xinitrc) pour arriver
 � vos fins.


 Attention, un gestionnaire de fen�tres permet souvent de faire tourner
 de nouveaux programmes qui s'ex�cuteront sur la machine locale.
 C'est-�-dire locale � la machine sur lequel tourne le gestionnaire de
 fen�tres. Si vous faites tourner un gestionnaire de fen�tres distant,
 il lancera des applications distantes, et ce n'est peut-�tre pas ce
 que vous voulez.  Naturellement, elles continueront � s'afficher sur
 l'unit� d'affichage qui est locale pour vous.


 99..  MMaaiinntteennaannccee

 D'ordinaire, la premi�re fois que vous allez essayer de faire tourner
 une application X � distance, �a ne marchera pas. Voici quelques-uns
 des messages d'erreur habituels, leur cause probable et des solutions
 pour vous aider � progresser.




      xterm Xt error: Can't open display:




 Il n'y a pas de variable DISPLAY renseign�e dans votre environnement
 et vous n'avez pas non plus lanc� l'application avec le drapeau
 -display.  L'application assume que la variable display contient une
 cha�ne de caract�res vide, ce qui est syntaxiquement incorrect. La
 solution � cela consiste � s'assurer que la variable DISPLAY est
 correctement renseign�e dans l'environnement (avec setenv ou export
 selon votre shell).



      _X11TransSocketINETConnect: Can't connect: errno = 101
      xterm Xt error: Can't open display: love.dial.xs4all.nl:0




 Erreur 101 signifie ``R�seau inaccessible''. L'application n'arrive
 pas � se connecter au serveur � travers le r�seau.  V�rifiez que la
 variable  DISPLAY est correctement renseign�e et que la machine
 serveur est accessible � partir de votre client (ce qui devrait �tre
 le cas, car apr�s tout vous �tes probablement connect� au serveur en
 ayant une session telnet avec votre client).



      _X11TransSocketINETConnect: Can't connect: errno = 111
      xterm Xt error: Can't open display: love.dial.xs4all.nl:0




 Erreur 111 signifie ``Connexion refus�e''. La machine � laquelle vous
 �tes en train d'essayer de vous connecter peut �tre atteinte, mais le
 serveur indiqu� n'existe pas � cet endroit.  V�rifiez que vous
 utilisez le nom d'h�te correct et le num�ro d'unit� d'affichage
 ad�quat.



      Xlib: connection to ":0.0" refused by server
      Xlib: Client is not authorized to connect to Server
      xterm Xt error: Can't open display: love.dial.xs4all.nl:0.0




 Le client pourrait r�aliser une connexion avec le serveur, mais celui-
 ci ne permet pas au client de l'utiliser (pas autoris�). Assurez-vous
 que vous avez transf�r� le bon cookie au client, et qu'il n'est pas
 p�rim� (le serveur utilise un nouveau cookie au d�marrage d'une
 nouvelle session).