GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere il numero del display che mi è stato assegnato da X

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

Linux
  1. Come ottenere il numero di CPU in Linux usando C?

  2. Come ottenere solo il numero di righe di un file

  3. Come posso *solo* ottenere il numero di byte disponibili su un disco in bash?

  4. Come posso ottenere il numero di fotogrammi in un video sulla riga di comando di Linux?

  5. Come ottenere il numero di dischi fisici in Linux?

Come è cresciuto il desktop Linux

Come ottenere la dimensione di una directory in Linux

Come ottenere il massimo da Qmmp 1.0

Come trovare il numero di porta di un servizio in Linux

Come ottenere il numero di processori/core in Linux

Come modificare la password di root in Linux