x86_64版Ubuntu Gutsyで32bit版GTK+ 2アプリで日本語が入らない件についてのその後
結論から書くと、日本語入力できるようになった。そのために必要な作業は
- ビルド用の32bit chrootの作成
- chroot環境に入り、32bit版GTK+ 2を自分でconfigureしてビルド
- 32bit版のSCIM-Bridge immoduleのインストールと、64bit環境へのコピー
となる。Adobe Readerを使用する場合、別途ファイルの書き換えが必要。
以下、/opt/gutsy32/以下に32bitのUbuntu Gutsy環境を作成するものとする。作業の中には、不必要なものが含まれている可能性もある。
32bit chrootの作成
ミラーは国内のものを使用すればどこでもよい。$ sudo apt-get install debootstrap $ sudo mkdir /opt/gutsy32 $ sudo debootstrap --arch i386 gutsy /opt/gutsy32/ http://ubuntu.mithril-linux.org/archives/ $ sudo sh -c 'for x in /opt/gutsy32/ /opt/gutsy32/usr/ /opt/gutsy32/usr/local/; do cd ${x}; mv lib lib32; ln -s lib32 lib; done'
次に、chrootコマンドのラッパースクリプトを作成しておく。
ファイル名: chroot32.sh
#! /bin/dash CHROOT_DIR=/opt/gutsy32 for x in /dev /proc /sys /tmp; do mount -o bind ${x} ${CHROOT_DIR}${x}; done linux32 chroot ${CHROOT_DIR} /bin/bash for x in /dev /proc /sys /tmp; do umount -f ${CHROOT_DIR}${x}; done
下のようにしてchroot環境に入る。
$ sudo ./chroot32.sh
chroot内での作業
初期設定(apt-line)
chroot# echo 'deb-src http://ubuntu.mithril-linux.org/archives gutsy main' >> /etc/apt/sources.list chroot# sed -i 's/\(main\)$/\1 restricted universe multiverse/' /etc/apt/sources.list chroot# apt-get update
必要なパッケージの準備
2行目では、GTK+ 2のDebianパッケージのビルドに必要なパッケージを取っているが、DirectFBなど、実際には使用されないものも含まれている(多分入れなくても大丈夫)。chroot# apt-get -y install language-pack-ja build-essential chroot# apt-get -y install debhelper gettext pkg-config libglib2.0-dev libpango1.0-dev libatk1.0-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxt-dev libxrender-dev libxft-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxkbfile-dev libxinerama-dev libxfixes-dev libcairo2-dev libcairo-directfb2-dev libtiff4-dev libjpeg62-dev libpng12-dev gnome-pkg-tools chrpath x11proto-xext-dev libdirectfb-dev libcupsys2-dev quilt gtk-doc-tools docbook-xml chroot# apt-get -y install scim-bridge-client-gtk
GTK+ 2のビルド
作業ディレクトリの場所は問わない。例では/tmp/work/を使用している。chroot# for x in /usr/lib32/pkgconfig/*.pc /usr/bin/[a-oq-z]*-config /usr/lib32/*.la; do sed -i -e 's|\(${exec_prefix}/lib\)|\132|' -e 's|\(/usr/lib\)|\132|g' ${x}; done chroot# mkdir /tmp/work; cd /tmp/work/ chroot# apt-get source libgtk2.0-0 chroot# cd gtk+2.0-2.12.0/ chroot# ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc --with-html-dir=/usr/share/doc/libgtk2.0-doc --enable-test-print-backend --with-xinput --libdir=/usr/lib32 --build=i486-linux-gnu chroot# make chroot# make install-strip chroot# cd - chroot# rm /tmp/work/ -fr
ここでCtrl+dなどでchrootを抜ける。
x86_64環境へのファイル配置
GTK+ 2の.soファイル(ビルドしたもの・中心となるlibgtk-x11-2.0.so.0.1200.0のみ)とSCIM-Bridgeのimmoduleをコピーし、x86_64環境へのimmoduleの登録を行う。$ sudo mv /usr/lib32/libgtk-x11-2.0.so.0.1200.0{,.orig} $ sudo cp /opt/gutsy32/usr/lib32/libgtk-x11-2.0.so.0.1200.0 /usr/lib32/ $ sudo cp /opt/gutsy32/usr/lib32/gtk-2.0/2.10.0/immodules/im-scim-bridge.so /usr/lib32/gtk-2.0/2.10.0/immodules/ $ sudo sh -c '/usr/lib32/libgtk2.0-0/gtk-query-immodules-2.0 >| /etc/gtk-2.0/gtk.immodules.32'
32bit GTK+アプリケーションの実行方法
の指定が必要。Adobe Reader 8.1.1の場合は下の修正で日本語が入力できるようになる。
--- /opt/Adobe/Reader8/bin/acroread.orig +++ /opt/Adobe/Reader8/bin/acroread @@ -70,6 +70,8 @@ LaunchBinary() { if [ "`uname -s`" = "Linux" ] && [ ! -x /lib/ld-lsb.so.3 ]; then + export GTK_IM_MODULE=scim-bridge + export GTK_IM_MODULE_FILE=/etc/gtk-2.0/gtk.immodules.32 exec /lib/ld-linux.so.2 ${1+"$@"} else exec ${1+"$@"}
ただし、例によってSCIM-Bridgeは気まぐれなので、動かなかったらうまくいくまでアプリを起動し直す必要がある。
*1:アプリケーションの動作中に「入力メソッドの選択」をしてもよい