Risposte:
wmctrl -lG
Ti darà qualcosa come:
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 questo puoi grep
e cut
scendere su questi in modo da rimanere con i valori della geometria (colonne 3-6).
Per citare la pagina man in modo da capire esattamente quali sono le colonne:
-l
Elencare le finestre gestite dal gestore delle finestre. Viene generata una riga per ogni finestra, con la linea suddivisa in colonne separate da spazio. La prima colonna contiene sempre l'identità della finestra come numero intero esadecimale e la seconda colonna contiene sempre il numero del desktop (un -1 viene utilizzato per identificare una finestra adesiva). Se viene specificata l'opzione -p, la colonna successiva conterrà il PID per la finestra come numero intero decimale. Se viene specificata l'opzione -G , seguiranno quattro colonne intere: offset x, offset y, larghezza e altezza. La colonna successiva contiene sempre il nome del computer client. Il resto della riga contiene il titolo della finestra (possibilmente con più spazi nel titolo).
Credo che wmctrl non abbia alcuna opzione per trovare direttamente l'ID della finestra attiva .
Se qualcuno sa come farlo, mi interessa sapere ..
Detto questo, ecco un paio di script che stampano le dimensioni della finestra attiva.
Questo è: wmctrl + xdotool ... (non usando 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
Questo è: xwininfo + xdotool + sed
xwininfo
è parte di 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"
Usa xprop
o xwininfo
. Entrambi vengono per impostazione predefinita, non è necessaria l'installazione
Entrambi i comandi trasformano il cursore in quadrato / croce per consentire la selezione di una finestra particolare.
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
In alternativa, si può specificare la finestra sulla riga di comando in 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
In particolare, xwininfo
è stato attivamente utilizzato da me per gli script, come in queste domande di AskUbuntu:
Gli script di Shell non conoscono o si preoccupano di Windows. Nella migliore delle ipotesi funzionano in un terminale (che può o non può essere visualizzato in una finestra). Se si desidera ottenere la larghezza e l'altezza del terminale in caratteri, utilizzare l'utilità stty.
Ho scoperto tput cols
di funzionare abbastanza bene!
wmctrl
, non stiamo parlando di console ma di finestre di ambiente grafico.