Obtener el tamaño de la ventana en la carcasa


18

Me gustaría obtener el tamaño de la ventana actual de un script de shell ...

Realmente no hay mucho más que decir ... Preferiría usar wmctrl.

Respuestas:


23
wmctrl -lG

Te dará algo como:

oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330  170  bert N/A
0x01200023 -1 0    0    3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24   bert Bottom Expanded Edge Panel
0x01000028 -1 0    2352 1920 24   bert Bottom Expanded Edge Panel
0x0500003e  0 676  252  1404 1015 bert Chromium
0x02e00021  0 3860 160  1361 1084 bert Liferea
0x02000047  0 6650 940  506  683  bert Social broadcast messages
0x04600004  0 4546 460  1263 833  bert oli@bert: ~

Con esto puede grepy cuthacia abajo en estos para que quede con los valores de geometría (columnas 3-6).

Para citar la página de manual para que comprenda exactamente cuáles son las columnas:

-l

Enumere las ventanas que administra el administrador de ventanas. Se genera una línea para cada ventana, con la línea dividida en columnas separadas por espacios. La primera columna siempre contiene la identidad de la ventana como un entero hexadecimal, y la segunda columna siempre contiene el número de escritorio (se usa un -1 para identificar una ventana fija). Si se especifica la opción -p, la siguiente columna contendrá el PID de la ventana como un entero decimal. Si se especifica la opción -G, aparecerán cuatro columnas enteras: desplazamiento x, desplazamiento y, ancho y alto. La siguiente columna siempre contiene el nombre del equipo del cliente. El resto de la línea contiene el título de la ventana (posiblemente con múltiples espacios en el título).


¡Lo usaré!
Allan

1
Me encanta la forma en que su computadora se llama bert :)
drnessie

5

Creo que wmctrl no tiene ninguna opción para encontrar el Id de la ventana activa directamente.
Si alguien sabe cómo hacerlo, me interesa saberlo.
Dicho esto, aquí hay un par de scripts que imprimen el tamaño de la ventana activa.

Esto es: wmctrl + xdotool ... (sin usar sed).

id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done

Esto es: xwininfo + xdotool + sed

xwininfo es parte de x11-utils

set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
        -e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"

2

Use xpropo xwininfo. Ambos vienen por defecto, no es necesario instalar

Ejemplos de uso:

Ambos comandos convierten el cursor en cuadrado / cruz para permitir seleccionar una ventana en particular.

$ xprop _NET_WM_OPAQUE_REGION                                                          
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377


$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'                         
 984
 377

Alternativamente, uno puede especificar la ventana en la línea de comando en forma XID

$ xprop _NET_WM_OPAQUE_REGION -id 83886090                                             
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377

$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'            
 984
 377

Otras publicaciones donde se usaron

En particular, xwininfoha sido utilizado activamente por mí para secuencias de comandos, como en estas preguntas de AskUbuntu:


Él en común, agrega un ejemplo;)
AB

Los agregué después de un año;) Pero mejor más tarde que nunca, ¿verdad?
Sergiy Kolodyazhnyy

0

Los scripts de shell no conocen ni se preocupan por las ventanas. En el mejor de los casos, se ejecutan en una terminal (que puede mostrarse o no en una ventana). Si desea obtener el ancho y la altura del terminal en caracteres, use la utilidad stty.


2
¿Seguramente un script de shell podría de alguna manera consultar a los clientes X por su geometría? De lo contrario, ¿cómo se escribirían las aplicaciones X?
djeikyb

@djeikyb están escritos para ser clientes X y comunicarse con el servidor X. Shell scripts se ejecutan en una concha, que puede o no puede estar funcionando en un ambiente que tiene incluso un servidor X, y no deben preocuparse por X.
psusi

2
Comprensiblemente sí. ¡Pero hay soluciones alternativas! Usando wmctrl, un paquete del repositorio, puede mover, cambiar el tamaño, minimizar e incluso cambiar el espacio de trabajo.
drnessie

Según la lógica de @ psusi, los entornos de escritorio no deberían existir. Después de todo, son solo una gran colección de scripts que interactúan con el software escrito para X.
andyn

0

¡ tput colsFuncioné bastante bien!


2
Gracias por tu contribución. Sugiero mejorar su respuesta: explique lo que hace, modifique el comando para obtener el recuento de líneas también. Tal vez muestre cómo usar los resultados en un script de shell. - Vea las respuestas mejor calificadas como ejemplos.
guntbert

Inferiendo la mención de OP wmctrl, no estamos hablando de la consola sino de las ventanas de entorno gráfico.
andyn

0

Tiene 3 pantallas, esta salida 3 líneas con las dimensiones:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
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.