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.

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

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


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.


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-

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.