+---------------------+
| Conversion Engine | <-- Anthy, Mozc, SKK, Canna, etc. (連文節変換、予測変換などの選択)
+---------------------+
| Input Method | <--- uim, fcitx, iiimf, etc. (Shift+Spaceで日本語入力開始などの制御)
+---------------------+
| Desktop Environment | <-- Xfce, GTK/Gnome, QT, etc. (WebブラウザのTextウィジェットへのフォーカス管理等, XIM/immodule等へのインタフェース)
+---------------------+
| X11 | (最も低レベルの機能を提供、画面への文字の表示など)
+---------------------+
1. UNIX環境での日本語入力について
ここからの説明は、様々なアプリケーションの固有名が出現するので、少し整理しておきます。
日本語入力のために、以下のような層になっていて、各層に複数のアプリケーションが存在しています。 基本的には各層から自分が利用したいアプリケーションを選択し、組み合せることで日本語入力を実現しています。
設定は、図の階層の下の方から上に向かって(↑)、xfce, uim, Mozc、の順番に行ないます。
なお、WindowsやmacOSではConversion Engine以外の層はOSが提供するものしか利用できないため、実質的に無視できる仕組みになっています。
2. 日本語入力環境
日本語入力に必要なパッケージは導入されていますが、初期設定が必要です。
利用するのは、Settingsに表示される、"Language Support"と"Input Method"の2つの項目です。
2.2. Input Method設定
Input Methodダイアログを選択し、"Specify default IM"にチェックを入れ、AnthyやMozcを選択します。 この他の項目は好みによって選択してください。 あらかじめ動作を確認しているのは次の3つの日本語入力システムです。
-
Anthy - 一般的な連文節変換による日本語入力システム
-
Mozc - Google日本語入力に似た予測変換による日本語入力システム
-
SKK - 一般的なSKK方式による日本語入力システム
3. X11環境における日本語入力の仕組み
演習室環境ではSolaris標準のiiimfを利用しているため、uimなどは始めて触る人がほとんどだと思います。 また仕組みについて意識することもないのではないでしょうか。
ここではX11環境における日本語入力について概要を説明します。
3.1. キーボードからの入力を受け取る仕組み (Xサーバーが提供する機能)
X11では日本語以外にも様々な言語に対応する必要があるため、キーボードから入力された文字を何らかのプログラムで別の文字(データ)に変換するための仕組みを提供しています。
基本的な仕組みをXIM (X Input Method)と呼び、X11サーバーがキーボードからの入力を別のプログラムに渡すための仕組みのみを提供します。
X11サーバーがデータを渡す先、つまりキーボードからの入力を処理するための別のプログラムをInput Method Library/Serverと呼び、様々なプログラムが提供されています。(e.g. uim, ibus, scim, fcitx)
SolarisはiiimfというIMサーバーを利用しています。
そして、一般的にはこららのIMサーバーからの実際の処理を請け負う、つまり日本語を含めた各言語にキーボード入力を変換するための変換プログラムが存在します。(e.g. fcitx-anthy, fcitx-mozc, uim-skk, scim-canna)
3.2. 各言語の文字に変換する仕組み
IMサーバーが受け取ったキーボードの入力を元に、日本語などに変換するための仕組み(変換エンジン)が存在します。 Linuxで利用可能な一般的な日本語用の変換エンジンには、anthy, mozc, skk, cannaなどが存在します。
利用するIMサーバーによって、サポートする変換エンジンは異なるため、利用できる組み合わせには制限があります。
-
anthy - 連文節変換を行なう一般的な日本語変換エンジン (fcitx, uim, scimなどのIMサーバーがサポート)
-
mozc - Google日本語変換のような入力文字から予測する (fcitx, ibus, uimなどのIMサーバーがサポート)
-
skk - Emacs発祥の日本語変換エンジン。論文作成など大量の文章を入力する際に力を発揮する (fcitx, ibus, uim, scimなどのIMサーバーがサポート)
-
canna - Wnnと並び古くからある日本語変換エンジン (uim,scimなどのIMサーバーがサポート)
IMサーバーとこれらの日本語変換エンジンの組み合せによって、X11環境での日本語入力環境が実現されています。 このような役割分担によって、他の言語や、まだ存在していない新しい言語にも対応できる能力を実現しています。
Solarisでは商用の日本語変換エンジン(ATOK)が利用できます。
3.3. X11アプリケーション(クライアント)が日本語入力を行なうための仕組み
まずX11が土台にあり、その上でGnomeやQTなどのデスクトップ環境が構築されていたり、それらを利用しない古いX11アプリケーションが動いたりしています。それぞれのレベルで日本語入力の取り扱いは微妙に異なりますが、いずれも環境変数を利用してXIMもしくは独自の仕組みを利用しています。
関連の環境変数は次のような方法で確認ができます。
$ env |egrep 'uim|IM' |sort
CLUTTER_IM_MODULE=xim
GTK_IM_MODULE=uim
## 省略
QT4_IM_MODULE=uim
QT_IM_MODULE=uim
## 省略
XMODIFIERS=@im=uim
GTKやQTはX11ライブラリの上に構築されていますが、細かな制御を行なうためにXIMを利用しない独自の方法も提供しています。 このGTK/QTの独自設定を利用した場合には、それらのWidgetを利用しないX11アプリケーションでは、日本語入力ができなくなります。
反対にアプリケーションが独自に日本語入力を扱う場合には、GTK/QTの日本語入力が邪魔になる場合もあります。 このような場合には、次のようにemacsを起動することでXIM経由での日本語入力ができなくなります。
$ env XMODIFIERS=@im=none GTK_IM_MODULE=xim emacs
このように起動したEmacsでは、uimを経由した日本語変換ができなくなります。 この設定はEmacs-Lispで記述された日本語変換エンジンや、外部の日本語変換エンジンと通信したい場合に使用します。
3.4. Emacsで独自の日本語変換エンジンを利用する場合
前述のように起動した場合でも、Emacsは独自の日本語変換機能を持っているので日本語変換自体は可能です。
-
文字を入力する準備のため、C-x b を押下し、適当なBufferを作成するか、空のファイルを開く
-
C-\ を押下し、Input Method: と質問されるので、"japanese" と入力する
-
ローマ時入力によって変換を実行する
この他の日本語変換エンジンとしては、ddskkが有名です。 この他にもanthy.elやmozc.elを使用することでEmacs上でuimとは異なる日本語変換エンジンをEmacsから利用することができます。
この場合、EmacsがInput Methodの機能を提供すれば、直接Conversion Engineと通信することも可能です。
3.4.1. EmacsでAnthyを利用する場合
emacsを起動して次に要領で、anthy-modeを起動します。
M-x load-library
anthy
一度anthyライブラリをロードすれば、日本語入力のOn/Offは次の方法で切り替えが可能です。
M-x anthy-mode
3.4.2. EmacsでMozcを利用する場合
anthyと基本的な手順は同様ですが、ライブラリ名が少し違います。
M-x load-libarary
emacs-mozc/mozc.el
以降は、Anthyと同様に M-x mozc-mode で切り替えが可能です。
3.4.3. EmacsでSKKを利用する場合
ライブラリは既にインストールされているので、anthy,mozcと同様の手順で利用が可能です。