Odpowiedzi:
wmctrl -lG
Daje ci coś takiego:
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: ~
Dzięki temu możesz grep
i w cut
dół na nich, aby pozostać z wartościami geometrii (kolumny 3-6).
Aby zacytować stronę podręcznika, aby dokładnie zrozumieć, jakie są kolumny:
-l
Wyświetl listę okien zarządzanych przez menedżera okien. Dla każdego okna wyprowadzany jest jeden wiersz, z podziałem wiersza na kolumny oddzielone spacjami. Pierwsza kolumna zawsze zawiera tożsamość okna jako liczbę szesnastkową, a druga kolumna zawsze zawiera numer pulpitu (-1 służy do identyfikacji lepkiego okna). Jeśli podano opcję -p, następna kolumna będzie zawierać PID dla okna jako liczbę całkowitą dziesiętną. Jeśli podano opcję -G, wówczas pojawią się cztery kolumny liczb całkowitych: przesunięcie x, przesunięcie y, szerokość i wysokość. Następna kolumna zawsze zawiera nazwę komputera klienckiego. Pozostała część wiersza zawiera tytuł okna (prawdopodobnie z wieloma spacjami w tytule).
Wierzę, że wmctrl nie ma żadnej opcji bezpośredniego znalezienia identyfikatora aktywnego okna.
Jeśli ktoś wie, jak to zrobić, chciałbym wiedzieć.
Powiedziawszy to, oto kilka skryptów, które wypisują rozmiar aktywnego okna.
To jest: wmctrl + xdotool ... (nie używa 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
To jest: xwininfo + xdotool + sed
xwininfo
jest częścią 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"
Użyj xprop
lub xwininfo
. Oba są dostarczane domyślnie, instalacja nie jest wymagana
Oba polecenia zamieniają kursor w kwadrat / krzyż, aby umożliwić wybranie określonego okna.
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
Alternatywnie można określić okno w wierszu poleceń w formie 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
W szczególności, xwininfo
był aktywnie wykorzystywany przeze mnie do skrypty, takie jak w tych pytaniach AskUbuntu:
Skrypty powłoki nie znają okien ani nie dbają o nie. W najlepszym wypadku działają one w terminalu (który może, ale nie musi być wyświetlany w oknie). Jeśli chcesz uzyskać szerokość i wysokość terminala w znakach, użyj narzędzia stty.
Uważam, że tput cols
działa całkiem nieźle!
wmctrl
, nie mówimy o oknach konsoli, ale graficznych środowiskach.