Es folgen weitere Fragen, die ich meiner Meinung nach wissen muss:
-
Aus einer Nicht-X-Session? (was bedeutet, dass root nicht bei X angemeldet ist)
-
Wenn mehrere Personen bei X angemeldet waren, könnte ich dann automatisch erkennen, wer sich auf welchem Bildschirm befand, und somit programmgesteuert erkennen, auf welchem Bildschirm ich die App starten muss?
-
Kann ich die App als Benutzer starten? (ok, ich bin mir zu 99,999 % sicher, dass dies ein Ja ist)
-
Kann ich erkennen, ob Benutzer der Gruppe X bei X angemeldet sind?
Akzeptierte Antwort:
Um ein grafisches Programm auf dem Desktop eines Benutzers zu starten, müssen Sie zwei Dinge herausfinden:auf welcher Anzeige sich der Desktop des Benutzers befindet (die Adresse) und welches Autorisierungs-Cookie verwendet werden soll (das Passwort).
Der folgende Befehl sollte auf den meisten Unices die lokalen Anzeigen auflisten, an denen der Benutzer angemeldet ist (eine pro Zeile):
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Das Auffinden des Autorisierungs-Cookies ist etwas schwieriger. Sie müssen nach der Cookie-Datei des Benutzers suchen, die ~/.Xauthority
ist standardmäßig (alles, was Sie brauchen, ist der Speicherort der Cookie-Datei, Sie müssen das Cookie nicht daraus extrahieren). Das funktioniert auf vielen Systemen, aber nicht auf allen; Es hängt vom Display-Manager und seiner Einrichtung ab, und insbesondere hat Gdm (der Standard bei Ubuntu) nicht den Standardspeicherort verwendet, als ich zuletzt nachgesehen habe. Ich kann mir keinen tragbaren Weg vorstellen, um die tatsächliche X-Cookie-Datei herauszufinden. Der genaueste Weg, dies herauszufinden, besteht darin, die PID des X-Prozesses herauszufinden und nach dem Argument für -auth
zu suchen Möglichkeit. Eine andere Möglichkeit besteht darin, einen Prozess zu finden, der auf diesem X-Server läuft, und sich seine XAUTHORITY
zu schnappen Umgebungsvariable. Wenn Sie Probleme haben, die Cookie-Datei zu finden, finden Sie weitere Informationen unter Öffnen eines Fensters auf einem entfernten X-Display (warum „Display kann nicht geöffnet werden“)?
Sobald Sie beide Informationen haben, legen Sie die gewählte Anzeige in DISPLAY
Umgebungsvariable, die gewählte X-Autoritäts-Cookie-Datei in XAUTHORITY
Umgebungsvariable, und schon sind Sie fertig. Es spielt keine Rolle, unter welchem Benutzer das Programm läuft; kombinieren mit su
wenn du magst.