リナックスでIMEが作動する方法
日本語、韓国語、中国語のように文字数が多いまたは文字の組み合わせが必要な言語をリナックス1で入力するためには、特殊なIMEが必要です。WindowsやmacOSではこのようなIMEがオペレーティングシステムに基本的に統合されているため、ユーザーが別途気にする必要はありません。一方、リナックスでは使用するディストリビューションによってIMEを別途インストールして設定する必要がある場合が多いです。 リナックス環境で非西欧圏の言語を入力する際、IMEに関連する問題が発生することがしばしばあります。開発者がこのような問題を効果的に解決するためには、リナックスのIMEシステムについての理解が必要です。 この記事では、リナックスのIMEシステムを構成する様々な要素の役割および相互作用の方式、動作過程を詳しく見ていきます。 1. IMEとInput Method Framework 通常、IMEはInput Method Framework上で動作します。 Input Method Frameworkは様々なIMEを管理し統合する上位ソフトウェアで、代表的な例としてIBusとFcitxがあります。 IME自体は一般的にInput Method Frameworkとは別にインストールする必要があります。 例えば、Fcitxベースの韓国語IMEはfcitx5-hangul、IBusベースの日本語IMEはibus-mozcなどのパッケージをインストールする必要があります。 Input Method Frameworkはユーザーの設定に従って、アプリケーションのキー入力をアクティブなIMEが処理するよう仲介する役割を果たします。 この記事では便宜上、Input Method Frameworkを区別せずにIMEと呼ぶことにします。 IMEとInput Method Framework 2. 通信プロトコルおよびアプリケーション IMEは基本的にクライアント-サーバー構造で設計されています。 アプリケーションはIMEデーモンと様々なIPC(プロセス間通信)方式を通じて通信し、入力を処理することができます。 この過程で使用されるプロトコルは二種類に分けることができます。一つはIMEと独立して動作する標準プロトコルであり、もう一つはIME開発者が独自に開発した固有のプロトコルです。 アプリケーションはこれらの通信方式の中から一つを選択して動作します。 標準プロトコル クライアントとIME間の通信に使用される標準プロトコルは次の通りです。 XIM Wayland input-method-unstable-v1 input-method-unstable-v2 text-input-unstable-v3 X Input Method (XIM) XIMは1990年代にX Consortiumが制定したプロトコルで、X11サーバーを通じてIMEとクライアントが通信する方法を定義したものです。 作られてから30年以上経った古いプロトコルのため、最近ではあまり使用されていませんが、互換性のためにほとんどのIMEがサポートしています。 X11ベースですが、Wayland環境でもX11との互換性レイヤーであるXWaylandを使用する場合、XIMプロトコルを使用することができます。 IMEをインストールする際によく設定する次の環境変数は、XIMプロトコルで使用するIMEを指定します。 export XMODIFIERS=@im=ibus Wayland X11を代替するために設計されたディスプレイプロトコルであるWaylandもIMEのためのプロトコルを含んでいます。 WaylandのIMEプロトコルは2回も変更され、最新バージョンであるtext-input-unstable-v3もまだunstableが付いている状態です。 しかし、現時点でtext-input-unstable-v3は事実上Waylandの入力プロトコル標準に近い形で使用されています。 特徴的な点として、XIMがただX11サーバーを通じてアプリケーションとIMEが通信する方式であるのに対し、text-input-unstable-v3は間にWaylandコンポジターが直接関与する構造となっています。 独自のプロトコル IBus、Fcitx、UimなどほとんどのIMEは標準プロトコル以外にも独自の通信プロトコルを実装しています。 IBusとFcitxの独自プロトコルはD-BusというリナックスのIPCシステム上で通信し、Uimは直接ソケットを使用します。 これらの独自プロトコルおよびクライアントは主に後述するIMモジュールのために使用されます。 それでは標準プロトコルが存在するにもかかわらず、なぜ独自プロトコルが作られたのか疑問が生じます。 これについて推測すると、おそらく次のような過程があったと考えられます。 1990年代に開発されたXIMは基本的な入力機能のみをサポートし、現代的な入力方式(周辺テキスト参照など)をサポートしていなかった 各IME開発チーム(IBus、Fcitx、Uimなど)はXIMの限界を克服するために独自のプロトコルを開発した その後Waylandが登場し、入力プロトコルが3つも作成された 結果的に複数のプロトコルが乱立することになり、アプリケーション開発者は様々なプロトコルをサポートする負担が生じた IMEを使用するアプリケーション開発 アプリケーション開発者がIMEに関連する考慮をする必要があるケースは多くありません。 多くの場合、GTKやQtのようなウィジェットツールキットがIMEとの連携をバックグラウンドで自動的に処理するためです。 そのため、ウィジェットツールキットでGtkEntryやQLineEditのような入力フィールドを使用する際、開発者はIMEに関連する詳細に気を配る必要はありません。 ...