¿Cómo configurar el tamaño de la ventana y la ubicación de una aplicación en la pantalla a través de la línea de comandos?

33

Quiero que la ventana de Firefox se abra en un tamaño específico y la ubicación en pantalla usando un comando de shell, por ejemplo:

firefox myfile.html size 800x600 location bottom-left

¿Hay tal comando?

alwbtc
fuente
Me las arreglé para hacer esto (con la ayuda de este foro), aunque si encuentra alguna otra solución, dígame ya que probablemente será más robusto: unix.stackexchange.com/questions/40209/…
Emanuel Berg

Respuestas:

20

Aquí hay una versión comunitaria de la respuesta de Yokai que incorpora ejemplos ofrecidos por Rudolf Olah .


Puede usar la herramienta llamada xdotoolpara controlar el tamaño y la ubicación de la ventana. No solo eso, cualquier script que escriba bash, que se use xdotool, se puede configurar para que funcione con una ventana totalmente maximizada y se puede programar para establecer el tamaño de la ventana y las coordenadas x: y manipulando los comandos mousemovey click.

  1. Encuentra la ID de la ventana:

    xdotool search --onlyvisible --name firefox
  2. Establecer el tamaño de la ventana

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Mover la ventana

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Por ejemplo, si la identificación de la ventana para Firefox es 123, haría esto:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

El posicionamiento de la parte inferior izquierda deberá calcularse según la resolución de su pantalla.

roaima
fuente
1
Hay un error con xdotool, wmctrletc. y Ubuntu, XFCE (que tengo): si la ventana ya se ha lanzado en modo de pantalla completa, ya no puede moverla: bugs.launchpad.net/ubuntu/+source/unity/ + error / 971147
ThePhi
19

Hasta donde sé, esto no es posible ya que Firefox no acepta comandos para controlar la ventana. Esa es también (principalmente) la responsabilidad del administrador de ventanas, por lo que dudo que alguna vez haya parámetros para hacerlo. Sin embargo, puede controlar la ventana con wmctrl , pero eso será un poco 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

Puede haber formas más inteligentes de hacerlo, y hay algunos problemas de interoperabilidad con Firefox (por ejemplo, que no se está ejecutando ninguna otra instancia), pero debería ayudarlo a continuar.

Poli
fuente
1
Solo una pequeña nota. El cambio de tamaño no funcionará si la ventana está maximizada. Por lo tanto, primero debe desactivar esta propiedad con: wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b eliminar, maximized_horz; Después de eso pude cambiar el tamaño de la ventana de Firefox.
ka3ak
3

En el pasado, creé un documento HTML que establecería el tamaño de la ventana con Javascript y luego redirigiría a la página que quería. Es un truco estúpido pero, bueno, funciona.

bahamat
fuente
Parece que esto ya no funciona. Aparentemente, window.resizeTo solo tiene un efecto si la ventana es una ventana emergente creada a través de window.open.
hugomg
2

No creo que esto sea posible solo mediante comandos de shell, porque no tiene nada que ver con su administrador de ventanas.
Escuché de wmctrl y devilspie que pueden afectar esto. Pero dudo que haya una manera de lograrlo tan simple como escribió en su ejemplo.

32bitfloat
fuente
1

Hago esto todo el tiempo. Sin embargo, uso DevilsPie2 porque es más robusto. Utiliza el lenguaje de script LUA, que no es muy difícil.

Aquí está mi script lua para Thunderbird, que quiero abrir en el monitor izquierdo (pantalla de la computadora portátil) cuando se abre:

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 esto, crea un directorio en su configuración de inicio (en distribuciones similares a Ubuntu) llamado devilspie2, por ejemplo /home/$USERNAME/.config/devilspie2

Para Thunderbird, creé thunderbird.lua, aunque el nombre de archivo no importa. Tengo un nombre de archivo diferente para cada aplicación, aunque puede poner todo en un archivo de script si lo desea. Configure devilspie2 para que se inicie automáticamente cuando inicie sesión, por ejemplo /home/$USERNAME/.config/autostart/devilspie2.desktop

Aquí hay un enlace a una buena página sobre varias opciones disponibles para su script lua: https://github.com/gusnan/devilspie2/blob/master/README

Una nota: los scripts no tienen que ser ejecutables. Los míos son 664 y funcionan bien. Algunos de los otros programas que controlo son openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload, y yad. Utilizo pin_window en ellos para que aparezcan en todos los escritorios, además de otros comandos dependiendo de la aplicación.

Karl Pearson
fuente
No parece funcionar con LXDE. Absolutamente no se reconoce ningún evento de ventana (no se imprime nada cuando se ejecuta devilspie2 --debug)
John Smith Opcional
0

Esto no resuelve el problema de la posición, pero al menos puede establecer dimensiones:

firefox -width 200 -height 500
sebpiq
fuente