Obter tamanho da janela no shell

18

Gostaria de obter o tamanho da janela atual de um script de shell ...

Realmente não há muito mais a dizer ... Eu preferiria usar wmctrl.

drnessie
fonte

Respostas:

23
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 grepe cutcom 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).

Oli
fonte
Eu vou usar isso!
Allan
1
Adoro a maneira como o computador é chamado bert :)
drnessie
5

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"
Peter.O
fonte
2

Use xpropou xwininfo. Ambos vêm por padrão, não é necessária instalação

Exemplos de uso:

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

Outras postagens onde estas foram usadas

Em particular, ele xwininfotem sido usado ativamente por scripts, como nestas perguntas do AskUbuntu:

Sergiy Kolodyazhnyy
fonte
Ele é comum, adicione um exemplo;)
AB
Adicionados depois de um ano;) Mas mais tarde do que nunca, certo?
Sergiy Kolodyazhnyy
0

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.

psusi
fonte
2
Certamente, um script de shell poderia, de alguma forma, consultar a geometria dos clientes X? Senão, como os aplicativos X seriam gravados?
24511 djeikyb
@djeikyb eles são escritos para serem clientes X e se comunicar com o servidor X. Shell scripts executados em um shell, que pode ou não pode ser executado em um ambiente que ainda tem um servidor X, e não deve se preocupar com X.
psusi
2
Compreensivelmente, sim. Mas existem soluções alternativas! Usando o wmctrl, um pacote do repositório, você pode mover, redimensionar, minimizar e até alterar o espaço de trabalho!
26411 drnessie
Pela lógica da @ psusi, os ambientes de desktop não deveriam existir. Afinal, eles são apenas um enormes conjuntos de scripts que interagem com o software escrito para X.
andyn
0

Eu achei tput colsque funcionava muito bem!

Milo Banks
fonte
2
Obrigado pela sua contribuição. Sugiro melhorar sua resposta: explique o que ele faz, altere o comando para obter a contagem de linhas também. Talvez mostre como usar os resultados em um script de shell. - Veja as respostas mais votadas como exemplos.
guntbert
Inferindo as menções ao OP wmctrl, não estamos falando de console, mas de janelas do ambiente gráfico.
andyn
0

Tem 3 telas, esta saída 3 linhas com as dimensões:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
NVRM
fonte