引自Flatpak文檔:
- 門戶是一種用於安全地訪問應用程式沙箱外部資源的框架。它們為應用程式提供了一系列常見的功能,包括:確定網絡狀態、使用文件選擇器打開文件、打開URI、進行屏幕截圖或錄屏[...]
門戶(Portals)是為了 Flatpak 應用程式使用而設計的,但是任何應用程式都可以使用門戶來統一訪問獨立於桌面和工具包的功能。例如,在Wayland上通過 PipeWire 實現屏幕共享,在 Firefox 上使用和您當前的桌面環境相同的打開和保存文件對話框。
安裝
安裝 xdg-desktop-portal包 以及至少一個後端。 此軟體包包含一個會自動通過 D-Bus 啟動的 systemd/用戶服務。
後端
當一個軟體通過XDG桌面門戶發起請求時, xdg-desktop-portal
會自動將這個請求轉發至可用後端實現。這可在不同的桌面環境中訪問特定桌面環境的 API,例如打開URI或錄製屏幕等請求。你也可以安裝多個後端進行使用:例如使用 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 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 | – | 否 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 否 | 是 | 否 | 是 | 是 |
除此以外,以下軟體包可以提供特定的後端服務,而不特定於桌面環境:
- darkman包 實現了系統設置門戶後端(僅限於顏色方案設置)。
- gnome-keyring包 實現了密匙門戶後端。
- kwallet包 實現了密鑰門戶後端。
- xdg-desktop-portal-shanaAUR 實現了文件選擇器門戶後端,其會將請求重定向至 GNOME/GTK/KDE/LXQt 後端。
- xdg-desktop-portal-termfilechooser-gitAUR 實現了文件選擇器門戶後端,其允許使用終端文件選擇器作為文件選擇器。
配置
當收到請求時,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
或 xdg-desktop-portal-hyprland包 正常運行,你需要在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
- Sway 提供了一個配置文件以自動設置這些變量,參見 Sway#配置。
- Hyprland 可能不會自動設置這些環境變量,這種情況下你需要手動設置環境變量,參見 Hyprland Wiki。
配置 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
)。