La méthode la moins sécurisée consiste à taper la commande xhost +gayant05 sur la machine lyderic03. Le gros défaut de cette méthode est qu'elle autorise tous les utilisateurs de gayant05 à utiliser le serveur X11 de lyderic03. La méthode à préférer est de taper xauth list sur lyderic03 sous votre compte et de récupérer la ligne correspondant à l'écran X11 de nom lyderic03:0. Il faut alors faire un xauth add sous votre compte sur la machine gayant05 en ajoutant en fin de commande ce que vous avez récupéré de la précédente commande. Le plus simple est d'utiliser le copier-coller d'une fenêtre de commandes de gayant05 vers une connexion ssh sur la machine lyderic03 (ou inversement). Dans les deux cas, il faut avertir les applications X11 de gayant05 que l'affichage doit se faire sur le serveur X11 de lyderic03. Le mieux est d'utiliser la commande Bourne Shell suivante :gayant05$ export DISPLAY=lyderic03:0
Un exemple de commande est :gayant05$ Xnest :2 -query phinaert12
En fait il n'y a rien à faire pour que la permission vous soit accordée, en effet les autorisations X11 sont écrites dans le fichier .Xauthority sous votre racine. Comme vous avez le même répertoire principal sous le serveur Xnest et sous la machine clodion10 (montage NFS) les deux autorisations se trouvent dans le même fichier .Xauthority. Du coup vous avez les permissions pour les deux écrans dans les deux environnements.
Il suffit de taper la commande :clodion10$ xeyes -display gayant05:2Les yeux vont s'afficher sur l'écran de la machine lyderic03.
Le serveur X11 Xnest est sous le contrôle du serveur de session de la machine phinaert12, donc le résultat de la commande sera aussi phinaert12. Pour détruire l'application il faut se connecter par ssh sur la machine clodion10 et, par exemple, taper killall xeyes.
13:03:59.635186 0:10:b5:44:a9:5 0:10:b5:3:88:44 ip 94: 172.26.16.4.xdmcp > 172.26.17.55.33039: udp 52 (DF) 4500 0050 0000 4000 4011 c141 ac1a 1004 ac1a 1123 00b1 810f 003c 89ff 0001 0008 002e 16f8 5f03 0000 0000 0012 4d49 542d 4d41 4749 432d 434f 4f4b 4945 2d31 0010 11a0 5f2b ae44 8633 75cd 8a73 733a 6907Répondez aux questions suivantes :
La machine émettrice (adresse IP 172.26.16.4) utilise le port UDP XDMCP, il s'agit donc d'un serveur de sessions. La machine réceptrice (adresse IP 172.26.17.55) est un quémandeur de session.
Non, c'est impossible, il y a quelques chances que le serveur se trouve aussi sur 172.26.17.55 mais ce n'est pas certain. Les adresses IP du serveur X11 se trouvent dans le paquet XDMCP REQUEST.
Il s'agit d'un paquet XDMCP ACCEPT (8) indiquant que le serveur de session accepte de prendre le contrôle de l'écran X11 décrit dans le paquet REQUEST précédent. L'identifiant de session généré par le serveur de session est 0x16f85f03. Il n'y a pas de protocole d'identification entre le serveur de session et l'écran X11 par contre une méthode d'autorisation est sélectionnée pour les communications entre les clients X11 et le serveur X11. Il s'agit de la méthode MIT-MAGIC-COOKIE-1 et le cookie est 0x11a05f2bae44863375cd8a73733a6907.
Voici un exemple de procédure :XdmcpBufferPtr buildAccept(CARD32 sessionID,char *name,void *data,int size){ XdmcpBufferPtr buffer; XdmcpHeader header; ARRAY8 authenName,authenData; ARRAY8 authorName,authorData; /* Allocation de mémoire pour le tampon du paquet */ buffer=allocXDMCPBuffer(); /* On commence par l'entête XDMCP */ header.version=XDM_PROTOCOL_VERSION; header.opcode=(CARD16)ACCEPT; header.length=12+strlen(name)+size; XdmcpWriteHeader(buffer,&header); /* On continue par l'identifiant de session */ XdmcpWriteCARD32(buffer,sessionID); /* On poursuit par l'identification */ authenName.length=authenData.length=0; XdmcpWriteARRAY8(buffer,&authenName); XdmcpWriteARRAY8(buffer,&authenData); /* Le plus difficile : l'autorisation */ authorName.length=strlen(name); authorName.data=(CARD8Ptr)name; authorData.length=size; authorData.data=(CARD8Ptr)data; XdmcpWriteARRAY8(buffer,&authorName); XdmcpWriteARRAY8(buffer,&authorData); /* On retourne le paquet */ return buffer; }Deux points de plus pour le premier qui essaye ce code et qui me donne les éventuelles erreurs qu'il contient.
En fonctionnement normal un tel paquet ne peut être récupéré que sur l'interface loopback d'une machine de TP. En effet sur ces machines tournent, à la fois, un serveur de sessions et un quémandeur de session (intégré au serveur X11). On doit donc trouver un paquet avec l'émetteur identique au récepteur. Pour exploiter le paquet, il suffit de récupérer les données de l'autorisation (les 16 derniers octets) et de l'ajouter à son propre fichier .Xauthority en utilisant la commande xauth add. Comme numéro d'écran X11 il faut prendre l'adresse IP de la machine où le paquet a été récupéré et le suffixer de :0. Comme type d'autorisation il faut utiliser MIT-MAGIC-COOKIE-1.