Uzyskaj rozmiar okna w powłoce

18

Chciałbym uzyskać rozmiar bieżącego okna ze skryptu powłoki ...

Naprawdę niewiele więcej do powiedzenia ... Wolałbym użyć wmctrl.

drnessie
źródło

Odpowiedzi:

23
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 grepi w cutdół 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).

Oli
źródło
Użyję tego!
Allan
1
Uwielbiam sposób, w jaki komputer nazywa się bert :)
drnessie
5

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"
Peter.O
źródło
2

Użyj xproplub xwininfo. Oba są dostarczane domyślnie, instalacja nie jest wymagana

Przykłady użycia:

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

Inne posty, w których zostały użyte

W szczególności, xwininfobył aktywnie wykorzystywany przeze mnie do skrypty, takie jak w tych pytaniach AskUbuntu:

Sergiy Kolodyazhnyy
źródło
On pospolity, dodaj przykład;)
AB
Dodałem je po roku;) Ale lepiej później niż nigdy, prawda?
Sergiy Kolodyazhnyy 15.07.16
0

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.

psusi
źródło
2
Z pewnością skrypt powłoki mógłby w jakiś sposób zapytać klientów X o ich geometrię? W przeciwnym razie, jak mają być napisane aplikacje X?
djeikyb
@ djeikyb są napisane, aby być klientami X i komunikować się z serwerem X. Skrypty powłoki uruchomić w powłoce, która może lub nie może być uruchomiony w środowisku, które ma nawet serwer X, a nie powinien dbać o X
psusi
2
Zrozumiałe, że tak. Ale są obejścia! Korzystając z wmctrl, pakietu z repozytorium, możesz przenosić, zmieniać rozmiar, minimalizować, a nawet zmieniać przestrzeń roboczą!
drnessie
Zgodnie z logiką @ psusi środowiska pulpitu nie powinny istnieć. W końcu to tylko ogromne kolekcje skryptów, które współdziałają z oprogramowaniem napisanym dla X.
andyn
0

Uważam, że tput colsdziała całkiem nieźle!

Milo Banks
źródło
2
Dziękuję za twój wkład. Sugeruję poprawić odpowiedź: wyjaśnij, co robi, zmień polecenie, aby uzyskać także liczbę wierszy. Może pokażę, jak używać wyników w skrypcie powłoki. - Zobacz najwyżej ocenione odpowiedzi jako przykłady.
guntbert
Wnioskując z wzmianki o OP wmctrl, nie mówimy o oknach konsoli, ale graficznych środowiskach.
andyn
0

Mam 3 ekrany, co daje 3 linie o wymiarach:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
NVRM
źródło