Wie finde ich den Ort (auf dem Desktop) eines Fensters in der Befehlszeile?

19

Ich versuche, ein kleines Skript zu schreiben, mit dem ich meine Fenster über Tastenkombinationen verwalten kann.

Um zu tun, was ich will, muss ich in der Lage sein, die aktuelle Position und Größe des "aktiven" (fokussierten) Fensters zu finden. Mit Position meine ich die X-, Y-Koordinaten des Fensters auf dem Desktop und mit Größe meine ich die Höhe und Breite des Fensters.

Gibt es ein Befehlszeilenprogramm, das diese Informationen abrufen kann?

TM.
quelle

Antworten:

22

Mit dem folgenden Befehl können Sie alle Informationen für das aktuell aktive Fenster abrufen:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

oder

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Analysieren Sie einfach die Ausgabe für die Koordinaten, die Sie benötigen. Hier sind einige nützliche Befehle für die Interaktion mit Windows:

  • xwininfo gibt Ihnen die relative und absolute Geometrie an.
  • xprop wird Ihnen viele Informationen mitteilen, einschließlich, ob das Fenster aktiv ist, aber nicht die Geometrie
  • Mit xdpyinfo erhalten Sie auch die ID des aktiven Fensters, aber keine zusätzlichen Informationen.
  • Mit wmctrl erhalten Sie eine Liste mit Informationen zu Fenstern und können das aktive Fenster zur Änderung auswählen, jedoch keine Informationen.

So ändern Sie beispielsweise den Titel des aktiven Fensters in "Neuer Name":

wmctrl -r :ACTIVE: -N "New Name"

Oder ändern Sie die Position des aktiven Fensters:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Überlegen wmctrlSie, ob Sie nur etwas Einfaches wie die Geometrie des Fensters ändern müssen. Verwenden Sie die anderen oben genannten Skripts nur, wenn Sie komplexere Aufgaben ausführen möchten.

Martin Owens -doctormo-
quelle
1
Ich möchte nur bemerken, dass ich beim Ausführen des zweiten Befehls unterschiedliche Ergebnisse erhalte. Zuerst funktioniert man wie erwartet.
TM.
1
Ich benutze Arch, aber es könnte in Zukunft jemandem hier helfen. Das erste hat bei mir nicht funktioniert, das zweite hat möglicherweise aufgrund der WM nicht die richtigen Abmessungen geliefert. Aber die Kombination der beiden hat funktioniert. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev
Vielen Dank! Aber ich stimme den ersten beiden Kommentaren zu. Der zweite Befehl xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)zeigt mir ein untergeordnetes Fenster (hat keinen Namen) meines Terminals. Wenn ich es gerade tue , erhalte xdpyinfo | grep focusich focus: window 0x435b877, revert to Parentund 0x435b877 ist die ID des Fensters, das vom ersten Befehl zurückgegeben wird (was bei mir funktioniert). Dies ist auf Trusty 14.04.1 LTS
Nealmcb
8

Mit "xdotool" können Sie einfach mit Windows über Tastatur- oder Mausereignisse interagieren.

Beispiel für das Senden einer CtrlCSequenz an das aktive Fenster:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Wenn Sie die Fensterposition wirklich brauchen:

eval $(xdotool getmouselocation --shell); echo $X $Y

Weitere Aktionen / Optionen finden Sie in der Manpage .

João Pinto
quelle
Interessant, aber ich verstehe Error: Invalid key sequence 'ctrl-c'.
10.