跳至內容

XDG 桌面門戶

出自 Arch Linux 中文维基

引自 Flatpak 文檔

門戶是用於安全訪問沙箱外資源的框架。沙箱內程序可以使用的特性包括:檢測網絡狀態;使用文件選擇器來打開文件;打開 URI;阻止設備睡眠、休眠或關機;列印;發送郵件;顯示通知;截取屏幕或錄屏[……]

門戶(portals)系統最初專為 Flatpak 應用程式設計,但任何應用程式均可藉助門戶訪問跨桌面環境和 UI 框架的統一功能。這一功能得到了廣泛使用,例如通過 PipeWireWayland 上實現屏幕共享,或讓 Firefox 採用與當前桌面環境相同 UI 框架的文件打開/保存對話框

安裝

[編輯 | 編輯原始碼]

安裝 xdg-desktop-portal 以及至少一個 #後端,該軟體包包含一個 systemd/用戶服務,通過 D-Bus 自動觸發啟動。

後端

[編輯 | 編輯原始碼]

當一個軟體通過 XDG 桌面門戶發起請求時,xdg-desktop-portal 會將這個請求轉發至可用的後端實現,由後端實現適合桌面環境的 UI,並訪問特定於桌面環境的 API 處理諸如打開 URI、錄製屏幕之類的請求。後端可以安裝多個,例如使用 Sway 可以安裝 xdg-desktop-portal-wlr 支持屏幕共享,並同時安裝 xdg-desktop-portal-gtk 作為後備,處理 xdg-desktop-portal-wlr 未實現的接口。

門戶後端配置儲存在 /usr/share/xdg-desktop-portal/portals/*.portal 中。門戶後端配置文件包含其支持的接口和桌面環境。

所有可用後端及其接口支持情況

[編輯 | 編輯原始碼]
後端 支持的桌面環境 使用的 UI 框架 接口支持情況
對話框 帳戶信息 應用程式選擇器 後台活動 剪貼板 桌面啟動項 電子郵件 文件選擇器 全局快捷鍵 用戶會話管理 輸入設備捕獲 系統通知 列印 遠程桌面 屏幕錄製 截屏 密鑰 系統設置 壁紙
xdg-desktop-portal-cosmic COSMIC iced
xdg-desktop-portal-dde 深度桌面環境 Qt 5
xdg-desktop-portal-gnome GNOME GTK 4
xdg-desktop-portal-gtk (通用) 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
  1. 適用於所有基於 wlroots 的混成器,但提供針對 Hyprland 的額外功能,例如可在截屏或屏幕錄製時共享單個窗口。
  2. 其也為 MATEXfce 提供部分支持。

除此以外,以下後端跨桌面環境實現了特定接口:

配置

[編輯 | 編輯原始碼]

當收到請求時,xdg-desktop-portal 將會使用位於 /usr/share/xdg-desktop-portal/桌面環境-portals.conf 的配置文件,其中桌面環境環境變量 XDG_CURRENT_DESKTOP 決定。配置文件由桌面環境提供,決定應當使用的後端。

如果需要自定義配置,或者使用的桌面環境並沒有提供默認配置,可以創建門戶配置文件 $XDG_CONFIG_HOME/xdg-desktop-portal/portals.conf 以決定全局或者特定接口使用的後端。如果使用多個桌面環境,也可以創建並配置特定桌面環境的配置文件 $XDG_CONFIG_HOME/xdg-desktop-portal/桌面環境-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=混成器名称
注意:這些環境變量需要在混成器啟動之前設置,通常通過混成器自身的配置完成,請參見混成器的文檔說明。
提示:
  • Sway 提供了一個可自動完成此操作的插入文件,請參閱 Sway#配置
  • Hyprland 不會自動設置這些環境變量,需要通過配置手動指定,請參閱 Hyprland Wiki

更多詳情請參閱 [1][2]

在多顯示器環境下使用 xdg-desktop-portal-wlr

[編輯 | 編輯原始碼]

xdg-desktop-portal-wlr 需要一個外部選擇器來選擇要共享的顯示器。默認按順序查找 slurpwofibemenu。若使用 slurp,收到屏幕共享請求後,滑鼠指針會變成十字形,需要點擊要共享的屏幕。若使用 wofi 或 bemenu,會出現一個可用顯示器的菜單供選擇。如果沒有任何選擇器可用,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 運行(最簡單的檢查方法是運行 xeyes,然後將滑鼠指針移至應用程式窗口內,若程序運行在 Xwayland 下,其中眼睛會看向滑鼠指針),那麼 xdg-desktop-portal-gtk 會按需啟動,但在選擇文件後可能沒有任何反應。這種情況下,為 xdg-desktop-portal-gtk 的環境添加 DISPLAY=:0 可能會解決問題。要實現此操作,可以按照前文(#門戶無法啟動)關於 import-environment 的說明進行設置,或者直接編輯 xdg-desktop-portal-gtk 的 systemd 用戶單元文件。此外,也可以嘗試通過配置開啟應用程式的原生 Wayland 支持(例如對於 Electron 程序)。

參見

[編輯 | 編輯原始碼]