Ich habe versucht, den wmctrl
Befehl umzuschalten, aber er funktionierte auf meinem Ubuntu-Setup nicht. Das Umschalten würde einschalten, aber nicht ausschalten. (Ich denke, es könnte daran liegen, dass ich die Gnome-Desktop-Umgebung verwende, auf der wmctrl
AFAIK etwas kaputt ist).
Trotzdem habe ich nach langem Nachforschen und Nacharbeiten, wie man richtigen Code in Bash schreibt, einen einzelnen Befehl erstellt, der die wmctrl
Befehle innerhalb einer Logikebene verwendet, um den Status "Immer im Vordergrund" auf dem aktuellen GNOME-Desktop effektiv umzuschalten. Ich habe diese Antwort auf Ask Unix / Linux gepostet, dachte aber, ich würde sie auch hier posten, falls jemand das gleiche Problem hat.
Hier ist der Befehl:
bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'
Es überprüft die Eigenschaft "_NET_WM_STATE" für den aktiven Fensterstatus mit xprops
. Wenn sie den Text "ABOVE" enthält, bedeutet dies, dass die Option "Immer im Vordergrund" aktiviert ist. Dann wird nur der wmctrl
Befehl mit dem entsprechenden Parameter add
oder ausgeführt remove
.
Befehlsaufschlüsselung (jeder Befehl wird in den nächsten eingefügt und ersetzt den ■
Platzhalter):
Aktive Fenster-ID abrufen:
xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
Ermitteln Sie den Fensterstatus xprop
anhand der folgenden ID:
xprop -id $(■) _NET_WM_STATE
Überprüfen Sie, ob der Status "OBEN" enthält, was darauf hinweist, dass das Fenster auf "Immer im Vordergrund" eingestellt ist:
[[ $(■) =~ "ABOVE" ]]
Gib "remove" zurück, wenn "true", sonst "add":
■ && echo "remove" || echo "add"
Führen Sie den wmctrl
Befehl mit dem zurückgegebenen Wert als Parameter aus:
wmctrl -r :ACTIVE: -b $(■),above
Senden Sie das Ganze an, bash
damit Sie die Befehlsersetzung ${ ... }
, die Bash-Boolesche Auswertung [[ ... ]]
und den Regex-Match-Operator verwenden können =~
:
bash -c '■'
Insbesondere für diesen letzten Schritt habe ich sehr lange gebraucht, um das herauszufinden. Bis ich merkte, dass die Tastaturkürzel nicht standardmäßig in bash ausgeführt wurden, hatte ich keine Ahnung, warum die Befehle in der Konsole beim Testen funktionierten, aber im Hintergrund fehlschlugen, wenn sie direkt als Tastaturkürzel ausgeführt wurden. Es trieb mich ewig die Wand hoch!
Hinweis: Da Sie Anführungszeichen für den Befehl benötigen, den Sie an bash senden, musste ich beim Schreiben des Befehls darauf achten, dass ich nie mehr als eine Ebene tiefer ging (doppelte Anführungszeichen verwenden). Jede weitere Verschachtelung von Zeichenfolgen in Anführungszeichen hätte viele verwirrende Backslashes erforderlich gemacht, um den Anführungszeichen zu entgehen.