Gibt es eine Möglichkeit herauszufinden, ob der aktuelle Sitzungsbenutzer einen Xserver (unter Linux) ausführt?
Ich habe mit Dingen angefangen wie:
ps -e | grep X
das funktioniert aber nicht immer
und eine weitere Sache, die ich versucht habe, ist die Überprüfung der $DISPLAY
Variablen
Gibt es andere Möglichkeiten, dies zu überprüfen?
BEARBEITEN: Einige Leute schlugen vor, die $ DISPLAY-Variablen zu verwenden, aber was ist, wenn der Benutzer mit dieser Variablen spielt? Was ist, wenn er versucht, etwas zu tun und diese Variable ändert? Wenn ich sie dann überprüfe, spiegelt sie nicht mehr den genauen Zustand des Systems wider. Gibt es dafür keinen bestimmten Weg, der immer eine korrekte Antwort zurückgibt?
Ich fand, dass es programmatisch so gemacht werden kann:
#include <X11/Xlib.h>
int main()
{ exit(XOpenDisplay(NULL) ? 0 : 1); }
$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11
Aber ich suche einen Drehbuchweg.
Antworten:
Ich muss häufig einen X-Befehl auf einem Server ausführen, auf dem viele X-Server ausgeführt werden, sodass die
ps
basierten Antworten nicht funktionieren. Muss natürlich$DISPLAY
entsprechend eingestellt werden. Um zu überprüfen, ob dies gültig ist, verwenden Siexset q
in einem Fragment wie:quelle
xprop
und produziertxdpyinfo
daxset
weniger Output/dev/null
zum Essen. Das OP sollte diese Antwort akzeptieren.xset
hängt er nur in der Tat an allen X-Befehlen. Gibt es eine Möglichkeit, eine Auszeit festzulegen?xset
. Jedes X-Programm wird darunter leiden. Der Hang hängt vom X-Transport ab. Wenn SieDISPLAY=:1
gesagt haben, impliziert dies TCP-Port 6001. Möglicherweise wird ein Rouge-Prozess abgehört. Ichxset
kehre sofort zurück, wenn nichts zuhört.$DISPLAY
auf lokal schlecht eingestellt sind . Was dann passiert, ist, dass Sie einen X-Befehl auf der Fernbedienung ausführen . Ssh tunnelt das X-Protokoll zurück zu local, was (aufgrund der zweifelhaften$DISPLAY
) fehlschlägt, und ssh druckt die Nachricht.$ DISPLAY ist der Standardweg. Auf diese Weise kommunizieren Benutzer mit Programmen darüber, welcher X-Server gegebenenfalls verwendet werden soll.
quelle
ich benutze
pgrep und $ DISPLAY sind weitere Optionen.
Weitere Überlegungen:
su dann wird $ DISPLAY nicht gesetzt. Dinge, die die Umgebung des laufenden Programms verändern, können dazu führen, dass dies nicht funktioniert.
Ich empfehle ps -e | nicht grep X findet hier procX, das nicht der X-Server ist.
quelle
Ein Trick, mit dem ich feststellen kann, ob X ausgeführt wird, ist:
Telnet 127.0.0.1 6000
Wenn eine Verbindung hergestellt wird, wird ein X-Server ausgeführt, der eingehende TCP-Verbindungen akzeptiert (heutzutage normalerweise nicht die Standardeinstellung).
quelle
telnet
Befehl nicht zur Verfügung haben.Sie können verwenden
xdpyinfo
(kann über installiert werdenapt-get install x11-utils
).quelle
... ist mein bewährter Befehl, um auf eine "X-fähige" Situation zu testen. Und es ist so gut wie garantiert, dass es sich auf jedem System befindet, auf dem X ausgeführt wird. Natürlich schlägt der Befehl fehl, wenn er nicht gefunden wird. Selbst wenn er nicht vorhanden ist, können Sie so ziemlich davon ausgehen, dass es auch kein X gibt. (Deshalb benutze ich &> anstelle von>)
quelle
&>
für die Verwendung in Shell-Skripten, unterdash
denen nicht unterstützt wird&>
, kann man verwenden>/dev/null 2>&1
.xinit
. Wirdxprop
also nicht automatisch installiert, da es sich nicht um eine Abhängigkeit handelt.1)
2) nmap
quelle
Ich habe ein xdpyprobe- Programm geschrieben, das für diesen Zweck vorgesehen ist. Im Gegensatz zu xset, xdpyinfo und anderen allgemeinen Tools führt es keine zusätzlichen Aktionen aus (überprüft nur den X-Server und beendet ihn) und erzeugt möglicherweise keine Ausgabe (wenn die Option "-q" angegeben ist).
quelle
Die Bash-Skript-Lösung:
Funktioniert nicht, wenn Sie sich von einer anderen Konsole (Strg + Alt + F?) Oder ssh anmelden. Für mich funktioniert diese Lösung in meinem Archlinux:
Sie können / usr / lib / Xorg nur für Xorg oder den richtigen Befehl auf Ihrem System ändern.
quelle
/usr/lib/xorg/Xorg
anstelle von/usr/lib/Xorg
Zunächst müssen Sie sicherstellen, dass grundlegende X11-Pakete korrekt auf Ihrem Server installiert sind:
Wenn nicht, installieren Sie bitte alle Pakete:
Stellen Sie sicher, dass der openssh-Server für die Weiterleitung von x11-Verbindungen konfiguriert ist:
ANMERKUNG: Wenn vor dieser Zeile ein Kommentar (#) steht oder auf Nein gesetzt ist, aktualisieren Sie die Datei entsprechend den obigen Angaben und starten Sie Ihren SSH-Server-Daemon neu (seien Sie hier vorsichtig - wenn Sie einen Fehler gemacht haben, können Sie sich aus dem Code aussperren Server)
Konfigurieren Sie nun die SSH-Anwendung so, dass X11-Anforderungen weitergeleitet werden:
quelle
quelle
Dies ist ein PHP-Skript zur Überprüfung.
Ein ähnlicher Befehl kann auch im Shell-Skript verwendet werden. wie der Befehl pidof.
quelle