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の各クライアントと、エージェントはバイナリー的に独立です。従って、異なったアーキテクチャー用にクライアントから、特定のエージェントへの通信を行うことも可能です。
これが使えないか、と思い、試してみた。
どのように動作するか
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文書中にハイライト(選択部分を示す塗りつぶし)がかかっている状態で、もう一度入力欄に入力しているところ。
使用したバージョン:
- Adobe Reader 8.1.1 日本語版 (acroread 8.1.1)
- SCIM 1.4.6 (scim 1.4.6)
- SCIM-Bridge 0.4.13 (scim-bridge 0.4.13-r1)