Чтобы иметь опцию «минимизировать окно» через правую кнопку мыши на иконке в панели запуска Unity (Ubuntu 14.04), я следовал подробным инструкциям здесь об изменении .desktop
файла и сделал пользовательский Firefox
гранатомет в ~/.local/share/applications/
папке. Соответствующая часть файла .desktop:
Actions=NewWindow;NewPrivateWindow;Minimize
[Desktop Action NewWindow]
Name=Open a New Window
Exec=firefox -new-window
OnlyShowIn=Unity;
[Desktop Action NewPrivateWindow]
Name=Open a New Private Window
Exec=firefox -private-window
OnlyShowIn=Unity;
[Desktop Action Minimize]
Name=Minimize Windows
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
OnlyShowIn=Unity;
Действие рабочего стола «Свернуть» вызывает простой сценарий оболочки, minimize.sh
который имеет следующее содержимое:
#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
xdotool windowminimize $i
done
Скрипт использует xdotool
, которые могут быть установлены из официальных репозиториев, чтобы найти все firefox
окна, перебрать их и свести к минимуму.
Сценарий работает, и в правом меню панели запуска «Свернуть Windows» также работает, но как только окна свернуты, указатель мыши переходит в режим «занят» и остается таким примерно 20 секунд (хотя действия мыши все еще остаются отзывчивый).
Кто-нибудь знает, почему запуск сценария оболочки из правильной опции меню в Unity может привести к такому поведению?
РЕДАКТИРОВАТЬ : Очевидно, период ожидания неизбежен, как объяснено в ответе Якоба Влиима. Так как мышь остается отзывчивой, избегание преобразования указателя в вращающемся колесе является частичным эстетическим обходным путем , как объясняется в Askubuntu .
РЕДАКТИРОВАТЬ 2 : дать системе поддельное окно - лучшее решение, как объяснил Джейкоб ниже.
Ответы:
Отличный вопрос.
Причина
Обычно, когда запускаются приложения с графическим интерфейсом из Unity Launcher, программа запуска ожидает появления окна. В ожидании показывает «вращающееся колесо». Это не будет ждать вечно однако; примерно через 20 секунд программа запуска предполагает, что окно не появится, и перестает ждать.
1. Основная команда запуска приложения
В
.desktop
файле, относящемся к первойExec=
строке (основной команде), вы можете указать программе запуска ждать или нет, в строке:чтобы подождать, или
чтобы не ждать.
2. Быстрый список предметов лаунчера
Однако для возможных элементов списка быстрого запуска (щелчка правой кнопкой мыши) по умолчанию используется значение
StartupNotify=true
. К сожалению, это значение является фиксированным и не может быть изменено ничем.Это означает, что если вы запустите любую команду, щелкнув правой кнопкой мыши значок запуска в Unity Launcher, программа запуска ожидает окно и ждет его, показывая вращающееся колесо.
Суть в том, что, хотя это можно объяснить, в данный момент, похоже, нет решения этой проблемы, кроме создания выделенного модуля запуска для вашего сценария и добавления строки
StartupNotify=false
в файл.Доказательство
Вы можете проверить поведение самостоятельно. Создайте две пусковые установки:
и:
Сохраните их как
test1.desktop
иtest2.desktop
, перетащите оба модуля запуска на модуль запуска Unity. Нажмите на них и увидите разницу в поведении.Редактировать; если это действительно беспокоит вас, накормите Unity поддельным окном
Если у вас есть много сценариев в быстрых списках, и / или это действительно беспокоит вас, есть другое косметическое решение; мы можем подделать , невидимую (полностью прозрачную), чтобы показать окно, которое будет включено в ваш скрипт. ваш сценарий будет (например)
где команда
fake_window
вызовет наше (поддельное) окно, заставляя Unity прекратить вращающееся колесо.Как настроить
~/bin
Скопируйте приведенный ниже скрипт в пустой файл, сохраните его как
fake_window
(без расширения)~/bin
и сделайте его исполняемымДобавьте в самый конец вашего скрипта команду:
Выйти и вернуться (или запустить
source ~/.profile
)Вот и все, колесо будет вращаться только до тех пор, пока работает скрипт.
объяснение
Скрипт делает создать минималистичный окно. Однако окно полностью прозрачно, имеет размер 0x0 пикселей и поэтому невидимо. Он уничтожит себя немедленно, как только он будет существовать.
Вызывая окно в конце вашего сценария, вы удовлетворите желание Unity открыть окно, останавливая вращение колеса.
источник
Просто хотел добавить альтернативную реализацию fake_window, которая немного проще и не вызывает предупреждений Python в системе Ubuntu 16.04.
источник