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

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

x86_64版Gentoo Linux上のAdobe Reader 8.1.1で日本語を入力(SCIMを使用)

32bitアプリを含め、広く使えているのが理由で、SCIMをXIMとして使用して日本語を入力することがほとんどなのだが、何故かAdobe Reader 8だけはXIM経由では入力ができない。そこで、今まで使うことのなかったSCIM-Bridgeについてを思い出し、調べたところ
[引用]homepage2.nifty.com/shibatama/scim-bridge/index.html (リンク切れ)より

SCIM-Bridgeはクライアント(im-module)と、エージェント(daemon)からなっていて、それぞれがソケットを介して通信しながら動作します。
SCIM-Bridgeの各クライアントと、エージェントはバイナリー的に独立です。従って、異なったアーキテクチャー用にクライアントから、特定のエージェントへの通信を行うことも可能です。

これが使えないか、と思い、試してみた。

  1. どのように動作するか
  2. 準備
  3. 32bit版のGTK+向けimmoduleをビルド・インストール
  4. 日本語が入力できるようにはなるのだが、不安定?

どのように動作するか

Adobe Readerは32bitのGTK+ 2アプリなので、32bit版GTK+ 2に向けたSCIM-Bridgeのimmodule(クライアント)が必要。これがソケットを介して、64bitのscim-bridgeデーモン(エージェント)と通信することで、日本語を入力することができる。

準備

あらかじめ、「scim-bridge」パッケージをemergeで入れておく。

32bit版のGTK+向けimmoduleをビルド・インストール

SCIM-Bridgeのパッケージは、エージェント抜きでのビルドができる。が、そのままではUSEフラグによって切ることはできない。32bit版ビルドを作成する指定をした上で

  • --disable-agent
  • --enable-gtk2-immodule
  • --disable-qt3-immodule
  • --disable-qt4-immodule

のオプションを付けてconfigureスクリプトを実行すればよいのだが、ebuildを使用して楽にやるのであれば

--- /usr/portage/app-i18n/scim-bridge/scim-bridge-0.4.13-r1.ebuild.orig
+++ /usr/portage/app-i18n/scim-bridge/scim-bridge-0.4.13-r1.ebuild
@@ -11,7 +11,7 @@
 LICENSE="GPL-2 LGPL-2.1"
 SLOT="0"
 KEYWORDS="~amd64 ~hppa ~ppc64 ~sparc ~x86"
-IUSE="doc gtk qt3 qt4"
+IUSE="doc gtk qt3 qt4 noagent"
 
 DEPEND=">=app-i18n/scim-1.4.6
 	gtk? (
@@ -44,10 +44,14 @@
 
 src_compile() {
 	econf \
+		$(use_enable !noagent agent) \
 		$(use_enable gtk gtk2-immodule) \
 		$(use_enable qt3 qt3-immodule) \
 		$(use_enable qt4 qt4-immodule) \
 		$(use_enable doc documents) || die
+	if use amd64 && [[ "${ABI}" = "x86" ]]; then
+		find . -name Makefile | xargs sed -i -e 's/lib64/lib32/g'
+	fi
 	emake || die
 }
 

という修正をしてから

$ sudo ebuild /usr/portage/app-i18n/scim-bridge/scim-bridge-0.4.13-r1.ebuild digest
$ sudo sh -c 'CHOST=i686-pc-linux-gnu ABI=x86 FEATURES="noman noinfo" PKGDIR=[tbz2の出力先] USE="gtk noagent" emerge -avBO scim-bridge'

のようにビルドし、作成されたtbz2ファイルからimmoduleのファイルをコピーして、モジュールの登録をする。この方法で入れると、Portageの管理から外れるので、問題があれば、32bit版GTK+ 2を入れるebuild(emul-linux-x86-gtklibs-9999.ebuildとして書いたファイル)にこのtbz2ファイルを含める形に修正して入れるという手もある(今回は扱わない)。
なお、ここで

  • /usr/lib32/glib-2.0/include/glibconfig.h
  • /usr/lib32/gtk-2.0/include/gdkconfig.h

が無いとエラーになるため、まだ無い場合は、emul-linux-x86-baselibs(32bit版GLib 2)とemul-linux-x86-gtklibs(32bit版GTK+ 2)のtbz2ファイルから取り出して配置しておく(詳細は以前の記事)。

$ tar jxf [tbz2の保存先]/app-i18n/scim-bridge-0.4.13-r1.tbz2
$ sudo mkdir /usr/lib32/gtk-2.0/immodules
$ sudo cp usr/lib32/gtk-2.0/immodules/im-scim-bridge.so /usr/lib32/gtk-2.0/immodules/
$ sudo sh -c 'gtk-query-immodules-2.0-32 >| /etc/gtk-2.0/i686-pc-linux-gnu/gtk.immodules'

日本語が入力できるようにはなるのだが、不安定?

これで、Adobe Reader上で日本語が入るようにはなる...のだが、ならないこともある。

$ GTK_IM_MODULE=scim-bridge acroread
Gtk-Message: Failed to load module "gail": libgail.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません
Gtk-Message: Failed to load module "atk-bridge": libatk-bridge.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません
Failed to invoking the agent: 子プロセスがありません
Cannot launch the agent
The messenger is now down
The messenger is now down
Failed to invoking the agent: 子プロセスがありません
Cannot launch the agent
The messenger is now down
The messenger is now down
The messenger is now down
An IOException occurred at scim_bridge_client_imcontext_set_cursor_location ()
An IOException occurred at scim_bridge_client_imcontext_set_cursor_location ()
An IOException occurred at scim_bridge_client_imcontext_set_cursor_location ()

上のようなメッセージ(「IOException」の行)が出たらダメで、SCIMを有効にしようとすると

Failed to receive messages at scim_bridge_client_read_and_dispatch ()
An IOException at scim_bridge_client_handle_key_event ()
An IOException at filter_key_event ()
An IOException at key_snooper ()

などのメッセージが出る。その場合は、一度Adobe Readerを終了して、うまくいくまで「起動/SCIM有効/失敗したら終了」を繰り返す。
下のように、IOExceptionが出ないで起動完了したときには、日本語入力ができる。

$ GTK_IM_MODULE=scim-bridge acroread
Gtk-Message: Failed to load module "gail": libgail.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません
Gtk-Message: Failed to load module "atk-bridge": libatk-bridge.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません
Failed to invoking the agent: 子プロセスがありません
Cannot launch the agent
The messenger is now down
The messenger is now down

これにより、確実ではないものの、入力できる状態で起動さえすれば、日本語検索もできるようになる。

画像は、一度「設置」を検索して、PDF文書中にハイライト(選択部分を示す塗りつぶし)がかかっている状態で、もう一度入力欄に入力しているところ。

使用したバージョン: