GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erhalte ich die Anzeigenummer, die mir von X zugewiesen wurde

Wenn Sie wissen, dass eine Prozess-ID in der Sitzung des Benutzers ausgeführt wird, und Sie die Berechtigung haben, auf die Informationen dieses Prozesses zuzugreifen, können Sie seine Umgebung nach DISPLAY durchsuchen Variable:

cat /proc/$pid/environ | tr '\0' '\n' | grep ^DISPLAY=

Um beispielsweise alle Hauptanzeigen aufzulisten, die von Ihrer UID auf dem aktuellen Computer verwendet werden, verwenden Sie:

ps -u $(id -u) -o pid= \
    | xargs -I PID -r cat /proc/PID/environ 2> /dev/null \
    | tr '\0' '\n' \
    | grep ^DISPLAY=: \
    | sort -u

Wenn Sie nur bei einer X-Sitzung angemeldet sind, sollte das obige nur eine Zeile mit etwas wie DISPLAY=:0 ausgeben .


In der X-Session können Sie immer DISPLAY konsultieren Umgebungsvariable, um die aktuelle Anzeigenummer zu erhalten (echo $DISPLAY ).

andere herausfinden Zahlen anzeigen ist schwieriger. Ich glaube nicht, dass es einen Standardweg gibt, an die Informationen zu kommen, außer alle Benutzer zu fragen, mit welchem ​​Display sie verbunden sind, also erfordert jeder Versuch, diese Informationen zu bekommen, eine Art Hacking und wird nicht in allen Fällen funktionieren.

Es gibt einige Optionen, die an anderer Stelle in SE angegeben werden, aber sie funktionieren beispielsweise nicht auf Debian Wheezy. Das Auflisten der derzeit aktiven Displays ist jedoch einfach, wie in dem oben verlinkten Beitrag gezeigt:

ps axu | grep "X " zeigt Ihnen die derzeit laufenden X-Prozesse, etwa so:

root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:58 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a

Der erste Parameter nach /usr/bin/X ist die Anzeigenummer mit vorangestelltem Doppelpunkt, und die nächste zeigt Ihnen das der Sitzung zugewiesene virtuelle Terminal.

Möglicherweise erhalten Sie jedoch eine Antwort, wenn Sie sich die Prozessliste ansehen:

ps axu |grep -3 "X "

root      1990  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1991  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1992  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      2359  0.0  0.0   5264  2228 ?        S    Sep15   0:00 -:1            
user_1     2378  0.0  0.0   4920  1348 ?        Ss   Sep15   0:00 /bin/sh /usr/bin/startkde
user_1     2443  0.0  0.0   3868   348 ?        Ss   Sep15   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/openbox-kde-session
--
root      7500  0.0  0.0   6460  1080 ?        Ss   Sep14   0:00 /usr/sbin/sshd
ntp       7841  0.0  0.0   5352  1760 ?        Ss   Sep14   0:17 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:111
root      7882  0.0  0.0   3964   716 ?        Ss   Sep14   0:00 /usr/bin/kdm -config /var/run/kdm/kdmrc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:59 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a
root      7906  0.0  0.0   5260  2224 ?        S    Sep14   0:00 -:0            
user_2    7925  0.0  0.0  12924  1560 ?        Ssl  Sep14   0:00 /usr/bin/lxsession -s LXDE -e LXDE
user_2    7990  0.0  0.0   3868   348 ?        Ss   Sep14   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/startlxde

Sehen Sie sich die Zeilen nach /usr/bin/X an - Wenn die X-Sitzung beginnt, wird normalerweise ein Fenstermanager für den Benutzer gestartet, zu dem die Sitzung gehört, und dort erhalten Sie den Benutzernamen. In meinem Fall verwendet Benutzer_1 KDE und Benutzer_2 verwendet LXDE. Diese Lösung beruht jedoch ausschließlich auf der Tatsache, dass der Kernel zufällig neue Prozess-IDs in aufsteigender Reihenfolge zuweist, was möglicherweise nicht immer der Fall ist.


Diese Antwort hat einen Einzeiler, basierend auf who &grep

https://askubuntu.com/a/230838/152287

who kann als w abgekürzt werden

Sie können mehr unter dem Link lesen, einschließlich eines Einzeilers, um den Wert zu erfahren.

Es klappt. Hier ist die Ausgabe von Raspberry Pi (Rasbian), wobei der Anzeigewert in der FROM-Spalte steht

[email protected]:~ $ w
 19:19:30 up  8:15,  2 users,  load average: 0.12, 0.11, 0.09
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
pi       tty7     :0               11:04    8:15m  1:15   0.89s /usr/bin/lxsess
tim      pts/0    192.168.0.29     19:17    0.00s  1.00s  0.09s w

Linux
  1. Wie führe ich einen Befehl als Systemadministrator (root) aus?

  2. Wie funktionieren die Interna von Sudo?

  3. Wie bekomme ich sicher die Version von Ksh?

  4. Wie erhalte ich die Anzahl der Frames in einem Video auf der Linux-Befehlszeile?

  5. Wie wird die Anzahl der Snapshots festgelegt, die zfs-auto-snapshot behalten soll?

Wie der Linux-Desktop gewachsen ist

So erhalten Sie die Größe eines Verzeichnisses in Linux

So holen Sie das Beste aus Qmmp 1.0 heraus

So finden Sie die Portnummer eines Dienstes in Linux

So erhalten Sie die Anzahl der Prozessoren / Kerne in Linux

So ändern Sie das Root-Passwort unter Linux