Instale xdotool
e, em seguida, execute
xdotool getwindowfocus getwindowname
Ele dará, e. para a página atual aberta no Firefox:
linux - Detecting currently active window - Super User - Mozilla Firefox
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 área de trabalho, a área de trabalho atual é marcada com um asterisco.
Eu preciso de uma ferramenta que possa descobrir o título da janela ativa no momento. Infelizmente, wmctrl
não tem um ajudante que faz isso - apesar de saber qual janela está ativa no momento (veja :ACTIVE:
marker).
Existe outra ferramenta de linha de comando que pode me fornecer o id da janela e / ou o título da janela atual?
Isso é mais direto e usa apenas xprop
e 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 por solicitação de Lorenzo von Matterhorn:
Primeiro,
xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
Extrai a propriedade _NET_ACTIVE_WINDOW
da raiz, que
lhe dá o XID da janela ativa. O 32x '\t$0'
informa xprop
para formatar a saída de forma que cut
possa analisar facilmente mais tarde.
Em seguida, extraia apenas o XID da saída com cut -f 2
Em seguida, passe o XID como um parâmetro para
xprop -id XID _NET_WM_NAME
Que imprime o nome dessa janela.
$ 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)
Isso é o que funcionou para mim:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME
Dá:
WM_NAME(STRING) = "~"
Então, talvez você faça um pouco de sedução para obter o nome sozinho:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | sed -e 's/.*"\(.*\)".*//'
Dá:
~
Qual é o meu nome de janela atualmente focado, sozinho.
Ou evite sed com o menos feio:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | awk -F '"' '{print $2}'
Relativamente curto e manipula os nomes das janelas que contêm aspas corretamente:
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME |
sed -nr 's/.*= "(.*)"$//p'
Tags command-line xorg linux