Establecer las dimensiones de la ventana de una aplicación en ejecución

28

Estoy tratando de iniciar una aplicación dentro de Ubuntu (xfce o gnome) y a través de la línea de comandos y me preguntaba si hay una forma genérica de establecer las dimensiones de una ventana determinada de una aplicación determinada que se está ejecutando actualmente.

Jamie
fuente

Respuestas:

18

Esto es más fácil de hacer si instala algo como xdotool. Entonces puedes hacer:

xdotool search --name "window name" windowsize 300 400

reemplace "nombre de ventana" con un nombre o registro que aparece en el título de la ventana (también puede buscar por clase de ventana y una variedad de otras cosas), y los dos números que aparecen después del tamaño de ventana son el ancho y el alto, respectivamente. (También puede usar porcentajes, etc.) Ver man xdotooluna vez que esté instalado.

Sin embargo, si estás en Lucid o antes, te recomiendo ir al sitio web de xdotool para obtener una versión más nueva.

Para cambiar el tamaño de Firefox, por ejemplo:

xdotool search --name "Mozilla Firefox" windowsize 1024 768
precioso
fuente
3
¿Hay alguna manera de cambiar el tamaño de la ventana de pantalla completa sin decoraciones (barra de título)? ¿Y establecer la posición exacta en la pantalla (por ejemplo, x = 0, y = 0)? Estoy tratando de configurar esto para que mplayer maximizado vaya a 800x600 x = 0 y = 0 y luego, después de unos minutos, al mismo modo de pantalla completa. gracias
peter
15

Si el administrador de ventanas es compatible con Xlib, existe. Esto usa Python para establecer el tamaño de la ventana en 500x300:

WIDTH, HEIGHT = 500, 300
import Xlib
import Xlib.display

display = Xlib.display.Display()
root = display.screen().root
windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
window = display.create_resource_object('window', windowID)
window.configure(width = WIDTH, height = HEIGHT)
display.sync()

La parte difícil es obtener la ID de la ventana; en el código anterior obtuvo la ID de la ventana activa. Si desea otra ID, puede usar algo como esto para obtener el título y el PID de control de cada ventana, y elegir la ID correcta en función de eso:

windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
for windowID in windowIDs:
    window = display.create_resource_object('window', windowID)
    name = window.get_wm_name() # Title
    prop = window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType)
    pid = prop.value[0] # PID
Michael Mrozek
fuente
cuando print pidobtengo <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... alguna sugerencia para aislar el PID real?
Khaverim
Nvm. No parece ser posible, pero puedo hacer una solución a través de name.
Khaverim
1
@khaverim Hmm. Creo que esta API cambió desde la última vez que la escribí, que solía ser el PID. Actualicé la respuesta, desea tomar el valor devuelto por get_full_propertyy hacer .value[0]( valuees una matriz )
Michael Mrozek
1
python Xlib se puede instalar a través de: sudo apt-get install python-xlib (en Ubuntu)
Tom
4

Específico para XFCE hay pyxfce que le permitirá hacer eso usando el lenguaje python . Pyxfce es una API que, entre otras cosas, le permite comunicarse con el administrador de ventanas . Para usar esto desde la línea de comandos, primero deberá preparar un script.

Dependiendo de su uso, la importancia de usar una API basada en X usando ID de ventanas X (como python-xlib o xdotools mencionados en otra respuesta) frente a otros que usan cadenas que coinciden con títulos de ventanas (como wmctrl), es que no puede haber confusión entre ventanas, que pueden tener las mismas palabras clave en sus respectivos títulos.

Benjamín
fuente
3
#!/bin/bash
#get window pid under mouse
xprop -id $(xwit -current -print | cut -d ":" -f 1) | grep _NET_WM_PID | cut -d "=" -f2 | cut -c 2-
Wilton Lazary
fuente
0

Encontré que wmctrl me quedaba mejor. Está disponible como un paquete pequeño, para Ubuntu y para Raspbian, y probablemente también para otras distribuciones.

Karel Adams
fuente
Tenemos una respuesta que menciona wmctrl , pero no tenemos una respuesta que muestre cómo usarla; ¿podría ampliar su respuesta con una demostración, para que la gente pueda tomarla y adaptarla para su uso particular? ¡Gracias!
Jeff Schaller
Si hubiera tenido un ejemplo a mano, ciertamente lo había agregado. Aún así, ¿no es para eso que están las páginas de manual?
Karel Adams