ディストリビューション非依存のパッケージマネージメントシステムとして、Flatpakというものがあります。
このFlatpak、ユーザー権限でバイナリパッケージを手軽にインストールできたりして、Gentoo使いの自分としては便利に使っているのですが、一つ問題があります。それは、日本語入力ができない、という問題です。
正直そんなに日本語入力する機会なんてないし…と思っていましたが、最近チャットツールとかを導入したせいで、日本語を入力する必要に迫られていました。とりあえずは、ブラウザでWeb版を開いてなんとかしていたんですが、重い腰を上げて解決策を探ってみることにしました。
原因
あちこち調べた結果、日本語入力ができない問題は、FcitxとFlatpakアプリとの間で、D-Bus通信がうまく行っていないことが原因とわかりました。
なぜ通信がうまく行っていないのか。その原因は2つありました。1つ目は権限の問題です。
Flatpakはセキュリティにも配慮していて、アプリケーションをサンドボックスに押し込んで実行するようになっています。当然、各種通信やアクセスも制限しています。そうした制限の一部として、ソケット通信も制限されています。D-Busはリンク層としてはソケット通信を行っているので、当然この制限の影響を受けます。
解決策
そのため、この「ファイアウォール」に穴を開ける必要があります。
調べてみるといい感じのIssueがありました。どうやら--talk-name=org.freedesktop.portal.Fcitx
と実行時に指定すれば良いようです。恒久的に設定したければ、override
すればよさそうです。
さて、問題はまだ続きます。
D-Bus通信は、その名の通りバス型の通信システムなので、「宛先」(正確にはオブジェクト名)を指定する必要があります。その「宛先」の命名規則には慣例があって、だいたいのアプリケーションはその慣例に従っていたわけですが、Fcitxはその慣例に従っていませんでした。しかし、Fcitxでのこの修正によって、慣例通りに振る舞うようになりました。
その結果、以前の振る舞いを前提としていた一部のFlatpakアプリでFcitxが動かなくなってしまったのでした。この問題はFcitx側でもすでに把握しています。
解決策は、アプリケーション側が対応してくれるのを待つか、Fcitxにパッチが当たるのを待つか、です。しかし、Fcitx側での修正は、影響範囲が広く、かつ挙動を正しく修正した結果による挙動なため、修正は難しいように思います。
めんどくさいので諦めた
ここまで書いておいて申し訳ないですが、自分はとりあえずiBusに逃げることにしました
だって日本語そんなに打たないんだもの…
以上、Flatpakで日本語入力できなくて困っている方の役に立てれば幸いです。