Respostas:
wmctrl -lG
Vai lhe dar algo como:
oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330 170 bert N/A
0x01200023 -1 0 0 3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24 bert Bottom Expanded Edge Panel
0x01000028 -1 0 2352 1920 24 bert Bottom Expanded Edge Panel
0x0500003e 0 676 252 1404 1015 bert Chromium
0x02e00021 0 3860 160 1361 1084 bert Liferea
0x02000047 0 6650 940 506 683 bert Social broadcast messages
0x04600004 0 4546 460 1263 833 bert oli@bert: ~
Com isso, você pode grep
e cut
com base neles para ficar com os valores geométricos (colunas 3-6).
Para citar a página de manual para entender exatamente o que são as colunas:
-eu
Liste as janelas que estão sendo gerenciadas pelo gerenciador de janelas. Uma linha é emitida para cada janela, com a linha dividida em colunas separadas por espaço. A primeira coluna sempre contém a identidade da janela como um número inteiro hexadecimal e a segunda coluna sempre contém o número da área de trabalho (um -1 é usado para identificar uma janela adesiva). Se a opção -p for especificada, a próxima coluna conterá o PID da janela como um número inteiro decimal. Se a opção -G for especificada , seguirão quatro colunas inteiras: deslocamento x, deslocamento y, largura e altura. A próxima coluna sempre contém o nome da máquina do cliente. O restante da linha contém o título da janela (possivelmente com vários espaços no título).
Eu acredito que o wmctrl não tem nenhuma opção para encontrar o ID da janela ativa diretamente.
Se alguém sabe como fazê-lo, estou interessado em saber ..
Dito isto, aqui estão alguns scripts que imprimem o tamanho da janela ativa.
Isto é: wmctrl + xdotool ... (não usando sed).
id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done
Isto é: xwininfo + xdotool + sed
xwininfo
é parte de x11-utils
set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
-e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"
Use xprop
ou xwininfo
. Ambos vêm por padrão, não é necessária instalação
Ambos os comandos transformam o cursor em quadrado / cruz para permitir a seleção de uma janela específica.
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
Como alternativa, pode-se especificar a janela na linha de comando no formato XID
$ xprop _NET_WM_OPAQUE_REGION -id 83886090
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
Em particular, ele xwininfo
tem sido usado ativamente por scripts, como nestas perguntas do AskUbuntu:
Os scripts de shell não conhecem nem se preocupam com o Windows. Na melhor das hipóteses, eles funcionam em um terminal (que pode ou não ser exibido em uma janela). Se você deseja obter a largura e a altura do terminal em caracteres, use o utilitário stty.
Eu achei tput cols
que funcionava muito bem!
wmctrl
, não estamos falando de console, mas de janelas do ambiente gráfico.