XDG 桌面门户
引自Flatpak文档:
- 门户是一种用于安全地访问应用程序沙箱外部资源的框架。它们为应用程序提供了一系列常见的功能,包括:确定网络状态、使用文件选择器打开文件、打开URI、进行屏幕截图或录屏[...]
门户(Portals)是为了 Flatpak 应用程序使用而设计的,但是任何应用程序都可以使用门户来统一访问独立于桌面和工具包的功能。例如,在Wayland上通过 PipeWire 实现屏幕共享,在 Firefox 上使用和您当前的桌面环境相同的打开和保存文件对话框。
安装[编辑 | 编辑源代码]
安装 xdg-desktop-portal包 以及至少一个后端。 此软件包包含一个会自动通过 D-Bus 启动的 systemd/用户服务。
后端[编辑 | 编辑源代码]
当一个软件通过XDG桌面门户发起请求时, xdg-desktop-portal
会自动将这个请求转发至可用后端实现。这可在不同的桌面环境中访问特定桌面环境的 API,例如显示通知或录制屏幕等请求。你也可以安装多个后端:例如使用 Sway 的用户可以安装 xdg-desktop-portal-wlr包 用于屏幕共享的支持,同时安装 xdg-desktop-portal-gtk包 作为后备,以处理 xdg-desktop-portal-wlr 未实现的接口。
门户后端配置储存在 /usr/share/xdg-desktop-portal/portals/*.portal
中。每一个门户后端配置文件都包含了其支持的接口,以及其支持的桌面环境。
一些后端以及其支持情况[编辑 | 编辑源代码]
以下列出了所有的可用后端以及其接口的支持情况。
后端 | 文件选择器 | 截图以及屏幕录制 |
---|---|---|
xdg-desktop-portal-dde包 | 可用 | 可用,需要桌面环境 深度桌面环境 |
xdg-desktop-portal-gnome包 | 可用 | 可用,需要桌面环境 GNOME |
xdg-desktop-portal-gtk包 | 可用 | 不可用 |
xdg-desktop-portal-kde包 | 可用 | 可用,需要桌面环境 KDE |
xdg-desktop-portal-hyprland包1 | 不可用 | Yes,需要桌面环境 wlroots包 |
xdg-desktop-portal-lxqt包 | 可用 | 不可用 |
xdg-desktop-portal-wlr包 | 不可用 | 可用, 需要桌面环境 wlroots包 |
xdg-desktop-portal-xapp包 | 不可用 | 可用, 需要桌面环境 Cinnamon |
xdg-desktop-portal-liri-gitAUR | 可用 | 可用, 需要桌面环境 Liri |
xdg-desktop-portal-shanaAUR | 可用2 | 不可用 |
xdg-desktop-portal-tdAUR | 可用 | 不可用 |
xdg-desktop-portal-termfilechooser-gitAUR | 可用3 | 不可用 |
配置[编辑 | 编辑源代码]
当收到请求时,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"
注意,如果你不是通过 systemctl 修改的配置单元文件,请进行一次 daemon-reload 操作。
疑难解答[编辑 | 编辑源代码]
xdg-desktop-portal-wlr 在sway上不会自动启动[编辑 | 编辑源代码]
要让 xdg-desktop-portal-wlr
正常运行,你需要在systemd 用户会话中设置环境变量 XDG_CURRENT_DESKTOP
和 WAYLAND_DISPLAY
。其中 XDG_CURRENT_DESKTOP
需要设置为你使用的混成器,例如 XDG_CURRENT_DESKTOP=sway
。WAYLAND_DISPLAY
应当由混成器自动设置。
你可以通过命令 systemctl --user show-environment
来检查这些环境变量是否被设置。如果没有,请在启动混成器之后运行以下命令,以将这些环境变量导入到system用户会话以及dbus中(例如将其包含在混成器的配置文件中)。
$ systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP $ dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=compositor_name
配置 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中字体渲染很差[编辑 | 编辑源代码]
在KDE桌面环境中,一些GTK应用需要 xdg-desktop-portal-gtk包 才能正确渲染字体。安装并运行命令:
$ /usr/lib/xdg-desktop-portal --replace
文件选择器(GTK)无法正常工作[编辑 | 编辑源代码]
如果应用是在 xwayland
上运行的(最简单的检查方式是运行 xeyes
,随后查看其是否会跟随在应用窗口内的鼠标指针,如果是,则这个应用是在xwayland
上运行的),且 xdg-desktop-portal-gtk
会按需显示,但是选择文件后没有任何效果。这种情况下,请尝试添加 xdg-desktop-portal-gtk
的环境变量 DISPLAY=:0
。你可以遵循上述有关 import-environment
的指令,或直接编辑 xdg-desktop-portal-gtk
的systemd/用户单元。你也可以强制应用在wayland下运行以解决这个问题(例如应用使用了electron
)。