Ich habe versucht, die Größe eines Fensters für die Verwendung in einem kleinen Skript herauszufinden. Meine derzeitige Technik verwendet wmctrl -lG
, um die Dimensionen herauszufinden. Das Problem ist jedoch folgendes:
Die angegebenen x- und y-Werte gelten für die obere linke Ecke der Fensterdekoration, während Höhe und Breite nur für den Inhaltsbereich gelten. Dies bedeutet, dass wmctrl ein Fenster mit 640x480 meldet, auch wenn es 660x482 auf dem Bildschirm einnimmt, wenn die Fensterdekoration 20px Höhe und 2px Breite hinzufügt. Dies ist ein Problem, da der nächste Schritt meines Skripts darin besteht, in diesem Bereich ffmpeg anzuweisen, den Bildschirm aufzuzeichnen. Ich möchte Hardcoding in der Größe der Fensterdekorationen aus meinem aktuellen Setup vermeiden.
Was passen würde, ist entweder eine Methode, um die Größe der Fensterdekorationen zu ermitteln, damit ich sie verwenden kann, um die Position des 640x480-Inhaltsbereichs herauszufinden, oder eine Methode, um die Position des Inhaltsbereichs direkt zu ermitteln, nicht die der Fensterdekorationen .
quelle
Antworten:
Das folgende Skript gibt Ihnen die Bildschirmkoordinaten oben links und die Größe des Fensters an (ohne Dekoration). . . .
xwininfo -id $(xdotool getactivewindow)
enthält genügend Informationen für Sie.quelle
xdotool getactivewindow
die Fenster-ID des Fenstermanager-Frames (einschließlich Dekoration) und nicht das darin enthaltene Client-Fenster zurückgegeben wird.xdotool getactivewindow getwindowgeometry
Die akzeptierte Antwort kann erweitert werden, um das gesamte Fenster zu erhalten:
Obwohl es einfach ist, funktioniert Unity in Ubuntu 14.04 nicht, da die relative Information alle 0 ist. Ich fragte Get the full window dimensions (inclusive decorations) in Unity und bekam eine gute Antwort. So habe ich diese Antwort verwendet:
Diese zweite Methode funktioniert sowohl in Unity als auch in Xfce und sollte auch in Gnome funktionieren.
quelle
aw=`xdotool getactivewindow`
oben zu vermeiden , hängt aufaddiert auf dem xwininfo Anruf. Dies ist gut zu wissen, weil ich erwäge, zu Unity zu wechseln, wo ich wmiface nicht zum Laufen bringen kann, ohne Segfaulting.aw
Definition. Ich werde die Antwort jetzt bearbeiten, um diese Zeile hinzuzufügen.h
. Die Titelleiste scheint bereits in der Höhe enthalten zu sein, von der sie zurückkommtxwininfo
.Viel einfacher Weg, um Fenstergröße und Position zu erhalten:
quelle
Die akzeptierte Antwort enthält ausdrücklich keine Fensterdekoration. Für diejenigen, die nach wie vor die Geometrie einschließlich aller Dekorationen gemäß dem Titel dieser Frage suchen , können Sie wmiface gemäß dieser anderen Frage https://superuser.com/questions/164047/how-to-get-accurate-window verwenden -information-dimensions-etc-in-linux-x . Beispiel:
Dies gibt Geometrie und Position relativ zu oben links wie folgt zurück:
wmiface scheint nicht mit allen Linux-Distributionen zu kommen (ich habe kein Paket gefunden, das es auf Mint oder Ubuntu zur Verfügung stellt), aber ich konnte es von den Paketen hier installieren: http://kde-apps.org/content/show .php? content = 40425
Und es kommt ohne Dokumente noch einmal
--help
, aber die README ist hier:https://gitorious.org/wmiface/wmiface/source/ea941eeb2076124734f6a3d3079326c826b462d7:README
quelle
wmiface activeWindow
570x434 + 870 + 31 $ xdotool getwindowgeometryxdotool getactivewindow
Window 6291772 Position: 878,77 (Bildschirm: 0) Geometrie: 562x407Mit xdotool:
sleep 3s && xdotool getactivewindow
, Sie haben 3 Sekunden Zeit, um Ihr Fenster zu öffnenxdotool getwindowgeometry $WINDOW_ID
xdotool getwindowgeometry -shell $WINDOW_ID
quelle
Antworten auf dieser Seite kombinieren Ich habe dies verwendet:
Führen Sie den Einzeiler aus und klicken Sie dann innerhalb von 3 Sekunden auf das Fenster, für das Sie die Position und Geometrie festlegen möchten.
quelle