Skip to content

xdg-desktop-portalのバックエンド選択ルール

xdg-desktop-portalxdg-desktop-portal-gtkxdg-desktop-portal-wlr など1つ以上のバックエンドを持つことがある。

上記のWikiによると、アプリケーションからD-Busで環境へのアクセスを要求されたとき、ポータルは /usr/share/xdg-desktop-portal 以下にある XDG_CURRENT_DESKTOP 環境変数の名前がついたファイルを探す。例えば wlr の場合、参照されるファイルは /usr/share/xdg-desktop-portal/wlr-portals.conf となる。

[preferred]
default=hyprland;gtk

上記はHyprlandの例だが、このようにバックエンドが並んでいるので、次はリクエストを処理できるバックエンドを探索する。このとき /usr/share/xdg-desktop-portal/portals 以下に default パラメータで記述されていた順に、まずは hyprland.portal でてリクエストに対応できるか確認する。

ポータルファイルの内容は次のようになっていて、詳細は分からないけれど Interfaces が対応できるサービスなのだろう。

[portal]
DBusName=org.freedesktop.impl.portal.desktop.wlr
Interfaces=org.freedesktop.impl.portal.Screenshot;org.freedesktop.impl.portal.ScreenCast;
UseIn=wlroots;sway;Wayfire;river;phosh;Hyprland;

対応できない要求であれば、次は gtk.portal にフォールバックして同じように探索する。それでも対応できなければ、最終的にアルファベット順で要求に対応できるバックエンドを使うらしい。

要求に対して、特定のバックエンドを使うよう強制するしくみもある。例えばスクリーンキャスト要求には必ず gtk バックエンドを使わせることが可能だが、これを使いたい状況はあまり思いつかない。

ところでHyprlandの場合、

Terminal window
XDG_CURRENT_DESKTOP=Hyprland

となっているが、ルーティングの際に大文字小文字は区別するんだろうか。