L'outil de ligne de commande linux wmctrl
vous permet, entre autres, de répertorier toutes les fenêtres ou tous les bureaux. En mode de liste de postes de travail, le bureau actuel est marqué d'un astérisque.
J'ai besoin d'un outil capable de déterminer le titre de la fenêtre actuellement active. Malheureusement, wmctrl
ne dispose pas d'un assistant pour le faire, même s'il sait quelle fenêtre est actuellement active (voir le marqueur :ACTIVE:
).
Existe-t-il un autre outil en ligne de commande pouvant me donner l’identifiant et/ou le titre de la fenêtre de la fenêtre en cours?
Installez xdotool
, puis exécutez
xdotool getwindowfocus getwindowname
Il donnera par exemple pour la page Web actuelle ouverte dans Firefox:
linux - Detecting currently active window - Super User - Mozilla Firefox
Ceci est plus direct et utilise uniquement xprop
et cut
:
xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME
Ces commandes sont simplement une extraction de propriétés de la fenêtre racine et de la fenêtre de l'application, mais selon la demande de Lorenzo von Matterhorn:
Premier,
xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
Extrait la propriété _NET_ACTIVE_WINDOW
de la racine, ce qui vous donne le XID de la fenêtre active. Le 32x '\t$0'
indique à xprop
de formater la sortie de manière à ce que cut
puisse facilement analyser plus tard.
Ensuite, extrayez seulement le XID de la sortie avec cut -f 2
Ensuite, transmettez le XID en tant que paramètre à
xprop -id XID _NET_WM_NAME
Qui affiche le nom de cette fenêtre.
$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')
0x03800004 0 16459 xxxxxxxxxx /bin/bash
$ for x in $(seq 1 10); do sleep 5; wmctrl -lp | grep $(xprop -root | \
grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | \
sed 's/^0x/0x0/'); done
0x03800004 0 16459 xxxxxxxxxx /bin/bash
0x020000a4 0 13524 xxxxxxxxxx linux - Detecting currently active window - Super User - Mozilla Firefox (Build 20120129142219)
C'est ce qui a fonctionné pour moi:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME
Donne:
WM_NAME(STRING) = "~"
Alors peut-être que vous feriez un peu la laideur pour obtenir le nom tout seul:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | sed -e 's/.*"\(.*\)".*/\1/'
Donne:
~
Quel est mon nom de fenêtre actuellement ciblé, tout seul.
Ou, évitez sed avec le légèrement moins laid:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | awk -F '"' '{print $2}'
Relativement court, il gère correctement les noms de fenêtre contenant des guillemets:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME |
sed -nr 's/.*= "(.*)"$/\1/p'