Est-il possible de récupérer le processus / titre de la fenêtre active dans Gnome?

28

J'ai besoin d'une solution pour obtenir les informations de la fenêtre active (focalisée) sur un bureau Gnome 2. Je suis principalement intéressé par le processus exécutant cette fenêtre et le titre de la fenêtre.

C'est possible?

SOLUTION:

Obtenir le titre de la fenêtre:

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

Obtenir le nom du processus:

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

ou:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
Rogach
la source

Réponses:

17

Vous pouvez utiliser xdotool , un outil d'automatisation de fenêtre X polyvalent.

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

(Je ne sais pas quelle est la différence entre concentré et actif.)

(Je pensais que wmctrl pouvait le faire, mais apparemment pas.)

Gilles 'SO- arrête d'être méchant'
la source
26

C'est aussi simple que cela:

xdotool getactivewindow getwindowname

Bonne chance j'espère que ça marche pour vous!

eric
la source
Cela fonctionne, quelqu'un peut-il expliquer pourquoi il a été rejeté?
lfzawacki
8

Plus simple (IMO) que la solution OP (c'est-à-dire sans ps, grepet awk), pour obtenir le nom du processus:

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

Ou si vous voulez une fin de ligne:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)
Skippy le Grand Gourou
la source
Oui, cat /proc/c'est bien (et sans doute plus rapide, car cela n'implique pas de saluer toute la pssortie). Je l'ai ajouté à la solution dans le corps de la question, afin que les futurs utilisateurs puissent le trouver.
Rogach
4

Essayez la commande xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html , elle renvoie définitivement le titre de la fenêtre et en ce qui concerne le processus, eh bien ...

X lui a attribué un ID et est devenu le PID parent de la fenêtre et le cacherait également par défaut, donc, en supposant que Gnome a NET_WM_PID pris en charge, comme ce patch de 2001 l'indique, http://mail.gnome.org/ archives / gtk-devel-list / 2001-octobre / msg00238.html , nous pourrons ensuite consulter cet article, http://www.mail-archive.com/[email protected]/msg05809.html , où l'auteur écrit un programme C court pour convertir l'ID de fenêtre en PID, le tour est joué.

rhoyerboat
la source
Mais il semble que cela xwininfom'oblige à sélectionner manuellement la fenêtre souhaitée. J'espérais un moyen d'obtenir la fenêtre focalisée de bash.
Rogach
Quelque chose comme, `xwininfo -root -children | grep -oEi 'Identifiant de la fenêtre: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - édition: mon doigt a glissé, mon expression régulière pour l'identifiant de la fenêtre était mauvaise. consultez cet autre site pour une référence variable: davygoat.com/software/rizzle/How_it_works.html
rhoyerboat
Cette commande ne donne que l'ID de la fenêtre "root", et non celle active :(
Rogach
1

Je sais que la question est ancienne, mais je pense xpropégalement qu'il convient de la mentionner ici. Il est facilement disponible sous X. Il peut être utilisé de manière interactive:

  1. tapez xpropet sélectionnez la fenêtre souhaitée à l'aide du curseur de la souris, puis
  2. WM_NAMEvous donne le titre de la fenêtre, _NET_WM_PIDdonne le pid

Ou vous pouvez dire directement xpropquelle fenêtre vous avez besoin en passant -idou en -nameoption. En utilisant, awkvous pouvez obtenir l'ID de la fenêtre active et le renvoyer à xpropcela (extrait d' ici ):

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

Enfin, en utilisant Your Favorite Tool ™ (par exemple grepou sed), vous pouvez récupérer les valeurs nécessaires. Par exemple, pidla sortie de la commande ci-dessus peut être dirigée vers sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

jjj
la source