Erzwingen Sie die XWindows-Authentifizierung

362

Ich starte einen Prozess mit init.d und möchte GUI-Anwendungen als untergeordnete Prozesse erstellen können.

Aufgrund des frühen Starts dieses Prozesses werden die Umgebungsvariablen DISPLAY und XAUTHORITY nicht gesetzt.

Ich kann DISPLAY einfach auf 0.0 setzen, was gut funktioniert. Ich habe jedoch mehr Probleme mit der XAUTHORITY-Variable.

Ich könnte XAUTHORITY so einstellen, dass es auf die .XAuthority-Datei im Home-Verzeichnis des Benutzers verweist - aber es existiert nicht. Wenn die XAUTHORITY-Variable normalerweise bei einer X-Session angemeldet ist, wird sie unter / var / run / gdm / auf eine Datei gesetzt und hat einen scheinbar zufälligen Dateinamen.

Kann ich als root einfach einen neuen Cookie für mich generieren?

0
Verwenden Sie `xauth add` ssnobody vor 8 Jahren 0

1 Antwort auf die Frage

1
Stefan

Sie können keinen neuen Cookie generieren: Der Cookie ist das "geheime Passwort", das dem Server beim Start mitgeteilt wurde und das alle Clients wissen müssen, um eine Verbindung herzustellen.

Ich denke, man kann mit so was bekommen

DISPLAY=:0 XAUTHORITY=$(ps auxw | sed -ne "s|.*/[X].* $DISPLAY.*-auth \\([^ ]*\\).*|\\1|p") export DISPLAY XAUTHORITY ... 

Dies funktioniert, indem nach dem X-Server-Prozess gesucht wird, der versucht, das an ihn übergebene -authArgument zu finden, da dies eine Datei sein sollte, die die XAUTH-Einstellungen enthält. Beachten Sie, dass diese Datei (meiner Erfahrung nach) normalerweise root gehört und andere Benutzer sie nicht lesen können. Wenn Sie dann eine X-Anwendung ausführen möchten, die nicht als root ausgeführt wird, müssen Sie diese zuerst kopieren Datei (als root) an anderer Stelle und ändern Sie den Eigentümer dieser Kopie (oder Sie möchten den Inhalt dieser Datei ~/.Xauthoritymit xauth addoder in die Datei des Benutzers übertragen xauth merge).

Eine andere Methode zum Auffinden der Datei, in der der Magic Cookie gespeichert ist, besteht darin, sich die Umgebung einiger Prozesse des angemeldeten Benutzers anzusehen (z gnome-shell. B. des Prozesses). ZB mit psSie sollten den Prozess-ID der Lage zu finden, gnome-shellProzess (oder einen anderen Benutzer - Prozess, den wir als X - Client erwarten zu laufen), und suchen Sie in dann /proc/<process-id>/environmentauf den Wert seiner XAUTHORITY envvar zu finden.