it-swarm.com.de

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

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?

19
TM.

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 die relative und absolute Geometrie an.
  • xprop gibt Ihnen viele Informationen, einschließlich, ob das Fenster aktiv ist, aber nicht die Geometrie
  • xdpyinfo zeigt auch die ID des aktiven Fensters an, aber keine zusätzlichen Informationen.
  • wmctrl zeigt eine Liste mit Informationen zu Fenstern an und ermöglicht die Auswahl des aktiven Fensters, das geändert werden soll, 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

Betrachten Sie wmctrl, wenn 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.

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

Beispiel für das Senden eines CtrlC Sequenz zum aktiven 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 .

8
João Pinto