🔡

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

2024/09/03に公開

はじめに

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

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

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

理由

この現象は、InputMethod(かな漢字変換等を行うプログラムのこと。以下IM)がハイライト等の未確定文字列(preedit text)の装飾情報をアプリケーションに伝える方法がないことが原因で起こっています。

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を使います。しかし、text-input-v3に未確定文字列の装飾を伝えるプロトコルが含まれていません。

解決に向けて

現在、text-input-v3にpre-editを装飾する機能を追加する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/

Discussion