Se sei a conoscenza di un ID processo in esecuzione nella sessione dell'utente e disponi dell'autorizzazione per accedere alle informazioni di tale processo, puoi grep il suo ambiente per DISPLAY
variabile:
cat /proc/$pid/environ | tr '\0' '\n' | grep ^DISPLAY=
Ad esempio, per elencare tutti i display principali utilizzati dal tuo UID sul computer corrente, utilizza:
ps -u $(id -u) -o pid= \
| xargs -I PID -r cat /proc/PID/environ 2> /dev/null \
| tr '\0' '\n' \
| grep ^DISPLAY=: \
| sort -u
Se hai effettuato l'accesso solo a una sessione X, quanto sopra dovrebbe produrre solo una riga con qualcosa come DISPLAY=:0
.
Nella sessione X, puoi sempre consultare il DISPLAY
variabile di ambiente per ottenere il numero di visualizzazione corrente (echo $DISPLAY
).
Scoprire gli altri visualizzare i numeri è più difficile. Non penso che esista un modo standard per ottenere le informazioni oltre a chiedere a tutti gli utenti a cui sono collegati, quindi qualsiasi tentativo di ottenere queste informazioni richiede una sorta di hacking e non funzionerà per tutti i casi.
Ci sono alcune opzioni fornite altrove in SE ma non funzioneranno su Debian Wheezy, per esempio. Tuttavia, elencare i display attualmente attivi è facile, come mostrato nel post che ho linkato sopra:
ps axu | grep "X "
ti mostrerà i processi X attualmente in esecuzione, qualcosa di simile al seguente:
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
Il primo parametro dopo /usr/bin/X
è il numero del display preceduto dai due punti, e quello successivo mostra il terminale virtuale assegnato alla sessione.
Tuttavia, potresti ottenere una risposta guardando l'elenco dei processi:
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
Guarda le righe dopo /usr/bin/X
- all'avvio della sessione X, in genere viene avviato un gestore di finestre come utente a cui appartiene la sessione e lì si ottiene il nome utente. Nel mio caso user_1 sta usando KDE e user_2 sta usando LXDE. Tuttavia, questa soluzione si basa esclusivamente sul fatto che il kernel sta assegnando nuovi ID di processo in sequenza crescente, il che potrebbe non essere sempre il caso.
Questa risposta ha una riga, basata su who
&grep
https://askubuntu.com/a/230838/152287
who
può essere abbreviato come w
puoi leggere di più al link includendo una riga per ottenere il valore.
Funziona. Ecco l'output raspberrypi (rasbian), dove il valore visualizzato è nella colonna 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