🔡

GNOME+Waylandで日本語入力をすると変換範囲のハイライトが表示されない問題とその回避策について

2024/09/03に公開

はじめに

GNOMEをWaylandセッションで使用しているときに、日本語入力をすると変換範囲のハイライトが表示されないという問題が発生しています。変換範囲のハイライトというのは、下の画像のように単語を変換しているときに表示されるもので、変換対象を選択したり変換範囲を変更したりするために必要です。

X11セッションではハイライトが表示されます。

一方、2024年9月時点のWaylandセッションではハイライトが表示されません。

Waylandでの日本語入力の流れ

Waylandでは、画面の表示やユーザーの入力の受け取りを行うプログラムのことをWaylandコンポジターとよび、日本語入力についてもこのコンポジターがIMとアプリケーションのやり取りを仲介します。

つまり、IMコンポジター間と、コンポジターアプリケーション間の2つのやり取りが行われることになります。Waylandではそれぞれに対応するプロトコルが用意されています。

  • IMコンポジター間:input-method-v1、input-method-v2
  • コンポジターアプリケーション間:text-input-v1、text-input-v2、text-input-v3

GNOMEではIMコンポジター間の通信はWaylandのプロトコルを使わず、独自のものを使います。一方、コンポジターアプリケーション間ではWaylandのプロトコルであるtext-input-v3を使います。

2024年9月時点のGNOMEのtext-input-v3実装ではアプリケーションに未確定文字列の装飾情報を伝えることができていません。そのため、ハイライトが表示されなくなっています。

解決に向けて

その1:カーソル範囲を指定する

この問題の解決方法の一つがGNOME Shellのissueで提案されています。
text-input-v3では、コンポジッターは未確定文字列(pre-edit)内のカーソルの開始点と終了点を指定する必要があり、アプリケーションは開始点と終了点の間の文字列をハイライト表示することが定められています[1]。つまり、カーソルの開始点と終了点を変換範囲の始まりと終わりに設定することでハイライトの表示を実現できます。

その2:text-input-v3プロトコルの改定

他の解決方法としてtext-input-v3プロトコル自体の改定が提案されています。text-input-v3に未確定文字列(pre-edit)の装飾情報を伝える機能を追加するというもので、WaylandプロトコルのリポジトリにMRが提出されています。
このMRがマージされ関係するソフトウェアで対応が進んだ場合、変換範囲のハイライトにとどまらず様々な装飾が表示されるようになることが期待できます。

回避策

現在使える回避策を紹介します。

Wayland以外の方式を使う

アプリによっては環境変数を設定することでWayland以外の入力方式が使えることがあります。これらの環境変数で有効化される入力方式では未確定文字列の装飾情報を伝えることができるので、変換範囲のハイライトが表示されます。

  • ibusの場合

    GTK_IM_MODULE=ibus
    SDL_IM_MODULE=ibus
    QT_IM_MODULE=ibus
    
  • fcitxの場合

    GTK_IM_MODULE=fcitx
    SDL_IM_MODULE=fcitx
    QT_IM_MODULE=fcitx
    

Ubuntuの場合、fcitx5をaptからインストールし「言語サポート」で「キーボード入力に使うIMシステム」に設定すると自動的に上記の環境変数が設定されます。気がつかないうちに使っていた人も多いでしょう。

だだし、この手法ではWaylandの入力方式のみ対応する新しいGUIツールキットを使ったアプリケーションには対応できません。

変換範囲を可視化するGNOME拡張機能をインストールする

Waylandの入力方式を使う場合の回避策として、変換範囲を可視化するGNOME拡張機能を開発しました。
この拡張機能はWaylandの入力方式が使われているときに漢字変換時に未確定文字列をポップアップ表示します。その際に未確定文字列内の変換範囲を強調表示します。

GNOME Shell Extensionsからインストールできます。

https://extensions.gnome.org/extension/7212/preedit-highlight-popup/

脚注
  1. https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/1.37/unstable/text-input/text-input-unstable-v3.xml?ref_type=tags#L343-367 ↩︎

Discussion