おことわり
デフォルトの設定値やインストールされているxdg-desktop-portal実装のバージョンはお使いの環境(ディストロ等)によって変わると思いますので、適宜読み替えてください。
当方は記事執筆時点でのArchLinuxの各最新パッケージを使用しています。
xdg-desktop-portalの使用する実装の決め方
英語が読める人はArchWikiも合わせてどうぞ。
まず、インストールされている実装は/usr/share/xdg-desktop-portal/portals
を眺めるとわかります。
|
|
この場合、(gnome-keyringを除いては)xdg-desktop-portal-gtk
とxdg-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_DESKTOP
はHyprland
になるので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
をお忘れなく。