Próbowałem użyć wmctrlprzełącznika polecenia, ale nie działało to w mojej konfiguracji Ubuntu. Przełącznik włącza się, ale nie wyłącza. (Myślę, że może tak być, ponieważ używam środowiska graficznego gnome, na którym wmctrlAFAIK jest nieco uszkodzony).
W każdym razie, po wielu badaniach i opracowaniu, jak napisać odpowiedni kod w bash, stworzyłem jedno polecenie, które używa wmctrlpoleceń w warstwie logicznej, aby skutecznie przełączać stan „zawsze na górze” na bieżącym pulpicie GNOME. Opublikowałem tę odpowiedź na Ask Unix / Linux, ale pomyślałem, że opublikuję ją tutaj, na wypadek, gdyby ktoś miał ten sam problem.
Oto polecenie:
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'
Sprawdza właściwość stanu aktywnego okna „_NET_WM_STATE” za pomocą xprops, a jeśli zawiera tekst „POWYŻEJ”, oznacza to, że opcja „zawsze na wierzchu” jest aktywna. Następnie po prostu uruchamia wmctrlpolecenie z parametrem addlub removeodpowiednio.
Podział poleceń (każde polecenie jest wstawiane do następnego, zastępując ■symbol zastępczy):
Uzyskaj identyfikator aktywnego okna:
xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
Uzyskaj stan okna xpropza pomocą identyfikatora:
xprop -id $(■) _NET_WM_STATE
Sprawdź, czy stan zawiera „POWYŻEJ”, co wskazuje, że okno jest ustawione na „zawsze na wierzchu”:
[[ $(■) =~ "ABOVE" ]]
Zwróć „usuń”, jeśli to prawda, w przeciwnym razie zwróć „dodaj”:
■ && echo "remove" || echo "add"
uruchom wmctrlpolecenie, używając zwróconej wartości jako parametru:
wmctrl -r :ACTIVE: -b $(■),above
Wyślij wszystko bash, abyś mógł użyć podstawiania poleceń ${ ... }, oceny logicznej bash [[ ... ]]i operatora dopasowania wyrażenia regularnego =~:
bash -c '■'
W szczególności ten ostatni krok zajął mi bardzo dużo czasu. Dopóki nie zdałem sobie sprawy, że skróty klawiaturowe domyślnie nie działały w trybie bash, nie miałem pojęcia, dlaczego polecenia działały w konsoli, ponieważ je testowałem, ale po cichu zawiodły, gdy działały bezpośrednio jako skrót klawiaturowy. Przez wieki doprowadzał mnie do szału!
Uwaga: ponieważ potrzebujesz cytatów wokół polecenia, które wysyłasz do basha, musiałem być ostrożny przy pisaniu polecenia, że nigdy nie poszedłem głębiej niż o jeden poziom więcej (używając podwójnych cudzysłowów). Każde dalsze zagnieżdżanie ciągów w cudzysłowach wymagałoby wielu mylących ukośników odwrotnych, aby uniknąć cudzysłowów.