Я намагався використовувати wmctrlперемикач команд, але це не спрацювало на моїй настройці Ubuntu. Перемикач увімкнеться, але не вимкнеться. (Я думаю, це може бути тому, що я використовую середовище робочого столу gnome, на якому wmctrlтрохи зламаний AFAIK).
У будь-якому випадку, після численних досліджень та розробок, як записати правильний код у bash, я створив єдину команду, яка використовує wmctrlкоманди в межах логічного шару для ефективного перемикання стану "завжди вгорі" на поточному робочому столі GNOME. Я опублікував цю відповідь на Ask Unix / Linux, але подумав, що я також опублікую її тут, якщо у когось є однакові проблеми.
Ось команда:
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'
Він перевіряє властивість стану активного вікна "_NET_WM_STATE", використовуючи xprops, і якщо він містить текст "ВІДОМ", це означає, що опція "завжди вгорі" активна. Тоді він просто запускає wmctrlкоманду з параметром addабо removeяк годиться.
Розбивка команд (кожна команда вставляється в наступну, замінюючи ■заповнювач):
Отримати активний ідентифікатор вікна:
xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
Отримайте стан вікна xpropза допомогою ідентифікатора:
xprop -id $(■) _NET_WM_STATE
Перевірте, чи містить стан "НАД", вказуючи, що у вікні встановлено значення "завжди вгорі":
[[ $(■) =~ "ABOVE" ]]
Поверніть "видалити", якщо це правда, інакше поверніть "додати":
■ && echo "remove" || echo "add"
запустити wmctrlкоманду, використовуючи повернене значення як параметр:
wmctrl -r :ACTIVE: -b $(■),above
Надішліть все це bashтак, щоб ви могли використовувати підстановку команд ${ ... }, bash булеву оцінку [[ ... ]]та оператор відповідності регулярних виразів =~:
bash -c '■'
Зокрема, цей останній крок знадобився мені дуже довго. Поки я не зрозумів, що комбінації клавіатур за замовчуванням не працюють у bash, я не знав, чому команди працюють у консолі, коли я їх тестую, але мовчки не виходить із ладу під час запуску безпосередньо як ярлик клавіатури. Це віками мене підводило до стіни!
Примітка: оскільки вам потрібні лапки навколо команди, яку ви надсилаєте в bash, я повинен був бути обережним при написанні команди, щоб я ніколи не ходив більше ніж на один рівень глибше (використовуючи подвійні лапки). Будь-яке подальше введення рядків у лапки вимагало б багатьох заплутаних зворотних косих ринків, щоб уникнути цитат.