Skip to content

Wayland上での日本語入力プロトコルとサポート状況

Waylandと入力方式(日本語が読みづらいので原文のWayland and input methodsを読むほうがいいと思う)によれば、テキスト入力のためには複数のプロトコルが協調して動作する。

また、X11の頃にGTKやQTなどのツールキットによって実装されている IMモジュール と呼ばれる仕組みもある。X11の頃はIMをアプリが扱うよりツールキットで処理したほうが便利だったが、Waylandではコンポジタが担ってくれるようになった。

Fcitx5 - ArchWikiUsing Fcitx 5 on Waylandによれば、アプリケーション側で利用できるならWaylandネイティブな text-input の利用が推奨される。コンポジタがサーバーとなって、アプリケーションがクライアントとして動作する。ユーザーの入力はコンポジタが受け取りアプリケーションに送られる。しかしこのプロトコルはシンプルにテキストをアプリケーションへ伝えるもので、漢字変換などは対象としていない。

漢字変換などは input-method プロトコルで行う。コンポジタは input-method を実装したアプリケーションにユーザーの入力をリダイレクトして、結果を受け取りアプリケーションへ送る。この場合、ユーザーとコンポジタの間に input-method プロトコルの実装が挟まる状態となる。fcitxibus のようなプログラムがこれを実装する。

Nimfの作者が input method の問題点を挙げている記事がある。

GTK_IM_MODULEQT_IM_MODULE といった各種IMモジュール用の環境変数は IMモジュール に作用する。X11アプリには今でも必要だけれど、その場合は環境変数でグローバルに設定するのではなく設定ファイルで個別に適用する方法が望ましい。

プロトコルtext-inputinput-methodvirtual-keyboard
wlroots(Sway)v3v2v1
Mutter(GNOME)v3(ibus)
KWin(KDE)v1, v2, v3v1
fcitx5-v2
ibus-v1, v2v1
Chromiumv1, (v3)-

GNOMEでは input-method プロトコルを利用しない、代わりに、Using Fcitx 5 on WaylandによればIBusプロトコルが使われるらしい。

例えばSwayの上で fcitx5-mozc を使ってElectronアプリへ日本語入力する場合、Swayでは text-input v3しかサポートしないので —wayland-input-method-version=3 でアプリケーション側の text-input をv3に切り替えておく必要がある。この状況でテキストを入力すると

  • ユーザー入力はwlrootsが受けて input-method v2で fcitx5 へ渡す
  • 変換をトリガーするイベントは text-input プロトコルにある
  • コンポジタは変換の結果を受け取って、input-method v3でChromiumへ渡す

となる。Sway以外ではv1を使うことも可能なのでFlatpakのElectronアプリで日本語入力を行う方法に色々な方法をまとめた。

[!Note] ibus-skk だとElectronアプリへ入力できなかったが、GTK_IM_MODULE をセットしていたのでネイティブ動作していなかったのかもしれない。

fcitx5-gtkfcitx5-qt のように各ツールキットの IMモジュール を実装するパッケージも存在しているが、上で書いたように必ずしも必要ではない。