He estado tratando de calcular el tamaño de una ventana para usar en un script pequeño. Mi técnica actual está usando wmctrl -lG
para averiguar las dimensiones. Sin embargo, el problema es este:
Las figuras x e y que da son para la parte superior izquierda de las decoraciones de la ventana, mientras que la altura y el ancho son solo para el área de contenido. Esto significa que si las decoraciones de la ventana agregan 20 px de altura y 2 px de ancho, wmctrl informará que una ventana es 640x480, incluso si ocupa 660x482 en la pantalla. Esto es un problema porque el siguiente paso de mi script sería usar esa área para decirle a ffmpeg que grabe la pantalla. Me gustaría evitar la codificación en el tamaño de las decoraciones de las ventanas de mi configuración actual.
Lo que conviene es un método para obtener el tamaño de las decoraciones de la ventana para que pueda usarlas para determinar la posición del área de contenido 640x480, o una forma de obtener la posición del área de contenido directamente, no la de las decoraciones de la ventana .
fuente
Respuestas:
La siguiente secuencia de comandos le dará los códigos de pantalla de la esquina superior izquierda y el tamaño de la ventana (sin ninguna decoración). . . .
xwininfo -id $(xdotool getactivewindow)
contiene suficiente información para ti.fuente
xdotool getactivewindow
devuelve la identificación de la ventana del marco del administrador de ventanas (que incluye la decoración) en lugar de la ventana del cliente contenida en su interior.xdotool getactivewindow getwindowgeometry
La respuesta aceptada se puede extender para obtener toda la ventana:
Aunque es fácil, resulta que no funciona en Unity en Ubuntu 14.04 porque la información relativa es toda 0. Pregunté Obtener las dimensiones de la ventana completa (incluidas las decoraciones) en Unity y obtuve una buena respuesta. Así es como usé esa respuesta:
Este segundo método funciona tanto en Unity como en Xfce, y también debería funcionar en Gnome.
fuente
aw=`xdotool getactivewindow`
agregar la parte superior para evitar colgar en la llamada xwininfo. Es bueno saberlo porque estoy considerando cambiar a Unity, donde no puedo hacer que wmiface se ejecute sin segfaullar.aw
definición que falta . Editaré la respuesta ahora para agregar esa línea.h
. Parece que la barra de título ya está incluida en la altura desde la que regresaxwininfo
.Una forma mucho más simple de obtener el tamaño y la posición de la ventana:
fuente
La respuesta aceptada explícitamente no incluye la decoración de ventanas. Para aquellos que todavía buscan cómo obtener la geometría, incluidas todas las decoraciones, según el título de esta pregunta, pueden usar wmiface según esta otra pregunta https://superuser.com/questions/164047/how-to-get-accurate-window -información-dimensiones-etc-en-linux-x . Ejemplo:
Esto devuelve la geometría y la posición relativa a la parte superior izquierda de la siguiente manera:
wmiface no parece venir con todas las distribuciones de Linux (no encontré un paquete que lo proporcionara en Mint o Ubuntu) pero pude instalarlo desde los paquetes aquí: http://kde-apps.org/content/show .php? content = 40425
Y viene sin documentos ni siquiera
--help
, pero el archivo README está aquí:https://gitorious.org/wmiface/wmiface/source/ea941eeb2076124734f6a3d3079326c826b462d7:README
fuente
wmiface activeWindow
570x434 + 870 + 31 $ xdotool getwindowgeometryxdotool getactivewindow
Window 6291772 Posición: 878,77 (pantalla: 0) Geometría: 562x407Usando xdotool:
sleep 3s && xdotool getactivewindow
, tienes 3 segundos para abrir tu ventanaxdotool getwindowgeometry $WINDOW_ID
xdotool getwindowgeometry -shell $WINDOW_ID
fuente
Combinando respuestas en esta página, usé esto:
Ejecute el one-liner y luego, dentro de 3 segundos, haga clic en la ventana para la que desea la posición y la geometría.
fuente