Obtém o tamanho da janela no shell

15

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

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

    
por drnessie 24.02.2011 / 15:16

5 respostas

20
wmctrl -lG

Irá dar-lhe 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 descer nestes para que você fique com os valores da geometria (colunas 3-6).

Para citar a página de manual , você entende exatamente quais são as colunas:

  

-l

     

Relacione as janelas gerenciadas pelo gerenciador de janelas. Uma linha é enviada 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 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 inteiro decimal. Se a opção -G for especificada , quatro colunas inteiras serão seguidas: 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).

    
por Oli 24.02.2011 / 15:34
4

Acredito que o wmctrl não tem nenhuma opção para encontrar o ID da janela ativo diretamente.
Se alguém souber como fazê-lo, estou interessado em saber ..
Dito isso, 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 faz parte de x11-utils

set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*//p" \
        -e "s/^ \+Height: \([0-9]\+\).*//p")
echo -n " "
    
por Peter.O 25.02.2011 / 01:57
2

Use xprop ou xwininfo . Ambos vêm por padrão, nenhuma instalação é necessária

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

Outros lugares em que foram usados

Em particular, xwininfo , tem sido usado ativamente por mim para scripts, como nessas questões do AskUbuntu:

por Sergiy Kolodyazhnyy 18.05.2015 / 06:47
0

Os scripts do shell não conhecem nem se importam com o Windows. Na melhor das hipóteses, eles correm 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.

    
por psusi 24.02.2011 / 15:46
0

Estou usando em meus scripts esta solução:

    $ stty size
    
por Antonio Feitosa 28.02.2017 / 23:01