JavaScriptを有効にしてください

xdg-desktop-portalで特定の実装の使用を強制する

 ·   ·  ☕ 3 分で読めます

おことわり

デフォルトの設定値やインストールされているxdg-desktop-portal実装のバージョンはお使いの環境(ディストロ等)によって変わると思いますので、適宜読み替えてください。
当方は記事執筆時点でのArchLinuxの各最新パッケージを使用しています。

xdg-desktop-portalの使用する実装の決め方

英語が読める人はArchWikiも合わせてどうぞ。

まず、インストールされている実装は/usr/share/xdg-desktop-portal/portalsを眺めるとわかります。

1
2
3
4
❯ ls /usr/share/xdg-desktop-portal/portals/*.portal
/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal
/usr/share/xdg-desktop-portal/portals/gtk.portal
/usr/share/xdg-desktop-portal/portals/hyprland.portal

この場合、(gnome-keyringを除いては)xdg-desktop-portal-gtkxdg-desktop-portal-hyprlandが見えています。
この中身はこのようになっています。

[portal]
DBusName=org.freedesktop.impl.portal.desktop.gtk
Interfaces=org.freedesktop.impl.portal.FileChooser;org.freedesktop.impl.portal.AppChooser;org.freedesktop.impl.portal.Print;org.freedesktop.impl.portal.Notification;org.freedesktop.impl.portal.Inhibit;org.freedesktop.impl.portal.Access;org.freedesktop.impl.portal.Account;org.freedesktop.impl.portal.Email;org.freedesktop.impl.portal.DynamicLauncher;org.freedesktop.impl.portal.Lockdown;org.freedesktop.impl.portal.Settings;
UseIn=gnome

このUseIn(どうやらDeprecatedらしいですが、現行のデフォルト設定にはまだ記載されています)はこの実装が使用されるデスクトップ環境を見ているわけですが、これはどこから取ってきているのかというと$XDG_CURRENT_DESKTOPです。
Hyprlandのようなマイナーな環境ではその環境に特有の実装が必要なインターフェイス(Ex:画面共有)のみがxdg-desktop-portal-hyprlandのように提供されており、それ以外はアルファベット順のフォールバックでxdg-desktop-portal-gtkに投げるという使われ方が想定されているようです。

…勘の良い方ならお気づきになると思いますが、これはうまく動きません。
なぜならHyprlandでは$XDG_CURRENT_DESKTOPHyprlandになるのでxdg-desktop-portal-gtkのUseInに引っかからないからです。
$XDG_CURRENT_DESKTOPを手動でgnomeにセットしていても逆に画面共有が潰れることになります。

このように、必ずしも適切な実装が自動選択されるとは限らず、このような状況では突然firefoxがファイルを開くウインドウを起動してくれなくなってしまうなどの問題が発生します。

解決策

英語が読める人はbbs.archlinux.orgの投稿をどうぞ。

~/.config/xdg-desktop-portal/portals.confなどに設定を書きます。

もっとも単純なのは、以下のように明示的にデフォルト実装の優先順位をつけてあげることです。

[preferred]
default=gnome-keyring;hyprland;gtk

ただ、インターフェイス(機能)ごとに明示的に実装を指定してあげたいと思うときもあるでしょう。
そのようなときは、そのインターフェイス名をキーにして実装名を書いてあげます。
下の例では、Secretのインターフェイス実装をgnome-keyringが担うよう指定しています。

org.freedesktop.impl.portal.Secret=gnome-keyring

設定完了後はxdg-desktop-portalを利用するアプリケーションを一旦終了した上でsystemctl --user restart xdg-desktop-portalをお忘れなく。

共有

hayabusa2yk
著者
hayabusa2yk
Dev/Admin of servers