it-swarm.com.de

Wie überprüfe ich, ob der X-Server läuft?

Gibt es eine Möglichkeit, herauszufinden, ob der aktuelle Sitzungsbenutzer einen Xserver (unter Linux) ausführt?

Ich begann mit Dingen wie:

ps -e | grep X 

aber das funktioniert nicht immer

und noch etwas habe ich versucht, die $DISPLAY-Variable zu überprüfen

Gibt es noch andere Möglichkeiten, dies zu überprüfen?

BEARBEITEN: Einige Leute schlugen vor, die $ DISPLAY-Variablen zu verwenden, was aber, wenn der Benutzer mit dieser Variablen fummelt? Was ist, wenn er versucht, etwas zu tun und diese Variable zu ändern, und wenn ich sie überprüfe, spiegelt sie nicht mehr den genauen Zustand des Systems wider. Gibt es keine spezielle Methode, die immer eine korrekte Antwort liefert?

Ich habe festgestellt, dass dies auf programmatische Weise möglich ist:

#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.

46
Roman M

Ich muss oft einen X-Befehl auf einem Server ausführen, auf dem viele X-Server ausgeführt werden, sodass die ps-basierten Antworten nicht funktionieren. Natürlich muss $DISPLAY entsprechend eingestellt werden. Um zu überprüfen, ob das gültig ist, verwenden Sie xset q in einem Fragment wie:

if ! xset q &>/dev/null; then
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2
    exit 1
fi
51
bobbogo

$ DISPLAY ist der Standardweg. So kommunizieren Benutzer mit Programmen darüber, welchen X-Server sie verwenden sollen.

17
Ken

Ich benutze

pidof X && echo "yup X server is running"

pgrep und $ DISPLAY sind weitere Optionen. 

Andere Überlegungen:

dann wird $ DISPLAY nicht gesetzt. Dinge, die die Umgebung des laufenden Programms ändern, können dazu führen, dass dies nicht funktioniert.

Ich empfehle nicht ps -e | grep X wird dies als procX finden, der nicht der X-Server ist.

9
Ian Kelling

Ein Trick, mit dem ich feststellen kann, ob X läuft, ist:

telnet 127.0.0.1 6000

Wenn eine Verbindung hergestellt wird, ist ein X-Server aktiv, der eingehende TCP - Verbindungen akzeptiert (heutzutage normalerweise kein Standard).

7
dicroce

Sie können xdpyinfo verwenden (kann über apt-get install x11-utils installiert werden).

6
shuckc
xprop -root &> /dev/null 

... ist mein bewährter Befehl, um eine "X-fähige" Situation zu testen. Und es ist ziemlich garantiert, dass es auf jedem System läuft, auf dem X ausgeführt wird. Natürlich schlägt der Befehl fehl, wenn er sowieso nicht gefunden wird. Selbst wenn er nicht vorhanden ist, können Sie davon ausgehen, dass es kein X gibt. (deshalb verwende ich &> anstelle von>)

4
osirisgothra

1)

 # netstat -lp | grep -i x 
 tcp 0 0 *: x11 *: * LISTEN 2937/X 
 tcp6 0 0 [::]: x11 [::]: * LISTEN 2937/X 
 Aktive UNIX-Domänensockets (nur Server) 
 Unix 2 [ACC] STREAM HÖREN 8940 2937/X @/tmp/.X11-unix/X0 
 Unix 2 [ACC] STREAM LISTENING 8941 2937/X/tmp/.X11-unix/X0 
 # 

2) nmap

 # nmap localhost | grep -i x 
 6000/tcp open X11 
 # 
3
vitaly.v.ch
if [[ $DISPLAY ]]; then 
  …
fi
2

Ich habe xdpyprobe programm geschrieben, das für diesen Zweck gedacht ist. Im Gegensatz zu xset, xdpyinfo und anderen allgemeinen Tools führt es keine zusätzlichen Aktionen aus (überprüft lediglich den X-Server und beendet) und erzeugt möglicherweise keine Ausgabe (wenn die Option "-q" angegeben ist).

2
Alex Kost

Zunächst müssen Sie sicherstellen, dass grundlegende X11-Pakete auf Ihrem Server ordnungsgemäß installiert sind:

rpm -qa | grep xorg-x11-xauth

Wenn nicht, installieren Sie bitte alle Pakete:

Sudo yum install xorg-x11-xauth xterm

Stellen Sie sicher, dass der openssh-Server für das Weiterleiten von x11-Verbindungen konfiguriert ist:

edit file : vim /etc/ssh/sshd_config

X11Forwarding yes

HINWEIS: Wenn vor dieser Zeile ein Kommentar (#) steht oder auf no gesetzt ist, aktualisieren Sie die Datei entsprechend, und starten Sie Ihren ssh-Server-Daemon neu (seien Sie hier vorsichtig - wenn Sie einen Fehler gemacht haben, sperren Sie sich möglicherweise selbst aus Server)

Sudo /etc/init.d/sshd restart

Konfigurieren Sie nun die SSH-Anwendung zum Weiterleiten von X11-Anforderungen:

ssh -Y [email protected]_server.your_domain.com
1

Die bash-Skriptlösung:

if ! xset q &>/dev/null; then
    echo "No X server at \$DISPLAY [$DISPLAY]" >&2
    exit 1
fi

Funktioniert nicht, wenn Sie sich an einer anderen Konsole (Strg + Alt + F?) Oder ssh anmelden. Für mich funktioniert diese Lösung in meinem Archlinux:

#!/bin/sh
ps aux|grep -v grep|grep "/usr/lib/Xorg"
EXITSTATUS=$?
if [ $EXITSTATUS -eq 0 ]; then
  echo "X server running"
  exit 1
fi

Sie können/usr/lib/Xorg nur für Xorg oder den entsprechenden Befehl auf Ihrem System ändern.

0
oml

Dies ist das PHP Skript zur Überprüfung.

$xsession = `pidof X`;
if (!$xsession) {
    echo "There is no active X session, aborting..\n";
    exit;
}

Ein ähnlicher Befehl kann auch im Shell-Skript verwendet werden. wie der pidof-Befehl.

0
user3607430