ПРАВКА 1

ПРАВКА 1

Я использую Firefox для запуска некоторых веб-приложений как «автономных»: я создаю новый профиль в Firefox, специально для этого приложения, настраиваю первую страницу, выполняю вход в систему и настраиваю пользовательский интерфейс в зависимости от конкретных потребностей.

Затем я могу быстро запустить экземпляр этого веб-приложения, выполнив:

firefox --no-remote -P My_app_profile the_app_url

Чтобы сделать его еще лучше, я создал my_web_app.desktopфайл, поместил его в папку ~/.local/share/applicationи добавил в избранное, чтобы можно было быстро запустить его из боковой панели оболочки gnome.

Проблема в том, что после запуска приложения я вижу, чтоFire Foxзапущено, а не мое приложение. Например, я сделал ярлык для Trello, но после запуска я вижу это:

Firefox выделен, 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.

Связанный контент