Existe uma maneira de colocar uma janela no centro da tela depois de aberta ou fazer com que ela se abra no centro da tela?
Isso precisa ser feito usando a linha de comando.
Existe uma maneira de colocar uma janela no centro da tela depois de aberta ou fazer com que ela se abra no centro da tela?
Isso precisa ser feito usando a linha de comando.
Respostas:
A ferramenta wmctrl fornece acesso à linha de comandos para quase todos os recursos definidos na especificação EWMH (Extended Window Manager Hints) . Ele pode ser usado, por exemplo, para obter informações sobre o gerenciador de janelas, para obter uma lista detalhada de áreas de trabalho e janelas gerenciadas, para alternar e redimensionar áreas de trabalho, para tornar as janelas em tela cheia , sempre acima ou adesivas , e para ativar , feche , mova , redimensione , maximize e minimize- os.
Você pode instalá-lo
sudo apt-get install wmctrl
Você pode obter informações sobre seus desktops virtuais (áreas de trabalho) com
wmctrl -d
one@onezero:~$ wmctrl -d
0 * DG: 2720x1536 VP: 0,0 WA: 0,24 1360x744 N/A
E liste janelas abertas com wmctrl -l
. A -G
opção 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.
Portanto, para mover uma janela para o canto superior esquerdo e torná-la com 1000 pixels de largura por 700 de altura, você usaria 0,0,0,1000,700
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700
Para movê-lo / redimensioná-lo. Para isso, usei a solução alternativa de “desmaximizar” primeiro, usando a -b
opção
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
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"
essa é a minha resolução da tela, então x = 1360 & 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 a center of screen
1360/4 = 340
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768
Manipule-o a partir das configurações da tela
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"
xdotool
ação chamar primeiro, para torná-las "normais" antes de chamar windowmove
. Ideias?
wmctrl
também a chamada , boas soluções. TL; DR: chamada wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz
antes da xdotool getactivewindow windowmove
chamada final .
Se alguém quiser que um snippet de código copie / cole para fazer isso, aqui está um:
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 (quebra 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
A maioria dos aplicativos deve respeitar o parâmetro --geometry ao iniciar (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 formato:
WIDTHxHEIGHT+XOFF+YOFF
Você pode deixar peças desnecessárias de fora:
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: http://www.cotse.com/dlf/man/xwindows/geometry.htm
bash
ouzsh
para executar, simplessh
não vai funcionar.