Интеграция с рабочим столом

Требования и соглашения охватывает основные аспекты интеграции рабочего стола Linux. На этой странице представлена дополнительная информация о дополнительных функциях интеграции с рабочим столом. Он также предоставляет руководство о том, как приложения могут гарантировать, что их пользовательские интерфейсы подходят для всего диапазона настольных компьютеров и дистрибутивов Linux.

Эта информация в первую очередь предназначена для разработчиков, которые плохо знакомы с Linux. Однако это также актуально для настольных приложений Linux, которые хотят ориентироваться на более широкий спектр сред Linux.

Хотя нацеливание на экосистему настольных компьютеров Linux может показаться сложной задачей, наличие общих стандартов в сочетании с этими рекомендациями означает, что поддержка всего диапазона сред Linux не должна быть сложной.

Определение локали

Наборы прикладных инструментов, такие как Electron, GTK и Qt, предоставляют встроенную поддержку для определения того, какой языковой стандарт использовать. В противном случае можно использовать функцию setlocale.

Порталы

Порталы - это платформа для безопасного доступа к ресурсам за пределами изолированной программной среды приложения. Они предоставляют приложениям ряд общих функций, в том числе:

  • Определение статуса сети

  • Открытие файла с помощью средства выбора файла

  • Открытие URIs

  • Предотвращение перехода устройства в режим ожидания/сна/выключения

  • Печать

  • Отправка электронной почты

  • Отображение уведомлений

  • Создание скриншотов и скринкастов

Такие инструменты, как GTK и Qt, обеспечивают прозрачную поддержку порталов.

If you are not using one of these toolkits, it is possible to access the portals API directly. See the Portals API documentation for more information.

Уведомления

Ряд наборов инструментов и фреймворков обеспечивает прозрачную поддержку уведомлений.

Значки состояния

Status icons are the same concept as the system tray or the taskbar on Windows, or menu bar icons on Mac. These are supported on most Linux distributions, through abstractions such as libappindicator.

В некоторых дистрибутивах Linux не отображаются значки состояния. По-прежнему можно указать значок состояния, и он будет отображаться в некоторых дистрибутивах. Однако для обеспечения совместимости рекомендуется использовать значки состояния только в качестве дополнительных средств и не полагаться на них как на единственный механизм для предоставления информации о состоянии или доступа к определенным функциям. Это включает в себя функцию «свернуть в трей» (или аналогичную).

XEmbed style icons will function on desktops that support them with the x11 permission.

StatusNotifier

StatusNotifier style icons will not function without extra permissions as it requires talking to a non-hardenend host service. Risks include impersonation of other software and exploitation of bugs in the host service such as image decoders.

At the very minimum to use StatusNotifier you must have the --talk-name=org.kde.StatusNotifierWatcher permission to register an item.

Depending on the exact implementation of StatusNotifier that your application is using it may need session bus ownership of org.kde.StatusNotifierItem-$PID-$ITEM_ID.

This permission is problematic in Flatpak as the $PID value is often the same in sandboxes and the item will possibly conflict with other applications. However if needed the --own-name=org.kde.* permission will allow this. This opens many new risks including the ability to impersonate any KDE service or application possibly capturing important user data.

Most implementations of StatusNotifer have dropped this requirement but known exceptions to this are Electron versions older than 23.3.0.

Current versions of Electron, Chromium, KNotifications, and libappindicator are known to work without ownership permissions.

Окно управления

Оконные элементы управления - это кнопки, используемые для закрытия, развертывания и минимизации окон. Они действительно различаются для разных рабочих столов Linux, особенно в том, какие элементы управления отображаются. Пытаются ли приложения следовать этим вариантам, остается на их усмотрение. Предоставление тех же элементов управления, которые используются в конкретной среде рабочего стола, не следует рассматривать как жесткое требование.

С точки зрения взаимодействия с пользователем важно убедиться, что элементы управления окнами отображаются на той же стороне окна, что и другие рабочие столы. В Linux это правая часть окна (как в Windows).

В X11 приложения могут полагаться на предоставленные системой панели заголовков, если они не хотят рисовать свои собственные элементы управления окнами. Для согласованного использования Wayland приложения всегда должны предоставлять свои собственные. Обычно с этим справляются наборы инструментов, но необработанные клиенты wayland могут использовать libdecor для общего решения.

Оконные украшения

Если ваше приложение использует темный визуальный стиль, а также предоставляемые системой декорации окна, следует использовать свойство окна X11 GTK_THEME_VARIANT=dark, чтобы гарантировать, что оформление окна соответствует остальной части окна приложения. Это можно сделать, запустив:

xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT dark

Тематика

Приложения Flatpak не могут напрямую использовать системную тему. Это происходит потому, что у flatpaks нет возможности использовать файлы данных или библиотеки в /usr (где обычно находятся системные темы). Решением было упаковать темы как Flatpaks, поскольку надежда на то, что хост будет иметь правильную версию для каждого Flatpak, лишает его преимуществ переносимости. Эти темы предоставляются как расширения, для среды выполнения Freedesktop, когда точкой расширения является Gtk, и для среды выполнения KDE, когда точкой расширения является Qt.

Система тем требует Flatpak 0.8.4+ и приложений, использующих последнюю версию org.gnome.Platform 3.24+, org.freedesktop.Platform 1.6+ или org.kde.Platform. 5.9+.

Установка тем

Инструкции для Gtk

Текущие темы Gtk упакованы в репозиторий flathub который вы можете добавить (если он еще не добавлен), запустив:

$ flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo

Чтобы просмотреть список упакованных тем, вы можете использовать команду flatpak search gtk3theme (доступно, начиная с версии Flatpak 0.10.1). Если вы используете более старую версию Flatpak, вы можете использовать команду flatpak remote-ls flathub | grep org.gtk.Gtk3theme. Разница в выводе между этими двумя командами заключается в том, что первая выводит идентификатор приложения, удаленное устройство, с которого поступает тема, и описание темы, а вторая выводит только полное имя пакета темы flatpak.

Вы можете установить темы с помощью команды flatpak install flathub org.gtk.Gtk3theme.Foo, заменив Foo на имя желаемой темы.

Инструкции для Qt

Чтобы темы Qt работали, должны быть установлены пакеты flatpak kstyle и platformtheme. Они упакованы в репозиторий kdeapps, который вы можете добавить, запустив:

$ flatpak remote-add kdeapps https://distribute.kde.org/kdeapps.flatpakrepo

После этого два пакета можно установить с помощью следующих команд:

$ flatpak install kdeapps org.kde.KStyle.Adwaita//5.9
$ flatpak install kdeapps org.kde.PlatformTheme.QGnomePlatform//5.9

Применение тем

Не существует идеального способа указать тему, используемую приложениями Flatpak. Приложения будут пытаться соответствовать используемой в настоящее время системной теме, если она соответствует какой-либо из установленных тем Flatpak, и будут использовать Adwaita (если они используют Gtk2 или Gtk3) или тему Qt по умолчанию (если они используют Qt), если соответствующая тема не обнаружена.

Начиная с Flatpak 0.10.1, система Flatpak может определять, соответствуют ли доступные системные темы каким-либо темам Flatpak, доступным в репозиториях, и, если да, автоматически устанавливает найденные темы во время обновления на основе `` gtk-theme`` Ключ dconf. Однако этот ключ содержать только одно значение, одно из используемых в настоящее время тем, что означает, что версии Flatpak совпадающих тем, которые в настоящее время не используются, не устанавливаются, пока эти темы не будут включены. Если ни одна из соответствующих системных тем в настоящее время не используются, приложения вернутся к Adwaita или теме Qt по умолчанию.

На X11 Gtk3 подбирает темы через XSettings. В частности, демон GNOME XSettings gsd-xsettings считывает значения DConf и преобразует их в значения XSettings. Чтобы это работало, вам нужен правильно настроенный демон xsettings. Gtk3 на Wayland подбирает темы напрямую через Dconf. Чтобы это работало, вы можете использовать KDE (kde-gtk-config > 5.11.95), GNOME, который работает из коробки, или вручную, или вручную настроить ключи dconf в /org/gnome/desktop/interface/. Чтобы опция DConf работала в Wayland, приложение также должно быть настроено для доступа к DConf.

Другие примечания по тематике

Что касается тем значков, начиная с Flatpak 0.8.8 значки хоста отображаются для гостя, поэтому обычно нет необходимости в наличии тем значков Flatpak.

Если вы используете параметр Global Dark Theme (удален в GNOME-Tweaks 3.28) в gnome-tweak-tool, он не будет работать, так как он просто записывает в settings.ini, который недоступен в песочница. Вместо этого используйте темные версии тем, если они существуют.