Gnome (Ubuntu): Wie kann man ein Programmfenster über eine Befehlszeile vom Terminal aus nach vorne bringen?

14

Ich habe eine bestimmte Arbeitsumgebung mit Dutzenden von offenen Windows. Wie kann ich ein Fenster mit einem bekannten Namen / Titel programmgesteuert oder über die Befehlszeile nach vorne bringen?

GJ.
quelle

Antworten:

12

Früher habe ich verwendet wmctrl -a <name>, was gut funktioniert, aber kürzlich wurde auf Folgendes umgestellt xdotool:

xdotool search --name <name-or-regex-for-name> windowraise

Es hat auch viele andere Funktionen.

Installieren:

sudo apt-get install xdotool

schäbig
quelle
5
xdotool windowraiseDas Fenster wird nach vorne verschoben, es wird jedoch weder der Fokus auf das Fenster gelegt noch zum Desktop mit dem Fenster gewechselt. Stattdessen windowactivatewerden alle drei tun.
Jozxyqk
6

Nun, nachdem Sie sudo apt-get install wmctrlfertig sind, können Sie mit diesem Bash-Skript spielen:

#! /bin/bash

WINTITLE="Mail/News" # Main Thunderbird window has this in titlebar
PROGNAME="mozilla-thunderbird" # This is the name of the binary for t-bird

# Use wmctrl to list all windows, count how many contain WINTITLE,
# and test if that count is non-zero:

if [ `wmctrl -l | grep -c "$WINTITLE"` != 0 ]
then
wmctrl -a "$WINTITLE" # If it exists, bring t-bird window to front
else
$PROGNAME & # Otherwise, just launch t-bird
fi
exit 0

Was ich hier gefunden habe

digitxp
quelle
4
Klammern und Backticks sind nicht erforderlich:if ! wmctrl -l | grep -q "$WINTITLE"
Bis auf weiteres angehalten.
wmctrlhat eine -iOption, die das Arbeiten mit dem Fenster mit seiner Hex-Kennung unterstützt. Und so können Sie dies tun wmctrl -lp|grep 'whatever incomplete name'|cut -d' ' -f1|xargs wmctrl -ai- was etwas Ähnliches tun würde
vlad-ardelean
0

Bei der Verwendung xdotoolscheint es schwierig, alles nach vorne zu bringen Fenster für eine bestimmte Anwendung oder Klasse mit nur einem Befehl . forAm Ende habe ich bessere Ergebnisse, indem ich es in eine Schleife auf Shell-Ebene einhülle . Verwenden von Bash:

for WINDOW in $(xdotool search --desktop 0 Firefox); do
   xdotool windowactivate ${WINDOW}
done

Einige Bemerkungen:

  • Standardmäßig xdotool searchwird das Muster (hier Firefox) nach Fenstername, Klasse und Klassenname durchsucht. Wenn Sie Ihren Suchraum einschränken möchten, verwenden Sie das entsprechende--class , --nameoder --classnameOptionen.
  • Das --desktop 0 Option beschränkt die Suche auf den ersten Desktop. Dies scheint eine Problemumgehung zu sein, um das XGetWindowProperty[_NET_WM_DESKTOP] failed (code=1)in einigen Kommentaren Erwähnte zu vermeiden .
  • Zum Zeitpunkt dieses Schreibens ist das xdotoolProjekt seit 2015 ins Stocken geraten. Es bleibt mein bevorzugtes Werkzeug. Aus persönlichen Gründen ist Jordan Sissel (der ursprüngliche Autor) nicht mehr so ​​aktiv wie in der Vergangenheit. Zögern Sie also nicht, einen Beitrag zum Projekt zu leisten.


Dies ist eine Kopie einer Antwort, die ich auf AskUbuntu gepostet habe , aber ich denke, sie ist Linux-unabhängig, daher kann sie auch hier nützlich sein.

Sylvain Leroux
quelle