¿Cómo obtener información precisa de ventana (dimensiones, etc.) en Linux (X)?

22

¿Cómo puedo obtener información precisa de ventanas en Linux? Sé que puedo usar wmctrl para obtener el tamaño de una ventana, pero el tamaño real de la ventana puede variar debido a las decoraciones de la ventana. Necesito la siguiente información y métodos:

* precise window dimensions
* precise available screen space (excluding panels like gnome-panel)
* the ability to set a window to be a certain size, including decorations

Cuál sería la mejor forma de hacer esto?

¡Gracias por adelantado!

Mellort
fuente
Si está interesado más en el lado de Python, podemos migrar esto a nuestro sitio hermano sobre programación, StackOverflow.com. Solo avísanos.
Gnoupi
@Gnoupi: gracias, pero en realidad es una publicación cruzada de SO, ya que un usuario sugirió que podría obtener una mejor respuesta aquí. La pregunta original está en stackoverflow.com/questions/3233660/… .
mellort
OK veo. En este caso, creo que la parte de Python de tu pregunta se puede editar. Las respuestas en SU ​​probablemente usarán otros comandos, no la programación. La pregunta sobre SO probablemente debería centrarse en preguntar cómo hacerlo en python.
Gnoupi
Obtenga la dimensión de la ventana con decoraciones: unix.stackexchange.com/questions/14159/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

26

Hay algunos programas de línea de comandos que pueden ayudar:

  • xwininfo: Obtiene el tamaño de la ventana excluyendo la decoración y la posición absoluta (a la pantalla) y relativa (al área de las ventanas)
  • xdpyinfo: Esto proporciona mucha más información acerca de su dispositivo de pantalla de la que desea saber. Pero tiene algo en la salida como algo screen: #0seguido por dimension: 1024x768.
Antwortgenossenschaft
fuente
¿Hay alguna forma de obtener información, incluida la decoración?
Victor
6

> dimensiones precisas de la ventana

El siguiente ejemplo (funcionará al menos en sh, bash y zsh) imprimirá la geometría de la ventana con y sin marco para todas las ventanas con "KWrite" en algún lugar del título.

windows="$(wmiface findNormalWindows "KWrite" "" "" "" "" "")"
for window in $(echo $windows); do
{
  echo $window
  wmiface framePosition $window
  wmiface frameSize $window
  wmiface windowPosition $window
  wmiface windowSize $window
  echo
} done

> espacio de pantalla disponible preciso (excluyendo paneles como gnome-panel)

xrandr

Por ejemplo:

xrandr | head -n1 | cut -d, -f2 | cut -d" " -f3-5

Salida en mi caso:

4400 x 2560

No estoy seguro de cómo excluir paneles: si tiene más de un monitor, pueden estar incluso en medio de la pantalla virtual, por lo que la geometría de la pantalla sin paneles puede ser más complicada que el "espacio de pantalla disponible".

> la capacidad de establecer una ventana de cierto tamaño, incluidas las decoraciones

wmiface setFrameGeometry $window $x $y $width $height

Lea wmiface README para obtener más comandos posibles.

Lissanro Rayen
fuente
2
wmiface no está empaquetado con todas las distribuciones (¿alguna?). Pude instalar en Mint usando el paquete ubuntu desde aquí: kde-apps.org/content/show.php?content=40425 El archivo README mencionado se puede encontrar aquí: gitorious.org/wmiface/wmiface/source/…
slinkp
Consulte la segunda parte de este comentario unix.stackexchange.com/a/156349/84607 para obtener otra forma de obtener geometría completa, incluidas las decoraciones, utilizando una combinación de xwininfo, xdotool y xprop.
slinkp