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.
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
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:
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