XDG Desktop Portal (Русский)
- Порталы — это фреймворк для обеспечения безопасного доступа к ресурсам, находящимся за пределами песочницы приложения. Они предоставляют приложениям ряд часто используемых функций, в том числе: определение состояния сети, открытие файла через диалог выбора файла, открытие URI, создание скриншотов и скринкастов.
Порталы были разработаны для использования с приложениями, запускаемыми в песочнице Flatpak, но их может использовать любое приложение для реализации функций независимо от используемого инструментария или текущей среды рабочего стола. Это обычно используется, например, для демонстрации экрана в сеансах Wayland через PipeWire или для использования системых диалогов открытия и сохранения файла в Firefox.
Установка
Установите пакет xdg-desktop-portal, а также один или несколько бэкендов. Пакет предоставляет пользовательскую службу, которая будет запускаться автоматически через D-Bus.
Бэкенды
Когда приложение отправляет запрос в портал, его обрабатывает xdg-desktop-portal
, который затем перенаправляет его в конкретный бэкенд. Это позволяет бэкендам реализовывать подходящие пользовательские интерфейсы, которые вписываются в среду рабочего стола, и использовать специфические для среды API запросов вроде открытия ссылки или захвата экрана. Можно установить и использовать несколько бэкендов одновременно. Например, в Sway может использоваться xdg-desktop-portal-wlr для захвата экрана и xdg-desktop-portal-gtk в качестве запасного варианта для всех остальных интерфейсов, которые xdg-desktop-portal-wlr не реализует.
Определения бэкэндов находятся в файлах /usr/share/xdg-desktop-portal/portals/*.portal
. Каждый файл содержит список интерфейсов, которые он может обрабатывать, и сред рабочего стола, которые он поддерживает.
Список бэкендов и интерфейсов
В этой таблице перечислены все доступные бэкенды и информация о поддержке ими некоторых часто используемых интерфейсов.
Бэкенд | Поддерживаемые среды | Тулкит | Access portal | Account portal | App chooser portal | Background portal | Clipboard portal | Dynamic launcher portal | Email portal | File chooser portal | Global shortcuts portal | Inhibit portal | Input capture portal | Notification portal | Print portal | Remote desktop portal | Screen cast portal | Screenshot portal | Secret portal | Settings portal | Wallpaper portal |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
xdg-desktop-portal-cosmic | COSMIC | iced | Да | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | Нет | Нет | Нет | Нет | Да | Да | Нет | Да | Нет |
xdg-desktop-portal-dde | Deepin | Qt 5 | Да | Да | Да | Да | Нет | Нет | Нет | Да | Да | Да | Нет | Да | Нет | Нет | Нет | Да | Да | Да | Да |
xdg-desktop-portal-gnome | GNOME | GTK 4 | Да | Да | Да | Да | Да | Да | Нет | Yes | Нет | Нет | Да | Да | Да | Да | Да | Да | Нет | Да | Да |
xdg-desktop-portal-gtk | generic | GTK 3 | Да | Да | Да | Нет | Нет | Да | Да | Да | Нет | Да | Нет | Да | Да | Нет | Нет | Нет | Нет | Да | Нет |
xdg-desktop-portal-hyprland | Hyprland1 | Qt 6 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Да | Нет | Нет | Нет | Да | Да | Нет | Нет | Нет |
xdg-desktop-portal-kde | KDE Plasma | Qt 6 | Да | Да | Да | Да | Нет | Да | Да | Да | Да | Да | Да | Да | Да | Да | Да | Да | Нет | Да | Нет |
xdg-desktop-portal-liri-gitAUR | Liri | Qt 5 | Да | Да | Да | Да | Нет | Нет | Да | Да | Нет | Да | Нет | Да | Да | Нет | Да | Да | Нет | Да | Да |
xdg-desktop-portal-lxqt | LXQt | Qt 6 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
xdg-desktop-portal-tdAUR | theDesk | Qt 6 | Да | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | Нет | Да | Нет | Нет | Нет | Да | Нет | Да | Нет |
xdg-desktop-portal-wlr | wlroots | – | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Да | Нет | Нет | Нет |
xdg-desktop-portal-xapp | Cinnamon2 | – | Нет | Нет | Нет | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет | Нет | Нет | Нет | Да | Нет | Да | Да |
- Работает в любых композиторах, основанных на wlroots, но при использовании в Hyprland предоставляет дополнительные возможности вроде захвата отдельных окон.
- Также частично поддерживает MATE и Xfce.
Пакеты, которые предоставляют только определённый интерфейс и не зависят от среды рабочего стола:
- darkman реализует Settings portal (только для настройки цветовой схемы).
- gnome-keyring реализует Secret portal.
- kwallet реализует Secret portal.
- xdg-desktop-portal-shanaAUR реализаует File chooser portal, перенаправляя запросы в бэкенды GNOME/GTK/KDE/LXQt.
- xdg-desktop-portal-termfilechooser-gitAUR реализует File chooser portal, позволяет использовать консольный файловый менеджер для выбора файла.
Настройка
При получении запроса xdg-desktop-portal
будет использовать файл /usr/share/xdg-desktop-portal/DE-portals.conf
, где DE основано на переменной окружения XDG_CURRENT_DESKTOP
. Эти файлы предоставляются самими средами рабочего стола и определяют, какие бэкенды должны использоваться при работе конкретной среды.
Если вы хотите переопределить стандартные настройки или ваша среда рабочего стола их не предоставляет, вы можете создать файл настроек $XDG_CONFIG_HOME/xdg-desktop-portal/portals.conf
и в нём указать, какие бэкенды вы хотите использовать, либо в целом, либо для каждого отдельного интерфейса. Если вы используете несколько сред рабочего стола, вы также можете создать несколько файлов $XDG_CONFIG_HOME/xdg-desktop-portal/DE-portals.conf
для каждой среды.
Например, если ваша среда рабочего стола не предоставляет бэкенд и вы хотите использовать xdg-desktop-portal-gtk по умолчанию, но при этом использовать диалог выбора файла из LXQt через бэкенд xdg-desktop-portal-lxqt, вы можете использовать следующую конфигурацию:
~/.config/xdg-desktop-portal/portals.conf
[preferred] default=gtk org.freedesktop.impl.portal.FileChooser=lxqt
Смотрите portals.conf(5) для более подробной информации.
Указание среды рабочего стола
В некоторых случаях, например, при использовании автономного оконного менеджера, вы можете захотеть заставить xdg-desktop-portal
думать, что вы используете определённую среду рабочего стола. Этого можно добиться, указав переменную окружения XDG_CURRENT_DESKTOP для пользовательского юнита xdg-desktop-portal.service
. Например, чтобы использовать бэкенды из KDE, создайте такой drop-in файл:
~/.config/systemd/user/xdg-desktop-portal.service.d/override.conf
[Service] Environment="XDG_CURRENT_DESKTOP=KDE"
Решение проблем
Портал не запускается
Чтобы xdg-desktop-portal-wlr и xdg-desktop-portal-hyprland работали, в пользовательском экземпляре systemd должны быть установлены переменные окружения XDG_CURRENT_DESKTOP
и WAYLAND_DISPLAY
.
Переменная XDG_CURRENT_DESKTOP
должна содержать имя вашего композитора, например XDG_CURRENT_DESKTOP=sway
. Переменная WAYLAND_DISPLAY
устанавливается композитором автоматически.
Проверьте, установлены ли эти переменные, командой systemctl --user show-environment
. Если нет, импортируйте их в systemd и dbus, выполнив следующие команды перед запуском композитора (например, добавьте их в файл настроек композитора):
$ systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP $ dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=имя_композитора
- Sway предоставляет drop-in файл, который выполняет это автоматически; смотрите раздел Sway#Configuration.
- Hyprland может не устанавливать эти переменные автоматически. Можно установить их вручную, как описано в Hyprland Wiki.
Смотрите [1] и [2] для более подробной информации.
Использование нескольких мониторов с xdg-desktop-portal-wlr
Для xdg-desktop-portal-wlr
требуется внешний инструмент выбора монитора, который нужно захватить. По умолчанию он пробует использовать slurp, wofi и bemenu в этом порядке. При использовании slurp в момент запроса совместного доступа к экрану появится курсор с перекрестием, и вам нужно будет щёлкнуть тот экран, к которому вы хотите предоставить доступ. При использовании wofi или bemenu будет показано меню с доступными мониторами. Если ни один из инструментов выбора не доступен, xdg-desktop-portal-wlr
будет захватывать первый найденнй монитор, смотрите xdg-desktop-portal-wlr(5) § SCREENCAST OPTIONS.
Некрасивые шрифты у приложений GTK, запущенных в KDE Plasma
Некоторым приложениям GTK нужен xdg-desktop-portal-gtk для корректной отрисовки шрифтов в Plasma. Установите его и затем выполните:
$ /usr/lib/xdg-desktop-portal --replace
Не работает выбор файла в приложениях X11
Если приложение работает на X через Xwayland (самый простой способ проверить — запустить xeyes
и посмотреть, следит ли он за курсором мыши, находящимся над интересующим приложением), то диалог выбора файла xdg-desktop-portal-gtk
будет отображаться, но после выбора файла ничего не произойдет. В этом случае может помочь добавление DISPLAY=:0
в окружение xdg-desktop-portal-gtk
. Для этого вы можете либо следовать приведённым выше инструкциям про import-environment
, либо просто отредактировать пользовательский юнит xdg-desktop-portal-gtk
. В качестве альтернативы вы можете принудительно запустить приложение под Wayland (например, если оно использует Electron).