Detectando janela ativa no momento

41

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?

    
por Dave Vogt 26.01.2012 / 13:39

5 respostas

48

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
    
por 05.07.2013 / 17:08
29

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.

    
por 12.01.2013 / 22:16
8

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)
    
por 08.02.2012 / 23:18
4

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}'

    
por 16.07.2014 / 03:56
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'
    
por 08.07.2016 / 10:52