引自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
)。