web-dev-qa-db-fra.com

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

J'ai besoin d'une solution pour obtenir les informations actuelles actives (ciblées) de la fenêtre sur un bureau GNOME 2. Je suis surtout intéressé par le processus qui exécute ce titre de fenêtre et de fenêtre.

Est-il 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
28
Rogach

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 ciblée et active.)

(Je pensais wmctrl pourrait faire cela, mais apparemment pas.)

C'est aussi simple que ceci:

xdotool getactivewindow getwindowname

Bonne chance espérons que cela fonctionne pour vous!

29
eric

Plus simple (imo) que la solution de OP (c'est-à-dire sans ps, grep et 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)
8

Essayez la commande xwininfo, http://www.xfree86.org/4.2.0/xwinininfo.1.html , cela renvoie définitivement le titre de la fenêtre et aussi loin que le processus va, eh bien ...

X a-t-il attribué une carte d'identité et devient le PID parent de la fenêtre et la dissimulera également par défaut, en supposant que GNOME a Net_wm_pid pris en charge, car ce correctif de 2001 indique qu'il a, http: // mail. gnome.org/archives/gtk-devel-list/2001-october/msg00238.html , nous pouvons ensuite passer en revue cet article, http://www.mail-archive.com/devel@xfree86. Org/msg05809.html , où l'auteur écrit un programme Court C pour convertir une ID de fenêtre en PID, voici.

4
rhoyerboat

Je sais que la question est vieille, mais je me sens xprop Il faut également mentionner ici. Il est facilement disponible sous X. Il peut être utilisé de manière interactive:

  1. type xprop et sélectionnez la fenêtre souhaitée à l'aide du curseur de la souris, puis
  2. WM_NAME Vous donne le titre de la fenêtre, _NET_WM_PID Donne le PID

Ou vous pouvez directement dire xprop quelle fenêtre vous avez besoin en passant -id Ou -name. Utilisation awk Vous pouvez obtenir l'ID de fenêtre active et le transmettre à xprop comme celui-ci (pris à partir de ici ):

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

Enfin, en utilisant votre outil préféré ™ (E.G. grep ou sed) Vous pouvez grep-out les valeurs nécessaires. Par exemple, pour pid La sortie de la commande ci-dessus peut être canalisée sur sed: sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

1
jjj