Bash-Befehl zum Fokussieren eines bestimmten Fensters

50

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.

Malabarba
quelle

Antworten:

78

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 auf 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
Malabarba
quelle
6
Schön zu sehen, dass jemand liest und ich nicht nur für mich bin. =)
Malabarba
1
Probieren Sie auch xdotool aus .
Andres Riofrio
Dies ist großartig, um den Fokus wieder auf gdb (Debugger) zu setzen, wenn ein Debugger-Ziel mit einem Fenster gestartet wird, das den Fokus stiehlt, wie z. B. kvm. Verwenden Sie gdb Befehl shell wmctrl -a something, wo etwas etwas in Ihrem Debugger Terminal Titel.
Doug65536
Vielen Dank, das ist reines Gold, ich hatte Angst, dass ich all meine anstehenden Arbeiten in einem Chrome-Fenster verloren habe, das einfach irgendwie im Hintergrund verschwunden ist. Es hat funktioniert!
Osmar
9

Unter Verwendung wmctrlin Kombination mit xdotoolIhnen kann den Fokus auf Firefox wechseln und dann Tastatur oder Maus Aktionen 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
Christopher
quelle
4

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
swj
quelle