Pokud víte o jednom ID procesu spuštěném v relaci uživatele a máte oprávnění k přístupu k informacím tohoto procesu, můžete jeho prostředí nastavit pro DISPLAY
proměnná:
cat /proc/$pid/environ | tr '\0' '\n' | grep ^DISPLAY=
Chcete-li například zobrazit seznam všech hlavních displejů používaných vaším UID na aktuálním počítači, použijte:
ps -u $(id -u) -o pid= \
| xargs -I PID -r cat /proc/PID/environ 2> /dev/null \
| tr '\0' '\n' \
| grep ^DISPLAY=: \
| sort -u
Pokud jste přihlášeni pouze k jedné relaci X, výše uvedený by měl vypsat pouze jeden řádek s něčím jako DISPLAY=:0
.
V X session se můžete vždy podívat na DISPLAY
proměnná prostředí, abyste získali aktuální zobrazované číslo (echo $DISPLAY
).
Zjištění ostatních zobrazení čísel je tvrdší. Nemyslím si, že existuje jiný standardní způsob, jak získat informace, než se zeptat všech uživatelů, ke kterému displeji jsou připojeni, takže jakýkoli pokus získat tyto informace vyžaduje určitý druh hackingu a nebude fungovat ve všech případech.
Některé možnosti jsou uvedeny jinde v SE, ale například nebudou fungovat na Debian Wheezy. Vypsání aktuálně aktivních displejů je však snadné, jak ukazuje příspěvek, na který jsem odkazoval výše:
ps axu | grep "X "
vám ukáže X procesů, které právě běží, něco jako následující:
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
První parametr po /usr/bin/X
je číslo displeje s předponou dvojtečkou a další zobrazuje virtuální terminál přiřazený k relaci.
Odpověď možná získáte, když se podíváte na seznam procesů:
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
Podívejte se na řádky za /usr/bin/X
- při spuštění X session se obvykle spustí správce oken jako uživatel, kterému relace patří, a tam získáte uživatelské jméno. V mém případě user_1 používá KDE a user_2 používá LXDE. Toto řešení však spoléhá čistě na skutečnost, že jádro náhodou přiřazuje nová ID procesů ve vzestupném pořadí, což nemusí být vždy případ.
Tato odpověď má jeden řádek, založený na who
&grep
https://askubuntu.com/a/230838/152287
who
může být zkráceno jako w
můžete si přečíst více na odkazu včetně jednoho řádku, abyste získali hodnotu.
Funguje to. Zde je výstup raspberrypi (rasbian), kde je zobrazená hodnota ve sloupci FROM
[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