Discord(Vesktop)でFlatpak経由のRPCを取得してみる

Flatpak版PrismLauncherで起動しているインスタンスのRPCが取得できなかったため対処法をしらべてみた。

前提条件

Discord(Vesktop)はFlatpak版だとRPCの取得が難しいため、ネイティブ版の使用を前提とする。
また、下記よりVesktop含むDiscordクライアントを一括してDiscordと呼称し、個別の設定がある場合は別途記載することとする。

説明

DiscordのRPCは通常以下の場所にあるUNIXソケットを使用する。

/run/user/$UID/discord-ipc-*

しかし、ソケットはDiscordの起動/終了で生成/削除され、Flatpakのサンドボックスの仕組み上、実行ごとに変わるソケットファイルを直接マウントするのは難しい。

そこで、Flatpakが標準的に参照する”Flatpak用のRPCディレクトリ”に受け口ソケットを用意し、そこからホストの実ソケットへブリッジするようにする。

/run/user/$UID/app/com.discordapp.Discord/

ありがたいことにこのような動作を行うservice(discord-flatpak-rpc-bridge)がArcitec氏によって公開されているためそれを使わせてもらう。

GitHub – Arcitec/discord-flatpak-rpc-bridge: Enables the use of Discord’s Rich Presence (RPC) in Flatpak applications when your Discord client is running as a native (host) application.

このserviceはFlatpak内に固定ディレクトリを作り、そこからホスト側のDiscordソケットへ透過的に接続する。

下記の手法をそのまま行うとserviceがenableされ、systemdによって自動起動されるようになる。
それが気になる場合は配布元のReadme.mdを参照して各自設定してほしい。

discord-flatpak-rpc-bridgeのインストール

リポジトリのクローン

git clone https://github.com/Arcitec/discord-flatpak-rpc-bridge

インストール

cd discord-flatpak-rpc-bridge
./install.sh

Discord側の設定

Discord公式クライアント/Vesktop共に「アクティビティのプライバシー」>「アクティビティを共有」を有効にしないとRPCを取得しないため設定しておく。

Vesktopの設定

「Vesktop Settings」>「Enable Rich Presence via arRPC」を有効にする必要がある。
※arRPC = 外部RPCブリッジを使う設定

動作確認

FlatpakのRPCに対応したゲームを起動してみて動作を確認する。
Prism LauncherからSimple Discord RPCを入れたFabric Minecraftを起動するとrichが表示されている。

端末からもソケットを確認することができる。

おわり

Flatpakは便利だけど色々面倒だね。

コメントする