it-swarm.com.de

Bash-Befehl zum Fokussieren eines bestimmten Fensters

Gibt es eine Möglichkeit, in der Bash-Befehlszeile einem bestimmten Fenster eines laufenden Prozesses den Fokus zu geben? Angenommen, ich kenne den Namen, die Nummer und alles andere, was ich brauche.

Zum Beispiel, wenn eine einzelne Instanz von Firefox ausgeführt wird, diese jedoch minimiert ist (oder ein anderes Fenster darüber angezeigt wird). Ich benötige einen bash-Befehl, der das Firefox-Fenster aufruft und den Fokus darauf legt, indem er es zum aktiven Fenster macht.

48
Malabarba

Der Befehl wmctrl scheint den Job zu erledigen. Es wurde bereits für mich installiert, ist aber in den Repositories verfügbar, falls jemand es benötigt.

wmctrl -l 

Listet aktuell geöffnete Fenster auf (einschließlich der Gnome-Fenster).

wmctrl -a STRING

Fokussiert ein Fenster, dessen Titel STRING enthält. Ich bin nicht sicher, was passiert, wenn mehr als ein Fenster diese Bedingung erfüllt.
In meinem Fall lautete der Befehl:

wmctrl -a Firefox
76
Malabarba

Wenn Sie wmctrl in Kombination mit xdotool verwenden, können Sie den Fokus auf Firefox umstellen und anschließend Tastatur- oder Mausaktionen ausführen.

In diesem Beispiel:

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

Die folgenden Schritte werden ausgeführt:

  1. Konzentrieren Sie sich auf das erste passende Firefox-Fenster
  2. Öffnen Sie eine neue Browserregisterkarte
  3. Setzt den Fokus in die Adressleiste
  4. Tippe "google"
  5. Tab zum ersten Ergebnis der automatischen Vervollständigung des Browsers
  6. Drücken Sie die Eingabetaste
8
Christopher

Wie ist das folgende Skript, das ich in meinem Ubuntu-PC verwende? Anwendungsfall ist wie folgt.

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

Ich verwende es, nachdem ich es in der benutzerdefinierten Tastenkombination zugewiesen habe. Strg + 1, Strg + 2, ...

katze focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
4
swj