Wie erhalte ich unter Linux (X) genaue Fensterinformationen (Abmessungen usw.)?

22

Wie kann ich unter Linux genaue Fensterinformationen abrufen? Ich weiß, dass ich mit wmctrl die Größe eines Fensters ermitteln kann, aber die tatsächliche Größe des Fensters kann aufgrund von Fensterdekorationen variieren. Ich benötige folgende Informationen und Methoden:

* precise window dimensions
* precise available screen space (excluding panels like gnome-panel)
* the ability to set a window to be a certain size, including decorations

Was wäre der beste Weg, dies zu tun?

Danke im Voraus!

mellort
quelle
Wenn Sie mehr an der Python-Seite interessiert sind, können wir diese auf unsere Schwestersite über Programmierung, StackOverflow.com, migrieren. Lass es uns einfach wissen.
Gnoupi
@Gnoupi: danke, aber dies ist eigentlich ein Cross-Post von SO, da ein Benutzer vorgeschlagen hat, ich könnte hier eine bessere Antwort bekommen. Die ursprüngliche Frage ist bei stackoverflow.com/questions/3233660/… .
Mellort
OK, ich verstehe. In diesem Fall denke ich, dass der Python-Teil Ihrer Frage entfernt bearbeitet werden kann. Antworten auf SU werden höchstwahrscheinlich andere Befehle verwenden, keine Programmierung. Die Frage zu SO sollte sich wahrscheinlich darauf konzentrieren, wie man es in Python macht.
Gnoupi
Erhalten Sie Fenstermaße mit Dekorationen: unix.stackexchange.com/questions/14159/…
Ciro Santilli

Antworten:

26

Es gibt einige Befehlszeilenprogramme, die möglicherweise helfen:

  • xwininfo: Ermittelt die Größe des Fensters ohne Dekoration und die Position absolut (zum Bildschirm) und relativ (zum Fensterbereich)
  • xdpyinfo: Dies gibt weit mehr Informationen über Ihr Bildschirmgerät, als Sie jemals wissen wollen. Aber es hat irgendwo in der Ausgabe so etwas wie screen: #0gefolgt dimension: 1024x768.
Antwortgenossenschaft
quelle
Gibt es eine Möglichkeit, Informationen einschließlich der Dekoration zu erhalten?
Victor
6

> genaue fensterabmessungen

Das folgende Beispiel (funktioniert mindestens in sh, bash und zsh) gibt die Fenstergeometrie mit und ohne Rahmen für alle Fenster mit "KWrite" irgendwo im Titel aus.

windows="$(wmiface findNormalWindows "KWrite" "" "" "" "" "")"
for window in $(echo $windows); do
{
  echo $window
  wmiface framePosition $window
  wmiface frameSize $window
  wmiface windowPosition $window
  wmiface windowSize $window
  echo
} done

> genau verfügbarer Bildschirmbereich (ausgenommen Panels wie Gnome-Panel)

xrandr

Beispielsweise:

xrandr | head -n1 | cut -d, -f2 | cut -d" " -f3-5

Ausgabe in meinem Fall:

4400 x 2560

Nicht sicher, wie Panels ausgeschlossen werden sollen - wenn Sie mehr als einen Monitor haben, können sich diese sogar in der Mitte des virtuellen Bildschirms befinden, sodass die Geometrie des Bildschirms ohne Panels komplizierter sein kann als der "verfügbare Bildschirmplatz".

> die Möglichkeit, ein Fenster auf eine bestimmte Größe einzustellen, einschließlich Dekorationen

wmiface setFrameGeometry $window $x $y $width $height

Lesen Sie wmiface README für noch mehr mögliche Befehle.

Lissanro Rayen
quelle
2
wmiface wird nicht mit allen Distributionen ausgeliefert. Ich konnte auf Mint mithilfe des Ubuntu-Pakets von hier aus installieren: kde-apps.org/content/show.php?content=40425 Die erwähnte README finden Sie hier: gitorious.org/wmiface/wmiface/source/…
Slinkp
Im zweiten Teil dieses Kommentars unter unix.stackexchange.com/a/156349/84607 finden Sie eine weitere Möglichkeit, die gesamte Geometrie einschließlich Dekorationen mithilfe einer Kombination aus xwininfo, xdotool und xprop abzurufen.
Slinkp