Detectando janela atualmente ativa

Detectando janela atualmente ativa

A ferramenta de linha de comando do Linux wmctrlpermite 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, wmctrlnã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 xdotoole 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 xpropand 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_WINDOWpropriedade da raiz, que fornece o XID da janela ativa. A 32x '\t$0'instrução informa xproppara formatar a saída de uma forma que cutpossa ser facilmente analisada posteriormente.

  • Em seguida, extraia apenas o XID da saída comcut -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'

informação relacionada