È possibile recuperare il processo / titolo della finestra attiva in Gnome?


28

Ho bisogno di una soluzione per ottenere le informazioni sulla finestra attiva (focalizzata) su un desktop Gnome 2. Sono principalmente interessato al processo che esegue quel titolo di finestra e finestra.

È possibile?

SOLUZIONE:

Ottenere il titolo della finestra:

xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1

Ottenere il nome del processo:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

o:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

Risposte:


17

Puoi usare xdotool , un versatile strumento di automazione della finestra X.

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(Non so quale sia la differenza tra focalizzato e attivo.)

(Pensavo che wmctrl potesse farlo, ma apparentemente no.)


26

È semplice come questo:

xdotool getactivewindow getwindowname

Buona fortuna spero che funzioni per te!


Funziona, qualcuno può spiegare perché è stato sottoposto a downgrade?
lfzawacki,

8

Più semplice (IMO) della soluzione OP (ovvero senza ps, grepe awk), per ottenere il nome del processo:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

O se vuoi un fine linea:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)

Sì, cat /proc/è bello (e probabilmente più veloce, dal momento che non comporta il grepping dell'intero psoutput). L'ho aggiunto alla soluzione in questione, in modo che i futuri utenti possano trovarla.
Rogach,

4

Prova il comando xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html , restituisce sicuramente il titolo della finestra e per quanto riguarda il processo, beh ...

X gli ha assegnato un ID e diventa il PID padre della finestra e lo nasconderebbe anche per impostazione predefinita, quindi, supponendo che Gnome abbia NET_WM_PID supportato, come questa patch del 2001 indica che ha, http://mail.gnome.org/ archives / gtk-devel-list / 2001-October / msg00238.html , quindi possiamo rivedere questo post, http://www.mail-archive.com/devel@xfree86.org/msg05809.html , dove l'autore scrive un breve programma C per convertire Window ID in PID, voilà.


Ma sembra che xwininfomi richieda di selezionare manualmente la finestra necessaria. Speravo in un modo per ottenere la finestra focalizzata da bash.
Rogach,

Qualcosa come in, `xwininfo -root -children | grep -oEi 'ID finestra: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - modifica: il mio dito è scivolato, la mia regex per l'ID della finestra era cattiva. controlla questo altro sito per riferimento variabile: davygoat.com/software/rizzle/How_it_works.html
rhoyerboat

Questo comando fornisce solo l'id della finestra "root" e non quello attivo :(
Rogach,

1

So che la domanda è vecchia, ma credo che xpropanche qui dovrebbe essere menzionata. È prontamente disponibile sotto X. Può essere utilizzato in modo interattivo:

  1. digitare xprope selezionare la finestra desiderata utilizzando il cursore del mouse, quindi
  2. WM_NAMEti dà il titolo della finestra, ti _NET_WM_PIDdà il pid

Oppure puoi dire direttamente di xpropquale finestra hai bisogno passando -ido l' -nameopzione. Usando awkpuoi ottenere l'ID della finestra attiva e passarlo indietro a xpropquello (preso da qui ):

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

Infine, utilizzando Your Favorite Tool ™ (ad esempio grepo sed) è possibile visualizzare i valori necessari. Ad esempio per pidl'output del comando precedente può essere reindirizzato a sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.