Sobre wmctrl
Con wmctrl
(no instalado de forma predeterminada), podemos obtener información sobre ventanas, su identificación, su geometría, el pid al que pertenecen, etc. También podemos mover o cambiar el tamaño de las ventanas con varios comandos. Sin embargo, en algunos aspectos, su comportamiento no parece lógico. Mi pregunta es sobre mover ventanas por wmctrl
:
Consiguiendo información
Cuando ejecuto el comando:
wmctrl -lG
Recibo (ao) la siguiente información sobre la ventana en las imágenes a continuación:
0x04200085 0 746 443 468 205 jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
En la columna 3-5, la información de geometría nos dice las coordenadas x / y el ancho / alto.
Mover / redimensionar la ventana
Cuando pongo estas coordenadas en el wmctrl
comando para mover / cambiar el tamaño de una ventana, no debería hacer nada, ya que las coordenadas no cambian:
wmctrl -ir 0x04200085 -e 0,746,443,468,205
Desviación
Sin embargo, las imágenes a continuación muestran que la ventana se mueve hacia abajo (28 píxeles para ser precisos). Supuse que la razón era que el comando de wmctrl
movimiento de la ventana se calculaba con el área de trabajo (pantalla menos la altura del panel), mientras que el wmctrl -lG
comando se calculaba con el tamaño total de la pantalla . Sin embargo, todavía 4px aún no se explican (el panel tiene 24px de altura).
Aunque la desviación se puede compensar muy bien en guiones, el hecho de que no entiendo la causa no es satisfactorio, por lo que la pregunta es:
¿Cuál es exactamente la causa de esta desviación?
Mover una ventana con las coordenadas exactas en la salida de wmctrl -lG
no debe mover la ventana, pero sí
fuente
Respuestas:
Lo que sucede es que wmctrl está devolviendo la geometría de la ventana dentro de las decoraciones (es decir, sin incluir la barra de título y los bordes) pero está utilizando la posición de ventana más grande para el movimiento.
(Se eliminaron algunas líneas de salida de comando:
xdotool
podría no estar instalado)El siguiente comando solicita la ventana de interés y devuelve la ventana principal que incluye todas las decoraciones y varía según el tema de la ventana en uso.
Como puede ver, es una ventana diferente; la posición X comienza 2px a la izquierda (702-2) y el ancho total es mayor en 4px (900 + 2 + 2) porque el borde derecho también es 2px. Y es más alto (sobre el borde superior, si lo hay, y la barra de título); la altura es mayor debido a todo eso más el borde inferior.
wmctrl mueve la ventana principal a la posición deseada [X, Y] de la ventana secundaria; ancho y alto se aplican correctamente al niño, como se muestra en el "antes y después" a continuación.
Editar: información adicional.
Geometría de escritorio, ventana gráfica y área de trabajo
https://github.com/jordansissel/xdotool
Re: @Sneetsher consejo en comentarios
fuente
xdotool selectwindow
es25166060
, pero ¿cuál es el paso para llegar0x18000ec
? Intenté la conversión de hexadecimal, pero parece que no es así.xdotool getwindowgeometry 0x18000ec
devuelve el ID de la ventana decimal de 25166060 (padre). Acabo de ingresar el valor hexadecimal de 0x18000ec para mostrar que no era 0x04000040 (el niño). Por cierto, acabo de volver a ejecutar toda la prueba con números más fáciles con la esperanza de que no estuvieras mirando. Vea la revisión de edición anterior si estaba en medio de algo.xprop
parece mostrar relleno de decoración:_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 1, 1, 24, 6
y_NET_FRAME_EXTENTS(CARDINAL) = 1, 1, 24, 6
. Puede ser útil verificar.xdotool selectwindow
comando se comporte de manera diferente en KDE y Unity? El resultado delxdotool selectwindow
comando se refiere exactamente a la misma ventana (-id) y (por lo tanto)xdotool getwindowgeometry
genera los mismos datos quewmctrl -lG
. Sinxprop
embargo, el comando, como lo sugiere @Sneetsher muestra_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 28, 0
, que es exactamente lo que medí manualmente, y demuestra que la esencia de su respuesta es correcta, y es la respuesta perfecta a mi pregunta. Estoy impresionado por su minuciosidad. ¡Gracias!Tuve el mismo problema y pude encontrar una solución.
Situación
Mi situación se basa en Mate 16.04 con Compiz instalado (que activa el administrador de ventanas gtk)
Estoy usando un script conectado a combinaciones de teclas para colocar ventanas en lugares predefinidos. Este script falla si no estoy usando la opción maximizada.
Análisis
El problema podría activarse y desactivarse activando y desactivando las decoraciones de las ventanas en la configuración (compiz).
Solución alterna
Las decoraciones de la ventana se pueden activar y desactivar usando Python para una ventana específica (usando las combinaciones de teclas es conveniente usar la ventana activa).
Luego puede desactivar las decoraciones de ventanas, mover la ventana y activar las decoraciones de ventanas.
fuente