Вопрос или проблема
Я запускаю Firefox следующим образом:
/usr/bin/firefox --no-remote -P Fastmail --class "FastmailFF"
Конечная цель — найти команду, которую можно будет вставить в файл .desktop, чтобы у неё был свой собственный значок и она существовала отдельно от обычного браузера.
Вышеуказанное группируется под текущим значком Firefox.
Когда я проверяю окно с помощью команды xprop WM_CLASS
, я получаю следующее:
WM_CLASS(STRING) = "Navigator", "FastmailFF"
и следующее для основного Firefox:
WM_CLASS(STRING) = "Navigator", "firefox"
Так что я думаю, что общая строка “Navigator” вызывает группировку.
Есть ли способ предотвратить добавление Navigator
при запуске?
Похоже, что Firefox установлен через snap:
Version: 1:1snap1-0ubuntu2
Я использую GNOME 42.5 и Wayland
Обновление (2023-07-07): Удаление опции командной строки -no-remote
избегает ошибки Firefox уже запущен, но не отвечает.
Для меня (используя Wayland и GNOME 43 на Fedora 37) решением было использовать --name FastmailFF
вместо --class FastmailFF
. Оба этих аргумента командной строки определены GTK, и Firefox их не документирует.
Вот полный файл firefox-personal.desktop
:
[Desktop Entry]
Version=1.0
Name=Firefox (Personal)
GenericName=Web Browser
Comment=Browse the Web
Exec=firefox -P personal --name FirefoxPersonal %u
Icon=firefox
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
# NOTE: If this is not set to the same as the argument of the --name option,
# then GNOME Shell won't show the nice Firefox icon and the user facing
# "Firefox (Personal)" text along with it.
StartupWMClass=FirefoxPersonal
Categories=Network;WebBrowser;
Keywords=web;browser;internet;
Actions=new-window;new-private-window;profile-manager-window;
X-Desktop-File-Install-Version=0.26
[Desktop Action new-window]
Name=Open a New Window
Exec=firefox -P personal --name FirefoxPersonal --new-window %u
[Desktop Action new-private-window]
Name=Open a New Private Window
Exec=firefox -P personal --name FirefoxPersonal --private-window %u
Ответ или решение
Чтобы ответить на вопрос о том, как запускать Firefox с заданным WM_CLASS без установки общего значения "Navigator", следуя выбранному примеру, необходимо понимать, как управляются классы окон в графических окружениях Linux, таких как Gnome, работающих на Wayland.
Теория: Принцип работы WM_CLASS в X11 и Wayland
Для начала, важно понять, что такое WM_CLASS и почему он важен. WM_CLASS – это свойство окна, используемое оконными менеджерами для определения поведения приложения, включая такие вещи, как значки и группировку окон. Это свойство состоит из двух строк: первой, которая обычно обозначает внутреннее название программы, и второй, соответствующей классу окна приложения. В данном случае, Firefox использует "Navigator" в качестве первой строки, что является стандартной практикой.
Проблема заключается в том, что если вы хотите запустить несколько профилей Firefox как отдельные приложения, эти профили должны иметь уникальное значение WM_CLASS, чтобы оконный менеджер мог различать их и отображать разные значки. Дефолтное значение "Navigator" мешает этому, вызывая группировку окон под одним значком.
Пример: Запуск Firefox с разными WM_CLASS
В вашей текущей конфигурации WM_CLASS возвращает значения "Navigator" и ваш указанный класс, например, "FastmailFF". Это означает, что какое-то значение – "Navigator" – уже установлено прежде, чем Firefox применяет опцию --class
. В данном случае, использование параметра --name
, вместо --class
, оказалось более эффективным для ваших нужд.
Вы описали опыт успешного разделения экземпляров Firefox с использованием команды:
/usr/bin/firefox --no-remote -P Fastmail --name "FastmailFF"
Также было обнаружено, что устранение параметра -no-remote
помогло избежать ошибки "Firefox is already running, but is not responding", что еще раз подчеркивает важность внимания к особенностям конфигурации Firefox.
Применение: Создание .desktop файла для запуска Firefox с уникальным идентификатором
С учетом вышеизложенного, представьте окончательный формат вашего .desktop файла для запуска отдельных экземпляров Firefox:
[Desktop Entry]
Version=1.0
Name=Firefox (Personal)
GenericName=Web Browser
Comment=Browse the Web
Exec=firefox -P personal --name FirefoxPersonal %u
Icon=firefox
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
StartupWMClass=FirefoxPersonal
Categories=Network;WebBrowser;
Keywords=web;browser;internet;
Actions=new-window;new-private-window;profile-manager-window;
[Desktop Action new-window]
Name=Open a New Window
Exec=firefox -P personal --name FirefoxPersonal --new-window %u
[Desktop Action new-private-window]
Name=Open a New Private Window
Exec=firefox -P personal --name FirefoxPersonal --private-window %u
В этом файле ключ Exec
определяет команду для исполнения, в которую включены параметры профиля и уникальное имя, указанное через --name
. Ключ StartupWMClass
должен совпадать с именем, чтобы обеспечить правильное отображение значка и заголовка.
Заключение
Использование --name
вместо --class
, как оказалось на практике, более эффективно с Wayland. Это позволяет избежать проблем с конфликтующими установками/значениями WM_CLASS
, которые вызывают неприятности при использовании X11, таких как группировка окон под общим значком. Gnome под Wayland, благодаря своему выстраиванию иерархии окон, может учитывать изменения, предоставляемые --name
, воспринимая их более точно и разделяя экземпляры приложения по разным изображениям и идентификаторам.
Если ваш Firefox установлен через Snap, это может добавить свой уровень сложности в управлении окнами, однако базовая структура и реализация остаются применимыми и помогут обеспечить ваши требования к пользовательскому интерфейсу.