Respuestas:
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 grep
y cut
hacia 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).
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"
Use xprop
o xwininfo
. Ambos vienen por defecto, no es necesario instalar
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
En particular, xwininfo
ha sido utilizado activamente por mí para secuencias de comandos, como en estas preguntas de AskUbuntu:
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.
¡ tput cols
Funcioné bastante bien!
wmctrl
, no estamos hablando de la consola sino de las ventanas de entorno gráfico.