出自 Arch Linux 中文维基

引自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-hyprland1 不可用 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 不可用
  1. 與所有基於wlroots的混成器兼容,但是其與 Hyprland 配合使用時提供額外功能,例如共享單個窗口。
  2. 會將請求重定向至 GNOME/GTK/KDE/LXQt 後端
  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_DESKTOPWAYLAND_DISPLAY。其中 XDG_CURRENT_DESKTOP 需要設置為你使用的混成器,例如 XDG_CURRENT_DESKTOP=swayWAYLAND_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
提示:Sway 提供了一個 drop-in 文件以自動設置這些變量,參見 Sway#配置

詳見 [1][2]

配置 xdg-desktop-portal-wlr 的多顯示器選擇

xdg-desktop-portal-wlr 需要一個外部的選擇器來選擇要共享的屏幕。默認情況下,其會依次查找並使用 slurpwofibemenu。使用 slurp 時,在請求共享屏幕後你會看到一個十字準星,點擊你想共享的屏幕即可。使用 wofibemenu時,會顯示一個菜單以選擇要共享的顯示器。 如果沒有選擇器可用,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-gtksystemd/用戶單元。你也可以強制應用在wayland下運行以解決這個問題(例如應用使用了electron)。

參見