.Xauthority
im Heimatverzeichnis des angemeldeten Benutzers gespeichert. Diese Datei ist natürlich nur für den Benutzer selber lesbar. So könnte eine solche Datei aussehen.
ole@enterprise:~> ls -l .Xauthority -rw------- 1 ole users 375 2004-06-21 20:45 .Xauthority ole@enterprise:~> od -a .Xauthority 0000000 nul nul nul eot nl nul nul soh nul soh 0 nul dc2 M I T 0000020 - M A G I C - C O O K I E - 1 nul 0000040 dle etx < T 0 E m ' ^ g bs u [ Q stx 8 0000060 ? soh nul nul nl e n t e r p r i s e nul 0000100 soh 0 nul dc2 M I T - M A G I C - C O 0000120 O K I E - 1 nul dle etx < T 0 E m ' ^ 0000140 g bs u [ Q stx 8 ? soh nul nul dle e n t e 0000160 r p r i s e . l o c a l nul soh 1 nul 0000200 dc2 M I T - M A G I C - C O O K I 0000220 E - 1 nul dle Q etx N enq E dc2 L C N _ & 0000240 Z fs h n del nul nul nul eot nl nul nul soh nul soh 0 0000260 nul dc3 X D M - A U T H O R I Z A T 0000300 I O N - 1 nul dle , O sub f d 8 P I nul 0000320 Z d B Q ~ ack ht soh nul nul nl e n t e r 0000340 p r i s e nul soh 0 nul dc3 X D M - A U 0000360 T H O R I Z A T I O N - 1 nul dle , 0000400 O sub f d 8 P I nul Z d B Q ~ ack ht 0000417
ole@enterprise:~> xhost access control enabled, only authorized clients can connect
Dann extrahieren wir den passenden Schlüssel für den aktiven X-Serverbildschirm und speichern ihn in die Datei Xschluessel.
ole@enterprise:~> xauth extract Xschluessel $DISPLAY ole@enterprise:~> ls -l Xschluessel -rw------- 1 ole users 111 2004-06-21 23:54 Xschluessel
Wir wechseln unsere Identität zu root.
ole@enterprise:~> su -l Password:
Dann fügen wir den in die Datei Xschluessel extrahierten Schlüssel zur .Xauthority von root hinzu. Da bis jetzt noch keine solche Datei vorhanden war, wird einfach eine neue Datei erstellt.
enterprise:~ # xauth merge /home/ole/Xschluessel xauth: creating new authority file /root/.Xauthority
Jetzt nur noch die Umgebungsvariable DISPLAY setzen und schon klappt es mit dem X-Client.
enterprise:~ # export DISPLAY=:0.0 enterprise:~ # nedit
Für den Benutzer root geht es sogar noch einfacher. Nach dem Einloggen muß nur die Variable XAUTHORITY auf die passende .Xauthority gesetzt werden. Und schon klappt es wieder mal mit dem X-Client.
ole@enterprise:~> su -l Password: enterprise:~ # export XAUTHORITY=/home/ole/.Xauthority enterprise:~ # nedit
Problematischer wird die Übertragung des Magic Cookies bei entfernten Rechnern. Da normalerweise nicht die IP-Nummer des Hosts beim Magic Cookie gespeichert wird sondern sein Hostname, muß auf dem anderen Rechner auch eine passende Namensauflösung laufen.
dozent@linux37:~> echo $DISPLAY :0.0 dozent@linux37:~> xauth list linux37.local:0 MIT-MAGIC-COOKIE-1 aad2f729bd7ac5cd4c29a91a4867578a linux37/unix:0 MIT-MAGIC-COOKIE-1 aad2f729bd7ac5cd4c29a91a4867578a linux37.local:0 XDM-AUTHORIZATION-1 b4396abf05bbad06002c298ce3d8d635 linux37/unix:0 XDM-AUTHORIZATION-1 b4396abf05bbad06002c298ce3d8d635 dozent@linux37:~> xauth extract - linux37.local:0 | \ > ssh -l walter linux36 /usr/X11R6/bin/xauth merge - Password:
Wichtig ist hier nicht einfach die Variable DISPLAY zu benutzen. In diesem Fall würde sich der Eintrag nämlich auf linux37/unix:0 beziehen, der aber den Transport über einen Unix-Socket veranlaßt. Einen solchen Eintrag auf einen anderen Rechner zu übertragen bringt nicht viel.