Centraliza uma janela via linha de comando

15

Existe uma maneira de colocar uma janela no centro da tela depois que ela é aberta ou fazer com que ela se abra no centro da tela?

Isso precisa ser feito usando a linha de comando.

    
por EpsilonVector 14.02.2012 / 17:05

4 respostas

26
A ferramenta

wmctrl fornece acesso de linha de comando a quase todos os recursos definidos na Especificação EWMH (Dicas para Gerenciador de Janela Estendida) . Pode ser usado, por exemplo, para obter informações sobre o gerenciador de janelas, para obter uma lista detalhada de desktops e janelas gerenciadas, para alternar e redimensionar em tela cheia , sempre acima ou fixas e para ativar , < strong> fechar , mover , redimensionar , maximizar e minimizar eles.

Você pode instalá-lo por

sudo apt-get install wmctrl
  

Você pode obter informações sobre seus desktops virtuais (espaços de trabalho) com wmctrl -d

one@onezero:~$ wmctrl -d
0  * DG: 2720x1536  VP: 0,0  WA: 0,24 1360x744  N/A

E liste as janelas abertas com wmctrl -l . A opção -G mostra a geometria das janelas:

one@onezero:~$ wmctrl -l
0x02000004  0 onezero Desktop
0x02e00002  0     N/A DNDCollectionWindow
0x02e00003  0     N/A launcher
0x01e00004  0 onezero cairo-dock
0x02e00004  0     N/A panel
0x04800061  0 onezero Transmission
0x02e0000a  0     N/A Dash
0x03a00044  0 onezero arranging windows from the gnu/linux command line with wmctrl ~ Moving to Freedom - Chromium
0x04400006  0 onezero one@onezero: ~
0x04c000e9  0 onezero Google - Mozilla Firefox
  

wmctrl -lG

one@onezero:~$ wmctrl -lG
0x02000004  0 0    0    1360 768  onezero Desktop
0x02e00002  0 -1460 -868 1360 768      N/A DNDCollectionWindow
0x02e00003  0 0    24   58   744      N/A launcher
0x01e00004  0 290  653  780  115  onezero cairo-dock
0x02e00004  0 0    0    1360 24       N/A panel
0x04800061  0 408  95   732  500  onezero Transmission
0x02e0000a  0 -1402 -844 1302 744      N/A Dash
0x03a00044  0 0    24   1360 744  onezero Center a window via command line - Ask Ubuntu - Stack Exchange - Chromium
0x04400006  0 127  94   983  434  onezero one@onezero: ~
0x04c000e9  0 5    47   1349 715  onezero Google - Mozilla Firefox

Você pode especificar uma janela referenciando seu título ou título parcial após -r. -e é para mover e redimensionar

wmctrl -r "Mozilla Firefox" -e <G>,<X>,<Y>,<W>,<H>

<G>: Gravity specified as a number. The numbers are defined in the EWMH specification. The value of zero is particularly
     useful, it means "use the default gravity of the window".
<X>,<Y>: Coordinates of new position of the window.
<W>,<H>: New width and height of the window.

Então, para mover uma janela para o canto superior esquerdo e torná-la com 1.000 pixels de largura por 700 de altura, use 0,0,0,1000,700

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700

Para mover / redimensionar. Para isso, usei a solução alternativa "unmaximizing" primeiro, usando a opção -b

wmctrl -r "Mozilla Firefox" -b add, maximized_vert, maximized_horz

wmctrl -r "Mozilla Firefox" -b remove, maximized_vert, maximized_horz

one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz

As coisas que você precisa entender primeiro

The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

essa é a minha resolução de tela, então x = 1360 & amp; y = 786

Alinhando uma janela à metade esquerda da tela

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768

Alinhando uma janela à metade direita da tela

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768

Alinhando uma janela para center of screen 1360/4 = 340

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768

Manipule-o a partir das suas configurações de tela

Para obter mais ajuda 1 2 3 4

    
por One Zero 14.02.2012 / 19:32
5

que funciona com a janela ativa no momento

IFS='x' read screenWidth screenHeight < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)

width=$(xdotool getactivewindow getwindowgeometry --shell | head -4 | tail -1 | sed 's/[^0-9]*//')
height=$(xdotool getactivewindow getwindowgeometry --shell | head -5 | tail -1 | sed 's/[^0-9]*//')

newPosX=$((screenWidth/2-width/2))
newPosY=$((screenHeight/2-height/2))

xdotool getactivewindow windowmove "$newPosX" "$newPosY"
    
por A.B. 09.01.2015 / 15:21
3

Se alguém quiser que um snippet de código copie / cole para fazer isso, aqui está uma:

winname='foo'
IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
read wx wy ww wh < <(wmctrl -lG | grep $winname | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
wmctrl -r $winname -e 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh

Substitua foo pelo nome da janela que você deseja centralizar na primeira linha, é claro.

Explicação (detalhamento na forma de uma sessão de console de exemplo):

Obtendo as dimensões da tela

llama@llama:~$ xdpyinfo | grep dimensions
  dimensions:    1920x1080 pixels (508x285 millimeters)
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*'
1920x1080
x
508x285
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1
1920x1080
llama@llama:~$ IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
llama@llama:~$ echo $sw $sh
1920 1080

Obtendo as informações de geometria da janela

llama@llama:~$ wmctrl -lG | grep foo
0x00a0000c  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]*//;'
  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]*//;'
 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;'
1143 505  722  475  
llama@llama:~$ read wx wy ww wh < <(wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
llama@llama:~$ echo $wx $wy $ww $wh
1143 505 722 475

Movendo a janela

llama@llama:~$ echo 0,foo,bar,$ww,$wh
0,foo,bar,722,475
llama@llama:~$ echo 0,$(($sw/2)),bar,$ww,$wh                                    
0,960,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),bar,$ww,$wh
0,599,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
0,599,303,722,475
    
por Doorknob 07.01.2015 / 04:44
0

A maioria dos aplicativos deve respeitar o parâmetro --geometry ao inicializar (alguns preferem -geometry, tente o segundo se o primeiro não funcionar para você):

gnome-terminal --geometry 80x25+100+100

O parâmetro geometry tem este formulário:

WIDTHxHEIGHT+XOFF+YOFF

Você pode deixar as partes desnecessárias:

gnome-terminal --geometry +20+50 #No size, just offsets

Para mais detalhes:

man X

pressione "/" e procure por ESPECIFICAÇÕES DE GEOMETRIA

ou veja aqui: link

    
por roadmr 14.02.2012 / 18:34