試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

IBus/IBus-Anthyのその後(2009/6/12現在)

しばらくぶりにIBus/IBus-Anthyを試してみた。今回はMandriva Linux 2010.0(開発版)向けのソースRPMパッケージ*1からビルドしてみた。作業はMandriva Linux 2009.0上*2で行った。

  1. 本体のビルドエラー
  2. IBusデーモンの起動
  3. 本体(20090609版)の設定項目
    1. 「一般」タブ
    2. 「インプットメソッド」タブ
  4. IBus-Anthy(20090603版)の設定項目
    1. 「全般」タブ
    2. 「キー割当」タブ
  5. かな入力
  6. 関連:Fedora 11とIBus
  7. 関連:特殊なインストール先でのGTK+ 2 immoduleのテスト

本体のビルドエラー

本体のビルドに失敗した。

make[3]: Entering directory `/home/mandrake/rpm/BUILD/ibus-1.1.0.20090609/src'
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I..    -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -DG_LOG_DOMAIN=\"IBUS\"  -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -MT libibus_la-ibusshare.lo -MD -MP -MF .deps/libibus_la-ibusshare.Tpo -c -o libibus_la-ibusshare.lo `test -f 'ibusshare.c' || echo './'`ibusshare.c
../libtool: line 845: X--tag=CC: command not found
../libtool: line 878: libtool: ignoring unknown tag : command not found
../libtool: line 845: X--mode=compile: command not found
(中略)
../libtool: line 1214: libtool: compile: cannot determine name of library object from `': command not found
make[3]: *** [libibus_la-ibusshare.lo] Error 1
make[3]: Leaving directory `/home/mandrake/rpm/BUILD/ibus-1.1.0.20090609/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/mandrake/rpm/BUILD/ibus-1.1.0.20090609/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/mandrake/rpm/BUILD/ibus-1.1.0.20090609'
make: *** [all] Error 2

どうもこれはMandriva Linuxの.specファイルが実行しているautogen.shから実行されるlibtoolizeが問題を起こしているように見えたのでautogen.sh内のlibtoolizeの実行部分のみコメントにするようにした。
今度は

libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -DG_LOG_DOMAIN=\"IBUS\" -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -MT libibus_la-ibuscomponent.lo -MD -MP -MF .deps/libibus_la-ibuscomponent.Tpo -c ibuscomponent.c  -fPIC -DPIC -o .libs/libibus_la-ibuscomponent.o
ibuscomponent.c: In function ‘ibus_component_stop’:
ibuscomponent.c:709: error: ‘SIGTERM’ undeclared (first use in this function)
ibuscomponent.c:709: error: (Each undeclared identifier is reported only once
ibuscomponent.c:709: error: for each function it appears in.)
make[3]: *** [libibus_la-ibuscomponent.lo] Error 1
make[3]: Leaving directory `/home/mandrake/rpm/BUILD/ibus-1.1.0.20090609/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/mandrake/rpm/BUILD/ibus-1.1.0.20090609/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/mandrake/rpm/BUILD/ibus-1.1.0.20090609'
make: *** [all] Error 2

となったが、SIGTERMは(広い意味での)UNIX系OSにおける(プロセスに送られる)シグナルの1つで
[引用]ファイル名: /usr/include/bits/signum.h より

#define	SIGTERM		15	/* Termination (ANSI).  */

のように数字に展開される。これに関するヘッダファイルを取り込んでいないようなのでibus-1.1.0.20090609/src/ibuscomponent.cの先頭の「#include」の行があるところに「#include <signal.h>」を追加するようにしたところ、ビルドは通り、インストールができるようになった。
ここまでにおいて.specファイルに行った修正は下のようになった。

--- ibus.spec.orig
+++ ibus.spec
@@ -69,6 +69,8 @@
 %if %mdkversion < 200900
 export PKG_CONFIG_PATH=%_libdir/pkgconfig:%qt4lib/pkgconfig
 %endif
+%{__sed} -i 's:libtoolize:#:' autogen.sh
+%{__sed} -i 's:\(#include <glib/gstdio.h>\):#include <signal.h>\n\1:' src/ibuscomponent.c
 ./autogen.sh
 %configure2_5x --enable-qt4-immodule \
 	--disable-dbus-python-check --disable-iso-codes-check

後は作成したRPMパッケージをインストールするだけ。下は作業例なので、出力先やファイル名の一部は異なる場合がある。

$ sudo urpmi [RPM出力先]/x86_64/ibus{,-gtk,-qt4}-1.1.0.20090609-1kkr2009.0.x86_64.rpm
$ sudo urpmi [RPM出力先]/x86_64/ibus-anthy-1.1.0.20090603-1kkr2009.0.x86_64.rpm 

IBusデーモンの起動

IBusのデーモンを起動するにはibus-daemon--xim --daemonizeオプションを付けて実行する。この処理をログイン時に実行されるスクリプトの中に含める。
ファイル名: ~/.xprofile など

ibus-daemon --xim --daemonize

もし手動で/opt/ibus/のような場所をconfigureスクリプト--prefix=オプションで指定して入れた場合、Pythonのパッケージ(モジュール群)「ibus」が読み込める場所になく正常に動作しないので、環境変数PYTHONPATHにsite-packagesディレクトリの場所を指定することになる。
ファイル名: ~/.xprofile など

PYTHONPATH=$(echo /opt/ibus/lib/python*/site-packages) /opt/ibus/bin/ibus-daemon --xim --daemonize

XIMとして使用するための準備としてはこの他に「ibus-anthyを試してみる(2008/9/9現在)」でも書いた環境変数XMODIFIERSの設定があるが、以前と同じなのでここでは書かない。

本体(20090609版)の設定項目

以前と設定ツールのインターフェースは随分変わった印象を受ける。

「一般」タブ

  • キーボードショートカット
    • 有効/無効の切り替え [キーボードショートカットのリスト]
    • 次の入力メソッド [キーボードショートカットのリスト]
    • 前の入力メソッド [キーボードショートカットのリスト]
  • フォントとスタイル
    • 候補の並ぶ向き(横並びか縦並び) [リストから1つ選択]
    • 言語バー(パネル)の表示条件 [リストから1つ選択]
    • 入力メソッド名を言語バーに表示するかどうか [チェック]
    • 候補一覧のカスタムフォント [チェック時にフォントを選択]

「インプットメソッド」タブ
入力メソッドのタブでは「日本語 - Anthy」を入力メソッド選択のリストから選んで「追加」ボタンを押す。他にエンジンを入れていないのでこれだけ。

IBus-Anthy(20090603版)の設定項目

「全般」タブ
入力モードや幾つかの挙動に関する設定が行えるようになっている他、キーの割り当てもできるようにはなっているが、入力履歴に基づく予測入力についてはまだサポートされていない。

「キー割当」タブ
多くのIBus-Anthy固有のキー割り当てが設定できる。

かな入力

非常に残念なことに、かな入力時に「ー」のキーを押すと「ろ」が入力されるようになってしまっている。以前、早い段階からこの部分がきちんと処理されるようになっていて、期待が持てていただけに、残念。

関連:Fedora 11とIBus

Fedoraのバージョン11がIBusを標準の入力メソッドに採用したようだが、まだ既存のSCIMuimといった入力メソッドよりも機能が低いため、日本人ユーザがSCIMuimに逃げるという現象が予想既にWeb検索すると確認できる。
幸い、両方ともパッケージは用意されているのが確認できるので、パッケージ名「scim-anthy」や「uim-anthy」などをパッケージマネージャかyumからインストールするということになるものと思われる(実際にFedora上での確認はしていないため、間違っている部分があるかもしれない)。

関連:特殊なインストール先でのGTK+ 2 immoduleのテスト

Mandriva Linux 2010.0のソースRPMパッケージを試す前に一度/opt/ibus/という場所に手動でインストールしてみたのだが、そのとき、GTK+ 2のimmoduleのディレクトリは特殊な方法で指定することになった。ただ、本来は本体のconfigureスクリプト--prefix=/usrのようにGTK+のインストール先と同じインストール先接頭辞を指定するか、--with-gtk-im-module-dir=[ディレクトリ]で直接モジュールのディレクトリを指定することになる。
まずは
[任意]ファイル名: immodules.txt

"/opt/ibus/lib64/gtk-2.0/2.10.0/immodules/im-ibus.so" 
"ibus" "IBus (Intelligent Input Bus)" "ibus" "/opt/ibus/share/locale" "ja:ko:zh"

このようなファイル*3を作成してから環境変数GTK_IM_MODULE_FILEにこのファイルの場所を指定してGTK+ 2の適当なアプリケーションを起動する。

$ GTK_IM_MODULE_FILE=[immodules.txtの場所] gedit &

その上でテキストが入力できる場所でコンテキストメニューを開いて入力メソッドの一覧から選択し、Ctrl+SPACEなどの有効/無効の切り替えのキーを押すと日本語が入力できるようになる。
なお、実際には(ディストリのパッケージの場合など)本体のインストール後にupdate-gtk-immodulesによって/etc/gtk-2.0/以下のimmodulesファイルを自動的に更新することになる。今回使用したソースRPMパッケージでも
[引用] ファイル名: ibus.spec より

%post gtk
gtk-query-immodules-2.0 > %{_sysconfdir}/gtk-2.0/gtk.immodules.%_lib

%postun gtk
gtk-query-immodules-2.0 > %{_sysconfdir}/gtk-2.0/gtk.immodules.%_lib

このようにインストール/アンインストール後にこのファイルを更新するようになっている。

使用したバージョン:

*1:ftp.nara.wide.ad.jp/pub/Linux/Mandrakelinux/devel/cooker/SRPMS/contrib/release/ から入手

*2:事情により2009.1から2009.0に戻している

*3:/etc/gtk-2.0/以下のimmodulesファイル(immoduleの読み込みに関する情報が書かれたファイル)と同じ書式で、1行目にimmoduleの場所、2行目には識別名/表示名/gettextのドメイン/gettextのロケールディレクトリ/ロケールを記述、というパターンを並べる