Como posso encontrar o local (na área de trabalho) de uma janela na linha de comando?

19

Estou tentando escrever um pequeno script para ajudar a gerenciar minhas janelas por meio de atalhos de teclado.

Para fazer o que eu quero, preciso encontrar o local e o tamanho atuais da janela "ativa" (focada). Por localização, quero dizer as coordenadas X, Y da janela na área de trabalho e por tamanho, a altura e a largura da janela.

Existe um utilitário de linha de comando que pode buscar essas informações?

TM.
fonte

Respostas:

22

Você pode obter todas as informações da janela ativa atual usando este comando:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

ou

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Basta analisar a saída das coordenadas necessárias. Aqui estão alguns comandos úteis ao interagir com o Windows:

  • O xwininfo fornecerá a geometria relativa e absoluta.
  • O xprop informa muitas informações, inclusive se a janela está ativa, mas não a geometria
  • O xdpyinfo também fornecerá o ID da janela ativa, mas nenhuma informação extra.
  • O wmctrl fornece uma lista de informações sobre janelas e permite selecionar a janela ativa para modificação, mas não informações.

Por exemplo, para alterar o título da janela ativa para "Novo nome":

wmctrl -r :ACTIVE: -N "New Name"

Ou para alterar a posição da janela ativa:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Considere wmctrlse você precisa mudar algo simples, como a geometria da janela. Considere usar os outros scripts mencionados acima apenas se desejar fazer outras coisas mais complexas.

Martin Owens -doctormo-
fonte
1
Gostaria apenas de observar que obtenho resultados diferentes ao executar o segundo comando. Primeiro funciona como eu esperava.
TM.
1
Eu uso o Arch, mas pode ajudar alguém aqui no futuro. O primeiro não funcionou para mim, o segundo não forneceu as dimensões corretas, talvez devido ao WM. Mas a combinação dos dois funcionou. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev
Obrigado! Mas eu concordo com os dois primeiros comentários. O segundo comando, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)mostra-me uma janela filho (não tem nome) do meu Terminal. Quando eu xdpyinfo | grep focusrecebo focus: window 0x435b877, revert to Parent, e 0x435b877 é o ID da janela retornada pelo primeiro comando (que funciona para mim). Isso é no Trusty 14.04.1 LTS
nealmcb 02/02
8

Com o "xdotool", você pode interagir facilmente com o Windows usando eventos de teclado ou mouse.

Exemplo de envio de uma CtrlCsequência para a janela ativa:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Se você realmente precisa da posição da janela:

eval $(xdotool getmouselocation --shell); echo $X $Y

Para mais ações / opções, verifique a página do manual .

João Pinto
fonte
Interessante, mas eu entendo Error: Invalid key sequence 'ctrl-c'.
L0b0