XDG デスクトップ ポータル
- Portals は、アプリケーションのサンドボックスの外部から安全にリソースにアクセスするためのフレームワークです。それらは、ネットワークのステータスを決定する、ファイルチューザーでファイルを開く、URIを開く、スクリーンショットやスクリーンキャストを取るなど、アプリケーションに一連の共通機能を提供します [...]
Portals は Flatpak を通じてサンドボックス化されたアプリケーションで使用するために設計されましたが、任意のアプリケーションは Portals を使用して、デスクトップやツールキットに関係なく特徴に均一なアクセスを提供できます。これは一般的に、例えば、 PipeWire 経由で Wayland にスクリーン共有を許可するためや、現在の デスクトップ環境 と同じツールキットを使用する Firefox 上でファイルの開くと保存のダイアログを使用するために使用されます。
目次
インストール
xdg-desktop-portal と一つ以上のバックエンドをインストールします。パッケージには、D-Bus を通じて自動的に起動される systemd/ユーザー サービスが含まれています。
バックエンド
アプリケーションがポータルを通じてリクエストを行うと、それは xdg-desktop-portal
によって処理され、それからバックエンドの実装に転送されます。これにより、さまざまなデスクトップ環境にフィットする適切なユーザーインターフェースを提供し、通知の表示や画面の録画などのリクエストに対して環境固有の API へアクセスするクリーンな方法を可能にします。
複数のバックエンドをインストールでき、それらは /usr/share/xdg-desktop-portal/portals/*.portal
に配置しています。それぞれのポータルバックエンドファイルには、それが扱うことができるインターフェースのリストと、それが使用できるデスクトップ環境が含まれています。リクエストが行われると、xdg-desktop-portal
は XDG_CURRENT_DESKTOP
環境変数 を使用して、そのリクエストにどのバックエンドを使用するかを決定します。現在のデスクトップに対して使用できるバックエンドが複数ある場合、アルファベット順で最初のものが選択されます。現在のデスクトップに対してインターフェースを扱うバックエンドがない、現在のデスクトップに対して利用可能なバックエンドがない、または xdg-desktop-portal
が現在のデスクトップを決定できない場合、それは要求されたインターフェースをサポートする全てのインストールされたポータルの中からアルファベット順で最初のポータルを選択します。
例えば、Sway ユーザーはスクリーンシェアリングサポートのために xdg-desktop-portal-wlr を使用し、xdg-desktop-portal-wlr が実装していない他のすべてのインターフェースに対してフォールバックとして xdg-desktop-portal-gtk を使用するかもしれません。
バックエンドとインターフェースのリスト
以下の表では、利用可能な全てのバックエンドと、特定の一般的なインターフェースに対するサポートを一覧表示しています。
バックエンド | ファイル選択ダイアログ | スクリーンショットとスクリーンキャスト |
---|---|---|
xdg-desktop-portal-dde | あり | Deepin Desktop Environment において可 |
xdg-desktop-portal-gnome | あり | GNOME において可 |
xdg-desktop-portal-gtk | あり | 不可 |
xdg-desktop-portal-kde | あり | KDE において可 |
xdg-desktop-portal-hyprland1 | なし | 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 | 不可 |
- すべての wlroots ベースのコンポジタで動作しますが、Hyprland と併用すると、個々のウィンドウの共有などの追加機能が提供されます。
- リクエストを GNOME/GTK/KDE/LXQt それぞれのバックエンドにリダイレクトします。
- ターミナルファイルマネージャーをファイル選択ダイアログとして使用できるようにします。
設定
リクエストの発行時、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
を動作させるには、XDG_CURRENT_DESKTOP
と WAYLAND_DISPLAY
環境変数が systemd ユーザーセッション 内に設定されている必要があります。XDG_CURRENT_DESKTOP
は、あなたのコンポジタの名前に設定する必要があります(例えば、XDG_CURRENT_DESKTOP=sway
)。WAYLAND_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=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 を参照してください。
KDE Plasma で GTK アプリケーションのフォント描画が汚い
一部の GTK アプリケーションは Plasma 上でフォントを正しく描画するために xdg-desktop-portal-gtk を必要とします。このパッケージをインストールし、以下を実行してください:
$ /usr/lib/xdg-desktop-portal --replace
参照
- Portal Documentation: すべての API を一覧表にしたもので、アプリケーションやバックエンドが実装できます。