2012/04/28

Ubuntu 12.04 LTSのFirefoxにuimで日本語入力ができない

日本語入力にはAndroidとiOS以外ではSKK(skkime, AquaSKK, uim-skk)を常に使っています。 今回はFirefoxから日本語入力ができなくなったので、その対策をとりました。

症状:Firefoxで日本語が入力できなくなった

Firefoxでは検索欄、アドレス欄、Formのどこででも、C-x + C-j を押しても日本語入力モードになりませんし、Shift + Space、C-Space を押しても入力モードが切り替わらずにアルファベットだけが入力できる状態でした。

どうせGTK_IM_MODULE環境変数周りだろうと見当はついたので、uimが設定されているところを適当にximを設定して起動してみました。

 $ env GTK_IM_MODULE=xim firefox 

結果はみごとに解決して、他に実用上の問題もなさそうだったので、

修正点:GTK_IM_MODULE環境変数の修正

日本語入力に関連する環境変数はX11用から、代表的なものはGTK, QT用にいくつか存在します。 emacsのようにelispのIMEかX11経由のIMEか選択できるものもありますが、ここ数年以内の環境であれば、GTK, QTツールキットで作成されたアプリケーションを多く使っているはずで、そららはGTK_IM_MODULE環境変数、QT_IM_MODULE環境変数を、それ以外はXMODIFIERS環境変数の値によってX11レベルで日本語入力ができるようになります。

Ubuntu 12.04 LTSの場合は、一連の環境変数は/etc/X11/Xsessionから起動される一連のスクリプトのどこかで設定されます。/etc/X11/Xsession.d/80im-switchの中にその候補がありますが、通常は ~/.xinput.d/ の中にあるスクリプトが使われるはずです。

~/.xinit.d/以下にある$LANG環境変数の.(ピリオド)の左半分と同じファイルが読み込まれ、手元のシステムでは、システムが管理するファイルへのシンボリック・リンクになっています。

現状のxinputの設定

lrwxrwxrwx 1 yasu yasu 35 Sep 17  2011 /home/yasu/.xinput.d/ja_JP -> /etc/X11/xinit/xinput.d/uim-toolbar

現状のxinput設定の内容

# uim with GTK toolbar indicator
XIM=uim
XIM_PROGRAM=/usr/bin/uim-xim
XIM_ARGS=
GTK_IM_MODULE=uim
QT_IM_MODULE=uim
# It seems to me that the system needs to be initialized.
# Folowing trick will wait 10 seconds without slowing down X start up.
XIM_PROGRAM_XTRA="(sleep 10; uim-toolbar-gtk)"
DEPENDS="uim-xim,uim-gtk2.0|uim-qt,uim-anthy|uim-canna|uim-prime|uim-skk|uim-m17nlib"

今回はGTK_IM_MODULE変数について、uimからximに変更してしまいます。 さすがにシステム全体の設定を上書きするのは気がひけるので、手元にコピーして書き換えることにしました。

 $ rm ~/.xinput.d/ja_JP
 $ cp /etc/X11/xinit/xinput.d/uim-toolbar ~/.xinput.d/ja_JP

このコピーした ~/.xinput.d/ja_JP ファイルのGTK_IM_MODULEで始まる一行を変更して一度ログアウト・ログインし、設定を反映させました。

設定変更後の設定内容

...
GTK_IM_MODULE=xim
QT_IM_MODULE=uim
...

この後は無事にFirefoxで日本語入力ができるようになっています。

まとめ、と余計なこと…

日本語入力は重要なところですが、環境の変化によっていろいろ面倒な事がおこりやすいところでもあります。

WindowsやMacでは、IMEが切り替わらないといった問題が発生した経験はありませんが、1990年代末期まではX11に限らず入力文字を切り替えるのは面倒な作業でした。

X11R5,6の頃にXIMを設計したメンバーが、Sunを中心にIIIMFが立ち上がった経緯の資料がどこかにあったと思うので、興味がある方は検索サイトで探してみてもいいかもしれません。

話はかわって、最近Ruby MLでUTF-8な文字から、そのテキストの言語を推し量りたいという方がいましたが、実際には同じ文字コードは日本語や中国語で重複して使われているので、どの国の言葉か、その言語を確実に知る方法はありません。

政治を持ち込む気はないですが、日本語を扱うのであれば、なんで文字コードがUTF-8だけじゃないんだよと文句を言いたくなるかもしれませんが、JISコードと呼ばれたISO-2022(-JP)体系とUTF-8の歴史については学んばなければいけないと思います。もっともいまとなっては雑学の部類なのかもしれませんけどね。

話しを元に戻して、デスクトップでLinuxを使う時のネックは日本語入力ではないでしょうか。

ATOKがたびたび移植され現在も動くはずですし、Wnnもここ2,3年は聞きませんが、Ubuntu 8.04 LTS向けには正式対応版が販売されていました。

いろいろ苦労している方々がいる背景の中では、自分がSKKをMac, Windows, Linux (+ Emacs)の環境で、ほとんど同じように使えるのは幸せだなぁと感じるところです。GTK2が主流のwidgetになったX11の世界になって久しいですがuim-skkには本当に感謝しています。

ああ、IIIMFの名前を出しておいて、なんでUIMに感謝するんだよ、っていう話の理由はいろいろな経緯と現実的に普及したのがUIMだったという、これもIIIMFについて調べれば分かると思います。

しかしIIIMFの問題提起自体は正しかったと思いますし、それがなければ現状もなかったのではないでしょうか。 そういう意味では触れずにはいられないわけです。

AndroidではLifeTouch向けにSKKが移植されているようですが、uimを組み込んだエディタなんてのがあっても個人的にはいいんですよね。何にしてもGoogle playの中からダウンロードできる形でまとまっていないのが残念です。

0 件のコメント: