跳转至内容

XDG 桌面门户

来自 ArchWiki

来自 Flatpak 文档

门户是应用程序沙箱外部安全访问资源的框架。它们为应用程序提供了一系列通用功能,包括:确定网络状态、使用文件选择器打开文件、打开 URI、截屏和录屏 [...]

门户是为通过 Flatpak 沙箱化的应用程序设计的,但任何应用程序都可以使用门户来提供独立于桌面和工具包的统一功能访问。例如,这通常用于 在 Wayland 上通过 PipeWire 允许屏幕共享,或在 Firefox 中使用与当前 桌面环境 相同的工具包打开和保存文件的对话框。

安装

安装 xdg-desktop-portal 和一个或多个 后端。该软件包包含一个 systemd/User 服务,它将通过 D-Bus 自动启动。

后端

当应用程序向门户发送请求时,该请求由 xdg-desktop-portal 处理,然后将其转发给后端实现。这允许实现提供适合用户桌面环境的合适用户界面,并访问用于打开 URI 或录制屏幕的请求的环境特定 API。可以同时安装和使用多个后端。例如,Sway 设置可以使用 xdg-desktop-portal-wlr 来支持屏幕共享,并使用 xdg-desktop-portal-gtk 作为 xdg-desktop-portal-wlr 未实现的任何其他接口的回退。

门户后端定义位于 /usr/share/xdg-desktop-portal/portals/*.portal。每个门户后端文件包含它可以处理的接口列表以及它支持的桌面环境。

后端和接口列表

下表列出了所有可用的后端以及它们对某些常用接口的支持情况。

后端 支持的环境 工具包 访问门户 账户门户 应用程序选择器门户 背景门户 剪贴板门户 动态启动器门户 邮件门户 文件选择器门户 全局快捷键门户 禁止门户 输入捕获门户 通知门户 打印门户 远程桌面门户 屏幕录制门户 截图门户 秘密门户 设置门户 壁纸门户
xdg-desktop-portal-cosmic COSMIC iced
xdg-desktop-portal-dde Deepin Qt 6
xdg-desktop-portal-gnome GNOME GTK 4
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-luminousAUR wlroots Slint
xdg-desktop-portal-lxqt LXQt Qt 6
xdg-desktop-portal-phosh Phosh GTK 4
xdg-desktop-portal-tdAUR theDesk Qt 6
xdg-desktop-portal-wlr wlroots
xdg-desktop-portal-xapp Cinnamon2
  1. 与所有基于 wlroots 的合成器都能正常工作,但在与 Hyprland 一起使用时提供额外功能,例如共享单个窗口。
  2. 还为 MATEXfce 提供部分支持。

以下软件包仅提供特定的后端,而非特定于桌面环境

  • darkman 实现设置门户后端(仅用于颜色方案设置)。
  • gnome-keyring 实现秘密门户后端。
  • keepassxc 实现秘密门户后端。
  • kwallet 实现秘密门户后端。
  • pikeruAUR 使用自己的 GUI 应用程序实现文件选择器门户后端。
  • xdg-desktop-portal-shanaAUR 实现文件选择器门户后端。它会将请求重定向到 GNOME/GTK/KDE/LXQt 后端。
  • xdg-desktop-portal-termfilechooser-gitAUR 实现文件选择器门户后端。它允许使用 终端文件管理器 作为文件选择器。
  • xdg-desktop-portal-termfilechooser-hunkyburrito-gitAUR 是已归档的 xdg-desktop-portal-termfilechooser-git 的新分支,它实现了文件选择器门户后端,并允许使用 终端文件管理器 作为文件选择器。
  • portty-gitAUR 实现文件选择器门户后端。它可以生成交互式终端会话,并带有用于使用任何命令行工具选择文件的 shell 模拟。还支持无头模式,用于从现有终端控制对话框而不启动新窗口,以及队列模式,用于在应用程序请求对话框之前预先选择文件。

配置

当发出请求时,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 作为通用回退,同时通过 xdg-desktop-portal-lxqt 使用 LXQt 文件选择器,您可以使用以下配置

~/.config/xdg-desktop-portal/portals.conf
[preferred]
default=gtk
org.freedesktop.impl.portal.FileChooser=lxqt

有关更多信息,请参阅 portals.conf(5)

强制桌面环境

在某些情况下,例如当您使用独立的 窗口管理器 时,您可能希望让 xdg-desktop-portal 认为您正在使用特定的桌面环境。这可以通过为 xdg-desktop-portal.service 用户单元 设置 XDG_CURRENT_DESKTOP 环境变量来实现,方法是使用 放置片段。例如,要使用与 KDE 关联的后端

~/.config/systemd/user/xdg-desktop-portal.service.d/override.conf
[Service]
Environment="XDG_CURRENT_DESKTOP=KDE"

故障排除

门户未启动

为了让 xdg-desktop-portal-wlrxdg-desktop-portal-hyprland 工作,必须在 systemd 用户会话 中设置 XDG_CURRENT_DESKTOPWAYLAND_DISPLAY 环境变量。

XDG_CURRENT_DESKTOP 必须设置为您的合成器名称,例如 XDG_CURRENT_DESKTOP=swayWAYLAND_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=compositor_name
注意 这些环境变量需要在合成器启动之前设置。这通常通过合成器自己的配置完成,有关详细信息,请参阅其文档。
提示

有关更多详细信息,请参阅 [1][2]

将 xdg-desktop-portal-wlr 与多个显示器一起使用

xdg-desktop-portal-wlr 需要一个外部选择器来选择要共享的显示器。默认情况下,它按以下顺序查找 slurpwofibemenu。使用 slurp 时,在发出屏幕共享请求后,您将看到一个十字准星光标,您需要单击要共享的屏幕。使用 wofibemenu 时,您将看到一个包含可用显示器列表的菜单。如果没有可用的选择器,xdg-desktop-portal-wlr 将回退到找到的第一个显示器。有关更多信息,请参阅 xdg-desktop-portal-wlr(5) § SCREENCAST OPTIONS

KDE Plasma 上 GTK 应用程序中的字体渲染效果不佳

某些 GTK 应用程序需要在 Plasma 上安装 xdg-desktop-portal-gtk 才能正确渲染字体。安装它然后运行

$ /usr/lib/xdg-desktop-portal --replace

GTK(可能还有其他)文件选择器无法工作

如果应用程序通过 Xwayland 在 X 上运行(最简单的检查方法是运行 xeyes 并查看它们是否在您关心的应用程序上跟随鼠标),那么 xdg-desktop-portal-gtk 将按需出现,但在您选择文件后将什么都不会发生。在这种情况下,将 DISPLAY=:0 添加到 xdg-desktop-portal-gtk 的环境变量中可能会有帮助。为此,您可以按照上面关于 import-environment 的说明进行操作,或者直接编辑 xdg-desktop-portal-gtk 的 systemd 用户单元文件。或者,您可以强制应用程序在 Wayland 上运行(例如,如果它正在使用 Electron)。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.