Como definir o tamanho da janela e o local de um aplicativo na tela via linha de comando?

33

Quero que a janela do Firefox seja aberta em um tamanho específico e local na tela usando um comando shell, por exemplo:

firefox myfile.html size 800x600 location bottom-left

Existe esse comando?

alwbtc
fonte
Eu consegui fazer isso (com a ajuda deste fórum), embora, se você encontrar outra solução, diga-me, pois provavelmente será mais robusta: unix.stackexchange.com/questions/40209/…
Emanuel Berg

Respostas:

20

Aqui está uma versão comunitária da resposta de Yokai que incorpora exemplos oferecidos por Rudolf Olah .


Você pode usar a ferramenta chamada xdotoolpara controlar o tamanho e a localização da janela. Não só isso, qualquer script que você escrever em bash, usando xdotool, pode ser configurado para trabalhar com uma janela totalmente maximizada e pode ser programado para definir o tamanho da janela e x: y coordenadas através da manipulação do mousemovee clickcomandos.

  1. Encontre o ID da janela:

    xdotool search --onlyvisible --name firefox
  2. Defina o tamanho da janela

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Mover a janela

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Por exemplo, se o ID da janela do Firefox for 123, você faria o seguinte:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

O posicionamento inferior esquerdo terá que ser calculado com base na resolução da tela.

roaima
fonte
11
Há um erro com xdotool, wmctrletc. e Ubuntu, XFCE (que eu tenho): se a janela já foi iniciada no modo de tela cheia, você não pode mais movê-lo: bugs.launchpad.net/ubuntu/+source/unity/ + bug / 971147
ThePhi
19

Até onde eu sei, isso não é possível, pois o Firefox não aceita comandos para controlar a janela. Essa também é (principalmente) a responsabilidade do gerenciador de janelas, então duvido que existam parâmetros para fazer isso. No entanto, você pode controlar a janela com wmctrl , mas isso será um pouco difícil:

#!/bin/sh

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

Pode haver maneiras mais inteligentes de fazer isso, e há alguns problemas de interoperabilidade com o Firefox (por exemplo, que nenhuma outra instância está em execução), mas isso deve ajudá-lo.

Bobby
fonte
11
Apenas uma pequena nota. O redimensionamento não funcionará se a janela estiver maximizada. Portanto, você deve desativar esta propriedade primeiro com: wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b remove, maximized_horz; Depois disso, pude redimensionar a janela do Firefox.
Ka3ak # 30/18
3

No passado, eu criei um documento HTML que definiria o tamanho da janela com Javascript e depois redirecionaria para a página que eu queria. É um truque estúpido, mas, ei, funciona.

bahamat
fonte
Parece que isso não funciona mais. Aparentemente, window.resizeTo só tem efeito se a janela for um pop-up criado via window.open.
Hugomg
2

Eu não acho que isso seja possível apenas pelos comandos do shell, porque não tem nada a ver com o seu gerenciador de janelas.
Ouvi falar de wmctrl e devilspie, o que pode afetar isso. Mas duvido que exista uma maneira de conseguir isso tão simples quanto você escreveu em seu exemplo.

32bitfloat
fonte
1

Eu faço isso toda hora. Eu uso DevilsPie2, no entanto, porque é mais robusto. Ele usa a linguagem de script LUA, o que não é muito difícil.

Aqui está o meu script lua para o Thunderbird, que eu quero abrir no monitor esquerdo (tela do laptop) quando for aberto:

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

Para configurar isso, você cria um diretório em sua configuração inicial (em distribuições do tipo Ubuntu) chamado devilspie2, por exemplo, /home/$USERNAME/.config/devilspie2

Para o Thunderbird, criei thunderbird.lua, embora o nome do arquivo não importe. Eu tenho um nome de arquivo diferente para cada aplicativo, mas você pode colocar tudo em um arquivo de script, se desejar. Defina devilspie2 para iniciar automaticamente quando você fizer login, por exemplo, /home/$USERNAME/.config/autostart/devilspie2.desktop

Aqui está um link para uma boa página sobre várias opções disponíveis para o seu script lua: https://github.com/gusnan/devilspie2/blob/master/README

Uma observação: os scripts não precisam ser executáveis. Os meus são 664 e funcionam bem. Alguns dos outros programas que eu controle são openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload e yad. Eu uso pin_window nelas para que elas apareçam em todas as áreas de trabalho, além de outros comandos, dependendo do aplicativo.

Karl Pearson
fonte
Não parece funcionar com o LXDE. Absolutamente nenhum evento de janela é reconhecido (nada é impresso durante a execução devilspie2 --debug)
John Smith Opcional
0

Isso não resolve o problema da posição, mas pelo menos você pode definir dimensões:

firefox -width 200 -height 500
sebpiq
fonte