Liefert die Fenstergröße in der Shell

18

Ich möchte die Größe des aktuellen Fensters aus einem Shell-Skript erhalten ...

Wirklich nicht viel anderes zu sagen ... Ich würde lieber wmctrl verwenden.

drnessie
quelle

Antworten:

23
wmctrl -lG

Wird Ihnen etwas geben wie:

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: ~

Damit können Sie grepund cutsich auf diese , so dass Sie mit den Geometriewerte werden links (Spalten 3-6).

So zitieren Sie die Manpage, damit Sie genau verstehen, was die Spalten sind:

-l

Listen Sie die Fenster auf, die vom Fenstermanager verwaltet werden. Für jedes Fenster wird eine Zeile ausgegeben, wobei die Zeile in durch Leerzeichen getrennte Spalten unterteilt ist. Die erste Spalte enthält immer die Fensteridentität als hexadezimale Ganzzahl und die zweite Spalte enthält immer die Desktop-Nummer (ein -1 wird verwendet, um ein klebriges Fenster zu identifizieren). Wenn die Option -p angegeben ist, enthält die nächste Spalte die PID für das Fenster als Dezimalzahl. Wenn die Option -G angegeben ist, folgen vier ganzzahlige Spalten: x-Versatz, y-Versatz, Breite und Höhe. Die nächste Spalte enthält immer den Namen des Clientcomputers. Der Rest der Zeile enthält den Fenstertitel (möglicherweise mit mehreren Leerzeichen im Titel).

Oli
quelle
Ich werde das nutzen!
Allan
1
Ich liebe die Art, wie Ihr Computer
Bert
5

Ich glaube wmctrl hat nicht jede Möglichkeit, die für die Suche nach aktiven Fenstern Id direkt.
Wenn jemand weiß, wie es geht, interessiert es mich.
Das heißt, hier sind ein paar Skripte, die die Größe des aktiven Fensters ausdrucken.

Dies ist: wmctrl + xdotool ... (ohne 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

Dies ist: xwininfo + xdotool + sed

xwininfo ist ein Teil von 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
quelle
2

Verwenden Sie xpropoder xwininfo. Beide sind standardmäßig installiert, keine Installation erforderlich

Anwendungsbeispiele:

Beide Befehle verwandeln den Cursor in ein Quadrat / Kreuz, um ein bestimmtes Fenster auswählen zu können.

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


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

Alternativ kann man das Fenster in der Befehlszeile in XID-Form angeben

$ 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

Andere Beiträge, bei denen diese verwendet wurden

Insbesondere wurde xwininfovon mir aktiv für Scripte verwendet, wie zum Beispiel auf diesen AskUbuntu-Fragen:

Sergiy Kolodyazhnyy
quelle
Er gemeinsam, fügen Sie ein Beispiel;)
AB
Fügte sie nach einem Jahr hinzu;) Aber besser später als nie, oder?
Sergiy Kolodyazhnyy
0

Shell-Skripte kennen oder interessieren sich nicht für Windows. Bestenfalls laufen sie in einem Terminal (das in einem Fenster angezeigt werden kann oder nicht). Wenn Sie die Breite und Höhe des Terminals in Zeichen erhalten möchten, verwenden Sie das Dienstprogramm stty.

Psusi
quelle
2
Sicherlich könnte ein Shell-Skript X-Clients nach ihrer Geometrie fragen? Wie würden sonst X Apps geschrieben?
djeikyb
@djeikyb Sie sind so geschrieben, dass sie X-Clients sind und mit dem X-Server kommunizieren. Shell-Skripte werden in einer Shell ausgeführt, die möglicherweise in einer Umgebung ausgeführt wird, die sogar einen X-Server hat, und die sich nicht um X
kümmern
2
Verständlicherweise ja. Aber es gibt Workarounds! Mit wmctrl, einem Paket aus dem Repository, können Sie den Arbeitsbereich verschieben, die Größe ändern, minimieren und sogar ändern!
Drnessie
Nach der @ psusi-Logik sollten Desktop-Umgebungen nicht existieren. Immerhin handelt es sich nur um eine riesige Sammlung von Skripten, die mit für X geschriebener Software interagieren.
andyn
0

Ich fand tput colses ganz nett zu arbeiten!

Milo Banks
quelle
2
Danke für Ihren Beitrag. Ich schlage vor, Ihre Antwort zu verbessern: Erklären Sie, was es tut, und ändern Sie den Befehl, um auch die Zeilenanzahl zu ermitteln. Zeigen Sie vielleicht, wie die Ergebnisse in einem Shell-Skript verwendet werden. - Siehe die am besten bewerteten Antworten als Beispiele.
guntbert
Aus OP-Erwähnungen geht hervor wmctrl, dass es sich nicht um Konsolen-, sondern um grafische Umgebungsfenster handelt.
andyn
0

Erhalten Sie 3 Bildschirme, diese geben 3 Linien mit den Maßen aus:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
NVRM
quelle