A ferramenta de linha de comando do Linux wmctrl
permite listar todas as janelas ou todos os desktops, entre outras coisas. No modo de listagem de desktops, o desktop atual é marcado com um asterisco.
Preciso de uma ferramenta que possa descobrir o título da janela atualmente ativa. Infelizmente, wmctrl
não tem um ajudante que faça isso - apesar de saber qual janela está ativa no momento (ver :ACTIVE:
marcador).
Existe outra ferramenta de linha de comando que pode me fornecer o ID da janela e/ou o título da janela atual?
Responder1
Instale xdotool
e execute
xdotool getwindowfocus getwindowname
Dará, por exemplo, para a página atual aberta no Firefox:
linux - Detecting currently active window - Super User - Mozilla Firefox
Responder2
Isso é mais direto e usa apenas xprop
and cut
:
xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME
Esses comandos são apenas uma extração de propriedades da janela raiz e da janela do aplicativo, mas conforme solicitação de Lorenzo von Matterhorn:
Primeiro,
xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
Extrai a
_NET_ACTIVE_WINDOW
propriedade da raiz, que fornece o XID da janela ativa. A32x '\t$0'
instrução informaxprop
para formatar a saída de uma forma quecut
possa ser facilmente analisada posteriormente.Em seguida, extraia apenas o XID da saída com
cut -f 2
Em seguida, passe o XID como parâmetro para
xprop -id XID _NET_WM_NAME
Que imprime o nome dessa janela.
Responder3
Existe, mas não há resposta ou solução curta.
$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')
resultado:
0x03800004 0 16459 xxxxxxxxxx /bin/bash
Em uso:
$ 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)
Responder4
Relativamente curto e lida corretamente com nomes de janelas contendo aspas:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME |
sed -nr 's/.*= "(.*)"$/\1/p'