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

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

x86_64版Ubuntu Gutsyで32bit版GTK+ 2アプリで日本語が入らない件についてのその後

結論から書くと、日本語入力できるようになった。そのために必要な作業は

  1. ビルド用の32bit chrootの作成
  2. chroot環境に入り、32bit版GTK+ 2を自分でconfigureしてビルド
  3. 32bit版のSCIM-Bridge immoduleのインストールと、64bit環境へのコピー

となる。Adobe Readerを使用する場合、別途ファイルの書き換えが必要。

以下、/opt/gutsy32/以下に32bitのUbuntu Gutsy環境を作成するものとする。作業の中には、不必要なものが含まれている可能性もある。

  1. 32bit chrootの作成
  2. chroot内での作業
    1. 初期設定(apt-line)
    2. 必要なパッケージの準備
    3. GTK+ 2のビルド
  3. x86_64環境へのファイル配置
  4. 32bit GTK+アプリケーションの実行方法

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:アプリケーションの動作中に「入力メソッドの選択」をしてもよい