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

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.)


26

C'est aussi simple que cela:

xdotool getactivewindow getwindowname

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


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)

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/devel@xfree86.org/msg05809.html , où l'auteur écrit un programme C court pour convertir l'ID de fenêtre en PID, le tour est joué.


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'

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.