Я использую Firefox для запуска некоторых веб-приложений как «автономных»: я создаю новый профиль в Firefox, специально для этого приложения, настраиваю первую страницу, выполняю вход в систему и настраиваю пользовательский интерфейс в зависимости от конкретных потребностей.
Затем я могу быстро запустить экземпляр этого веб-приложения, выполнив:
firefox --no-remote -P My_app_profile the_app_url
Чтобы сделать его еще лучше, я создал my_web_app.desktop
файл, поместил его в папку ~/.local/share/application
и добавил в избранное, чтобы можно было быстро запустить его из боковой панели оболочки gnome.
Проблема в том, что после запуска приложения я вижу, чтоFire Foxзапущено, а не мое приложение. Например, я сделал ярлык для Trello, но после запуска я вижу это:
Теперь это имеет смысл, потому чтоэтоFirefox запущен, но я хотел бы видеть выделенным мое приложение и иметь значок Firefox, который можно было бы использовать, как будто никакой другой экземпляр не запущен.
Я думал, что gnome может подсвечивать значки в зависимости от имени исполняемого файла, но простая символическая ссылка на firefox не вызовет смену имени (т.е. link /usr/bin/firefox /usr/bin/my_app_firefox
все равно будет считаться firefox).
Есть ли у вас какие-либо идеи, как это исправить? Я использую gnome shell 3.18.2.
ПРАВКА 1
Вот файл trello.desktop в качестве примера. Я не эксперт по опциям, так что, возможно, я сделал что-то ужасно неправильное... Но если я и сделал, то это не похоже на то, что могло бы вызвать нежелательное поведение.
[Desktop Entry]
Version=1.0
Name=Trello (FF)
GenericName=Trello Dashboards
Comment=Trello in FireFox
Exec=firefox --no-remote -P App_Trello http://trello.com
Icon=trello
Terminal=false
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
Categories=Network;WebBrowser;
Keywords=web;browser;internet;
X-Desktop-File-Install-Version=0.22
ПРАВКА 2
Итак, я хотел проверитьисходный код gnome-shellчтобы увидеть, как это могло произойти. Я обнаружил, что вБросатьсякаждая запись связана с некоторымоболочка-приложение, и, по-видимому, я хочу убедиться, что идентификатор моих приложений уникален.
Используя зеркало (Alt+F2 lg), я увидел, что мои текущие запущенные приложения называются «firefox.desktop»:
appSys = Shell.AppSystem.get_default()
ll = appSys.get_running()
ll[0].get_id() // firefox.desktop (0 is the ID of the firefox app in my case)
Если я запускаю свое приложение trello.desktop, get_running()
метод возвращает то же количество записей, поэтому мое приложение не создает новую запись, и моя гипотеза о наличии уникального идентификатора, похоже, подтверждается.
Итак, я достигаюGAppInfo
исходный кодчтобы проверить, что это за идентификатор, и он отправляет меня обратно наспецификация меню xdg. И оттуда мне удаетсянаходитьэтот:
Чтобы определить идентификатор файла рабочего стола, укажите его полный путь относительно компонента $XDG_DATA_DIRS, в котором установлен файл рабочего стола, удалите префикс «applications/» и замените «/» на «-».
Мой файл .desktop был в $HOME/.local/share/applications
, которого НЕ было в моем $XDG_DATA_DIRS
.
Я переместил файл trello.deskop в каталог по этому пути и перезапустил оболочку, но приложение по-прежнему отображается как firefox.desktop
, так что, по-видимому, идентификатор все тот же, на самом деле приложение по-прежнему сгруппировано с другими окнами Firefox.
Любое предложение?
решение1
Итак, по-видимому, моя вторая правка была неверной: способ, которым GNOME Shell определяет группировку приложений, не тот, который я описал.
После того, как я задал вопрос на канале IRC gnome-shell, пользователь halfline предоставил мне политику группировки приложений в значки Dash:
Свойство _GTK_APPLICATION_ID окна соответствует идентификатору файла рабочего стола или WM_CLASS соответствует идентификатору файла рабочего стола или _NET_WM_PID соответствует запущенному файлу рабочего стола или StartupWMClass в файле рабочего стола соответствует WM_CLASS в окне
Он также предположил, что возможно изменить WM_CLASS Firefox, и он прав, поскольку --class
для Firefox есть флаг, позволяющий это изменить.
Вот пример:
$ firefox &
$ xprop WM_CLASS
WM_CLASS(STRING) = "Navigator", "Firefox"
Используя этот флаг я получаю
$ firefox --class "Trello" &
$ xprop WM_CLASS
WM_CLASS(STRING) = "Navigator", "Trello"
который просто должен соответствовать идентификатору файла на рабочем столе. Теперь иконки правильно сгруппированы.
Также обратите внимание, что Epiphany поддерживает создание настольных приложений, корректно обрабатывая ссылки в браузере по умолчанию, поэтому для моих первоначальных целей он даже лучше, чем Firefox.