Ubuntu 15.04の日本語入力(現在は日本語以外も入力できる多言語入力なので、以後インプットメソッドと呼称)には大きな変化がありましたので、詳しく解説します。
Fcitxのmain入りとそれから
Ubuntu Weekly Topics 2月13日号で既報のとおり、FcitxがMIR(Main Inclusion Request)を通過し、無事にmainに入りました。
Ubuntuの公式フレーバーで中国語向けのUbuntu Kylinでは、従来よりIBusではなくFcitxがデフォルトのインプットメソッドでした。これは(筆者も門外漢ではあるものの[1])“Sogou(搜狗)”と言う変換エンジンがFcitxにしか対応していないという事情のようです。どうも一番変換効率が良いものらしいです[2]。Ubuntu Kylinは公式フレーバーであり、パッケージがmainにあるかuniverseにあるかは問題にはなりません[3]。しかし、Ubuntuはそうもいきません。と言うわけで、Ubuntuで可能な限り手軽にSogouを使用したい場合はFcitxをmainに入れる必要があり、かつデフォルトにする必要があると言うわけです。
紆余曲折あったものの、15.04のリリースサイクルでFcitxがデフォルトになったのは中国語(簡体字と繁体字)だけでした。日本語はタイムアップとなりました[4]。15.10からはその他の言語でもFcitxがデフォルトになる予定です。
Ubuntuでは[システム設定]-[テキスト入力]で[入力ソース]の追加と削除と変更ができます。この[入力ソース]は、IBusやFcitxでは[入力メソッド]を指しますが、要するに変換エンジンごとのブリッジです[5]。この[システム設定]はパッケージ名だと“unity-control-center”で、もともとは“gnome-control-center”でした。すなわち、ここで変更できるのはIBusだけだったのですが、このたびFcitxも対応するようになりました(図1)。
図1 [テキスト入力]でFcitxの変更もできるようになった
インプットメソッドの優先順位とインストール
では、IBusとFcitx、あるいはそれ以外にもuimなどが同時にインストールされている場合、どのインプットメソッドが優先的に起動されるのでしょうか。少々横道にそれますが、詳しく解説して行きます。
そのあたりを制御しているのはim-configというパッケージです。このパッケージに含まれる/usr/share/im-config/data/以下を見てみるとたくさんのファイルがあります(図2)。話を簡単にするために14.10に絞りますが、このフォルダーにあるファイル名には必ず数字が付いており、この数字が小さければ小さいほど優先順位が高いということになっています。すなわち、14.10ではFcitxとIBusが同時にインストールされていた場合は、Fcitxが優先して起動するということです[6]。
図2 14.10の/usr/share/im-config/data/以下。15.04ではIBusがFcitxよりも優先する
$ ls /usr/share/im-config/data/
00_default.conf 21_ibus.conf 48_scim.conf 80_kinput2.conf
00_default.rc 21_ibus.rc 48_scim.rc 80_kinput2.rc
01_auto.conf 24_uim.conf 50_hangul.conf 80_xsunpinyin.conf
01_auto.rc 24_uim.rc 50_hangul.rc 80_xsunpinyin.rc
02_cjkv.conf 25_hime.conf 60_thai.conf 90_bogus.conf
02_cjkv.rc 25_hime.rc 60_thai.rc 90_bogus.rc
09_REMOVE.conf 26_gcin.conf 78_none.conf 90_custom.conf
09_REMOVE.rc 26_gcin.rc 78_none.rc 90_custom.rc
20_fcitx.conf 30_maliit.conf 79_xim.conf 90_missing.conf
20_fcitx.rc 30_maliit.rc 79_xim.rc 90_missing.rc
と言うわけで、14.10まではUbuntu KylinだけがFcitxを採用していたのでこの対応でよかったのですが[7]、15.04からはライブセッションの場合は、という但し書きがつくものの、UbuntuでもFcitxとIBusが同時にインストールされることになったので、全ての言語でFcitxが優先してしまう、と言うことになります。
中国語だけはFcitxにするものの、それ以外の言語ではim-configのデフォルトに従うようにするため、15.04からは/etc/default/im-configに新しい設定項目が追加されました。
# Set locale dependent preferred IM over standard auto mode
IM_CONFIG_PREFERRED_RULE="zh_CN,fcitx:zh_TW,fcitx:zh_HK,fcitx:zh_SG,fcitx"
特に解説の必要もないほどわかりやすいですが、zh_CN/zh_TW/zh_HK/zh_SGではfcitxをデフォルトにするようにこの環境変数でオーバーライドしています。日本語でも同様にしたい場合は
IM_CONFIG_PREFERRED_RULE="zh_CN,fcitx:zh_TW,fcitx:zh_HK,fcitx:zh_SG,fcitx:ja_JP,fcitx"
とすれば良いです[8]。
ではim-configだけに変更があったのかと言うとそうではありません。「ライブセッションでは」という断りからもわかるように、インストールした場合はまた状況が変わり、中国語以外ではFcitx関連パッケージはインストールされません。原則としてはライブセッションに含まれていたパッケージはそのままインストールされるのですが、各言語ごとに必要なパッケージをaptで取得してインストールする仕組みがあるのです[9]。これがlanguage-selectorです。
language-selectorにはいろいろな役割があるのですが[10]、今回はインプットメソッドのインストールだけに絞ります。さまざまな言語に対応するためにはデータベースを持つ必要があります。language-selectorの場合は/usr/share/language-selector/data/pkg_dependsです。該当部分を抜粋します(図3)。
図3 15.04の/usr/share/language-selector/data/pkg_dependsの抜粋
# input method framework
im:zh-hans::fcitx
im:zh-hant::fcitx
# input methods
im:ja:ibus:ibus-anthy
im:ko:ibus:ibus-hangul
im:th:ibus:gtk-im-libthai
Im:vi:ibus:ibus-unikey
im:te:ibus:ibus-m17n
im:zh-hans::fcitx-ui-qimpanel
im:zh-hans::fcitx-ui-classic
im:zh-hans::fcitx-frontend-gtk2
im:zh-hans::fcitx-frontend-gtk3
im:zh-hans::fcitx-frontend-qt4
im:zh-hans::fcitx-frontend-qt5
im:zh-hans::fcitx-module-cloudpinyin
im:zh-hans::fcitx-sunpinyin
im:zh-hans::fcitx-pinyin
im:zh-hans::fcitx-table-wubi
im:zh-hans:kio:kde-config-fcitx
im:zh-hant::fcitx-ui-qimpanel
im:zh-hant::fcitx-ui-classic
im:zh-hant::fcitx-frontend-gtk2
im:zh-hant::fcitx-frontend-gtk3
im:zh-hant::fcitx-frontend-qt4
im:zh-hant::fcitx-frontend-qt5
im:zh-hant::fcitx-chewing
im:zh-hant::fcitx-pinyin
im:zh-hant::fcitx-table-cangjie
im:zh-hant:kio:kde-config-fcitx
フィールドは「:」区切りで、最初はジャンル、2番目が言語、3番目が依存するパッケージ、4番目がパッケージです。
im:ja:ibus:ibus-anthy
を例にすると、imがジャンル、jaが言語で、日本語を選択してibusパッケージがインストールされている場合にだけibus-anthyパッケージをインストールする、と言う意味です。ibusパッケージはubuntu-desktopから依存してインストールされているので、日本語を選択するとibus-anthyパッケージがインストールされるわけです。
im:zh-hans::fcitx
を見てみると、imがジャンル、zh-hansは中国語簡体字[11]、依存するパッケージはなしでfcitxをインスト―ルする、と言う意味で、中国語簡体字を選択してインストールした場合はfcitxもインストールされる、と言うことになります。これで中国語を選択してインストールするとFcitx関連パッケージがインストールされる仕組みがわかりました。
単純にubuntu-desktopからFcitx関連パッケージを依存させ、各言語に必要な部分だけをlanguage-selector経由でインストールされると言うIBusと同じ対応にすれば良かったのではないかと思いましたが、IBusではいろいろとありましたし、また各フレーバーに直接的に手を入れなくても対応できると言うこともあり、複雑にはなったものの、これはこれでよく考えられているなと感心しました。
余談に余談を重ねるのもアレですが、ユーザーごとにFcitxを使用したい場合は[システム設定]-[言語サポート]-[キーボード入力に使うIMシステム]を[Fcitx]にしてください。もちろん日本語RemixではFcitxのデフォルトを維持します。
Kubuntu
Kubuntuユーザーは少ないと思われますが、Kubuntuを使用する場合はIBusを使用する積極的な理由がありません。実のところ前からそうだったのですけど、15.04からはKDE Plasmaが5.2にアップデートし、IBusのアイコンがトレイに表示されなくなりました。IBusとしてはすでに対応済みなのですが、15.04では対応していません。そこでfcitx、fcitx-mozc、libfcitx-qt5-1、kde-config-fcitxをインストールし[12]、im-configコマンドを実行してfcitxを選択し、ログアウトしてログインしましょう。[KDEシステム設定]-[Regional Settings]-[入力メソッド]でFcitxの設定ができます(図4)。
図4 KubuntuではFcitxがお勧めですが、これがその理由のうちの1つです
少しだけ先の話
今更言うまでもなくUnity 7はそろそろ主役の座をUnity 8に渡す予定です。このタイミングでFcitxに変更する理由は何なのかというのは気になるところです。そしてそのヒントはこの辺にありそうです。