録箱

[last updated:2009/09/27] [since:2009/09/27]

Gentoo LinuxによるX端末化(その2)

この文書では、Dynabook SS/S5のX端末化の手順メモです。 当方では以下のような粗筋でX端末化に成功していますが、環境の違い、 この文書のバグ :-) などでうまくいかない可能性もあります。 ちょっとした参考程度に考えて下さい。

環境更新

Gentoo LinuxによるX端末化でX端末を作ってより、 長らく更新をサボっていました。そんなこんなしているうちに諸々の環境が変化して いたらしく、困ったことやら新機能が使えないやらの問題が発生していました。

Composite拡張がなくてEmacsの背景透過やらXfceのパネル透過ができなかったのを 契機に、環境の更新をする決心を固めました。

X端末イメージの作成

以下の作業は、ホスト側での作業となります。

Gentoo Linuxの「インストール」

ホスト側の適当なディレクトリ以下に、Gentoo Linuxを「インストール」します。 この過程は、基本的には通常のインストールと同様です。但し、 Gentoo Handbook の5.bから行ないます。また、繰り返しになりますが、

/etc/make.confの追加設定項目は、今回は次のようにしてあります:

LINGUAS="ja"
INPUT_DEVICES="keyboard mouse"
VIDEO_CARDS="trident"
USE="-acl alsa -apm -arts -bonobo -bzip2 -calender -canna -cdr cjk -dga \
     -doc dri -emacs esd -examples -expat -fbcon -fontconfig -foomaticdb \
     -freewnn -gb -gnome -gnustem -gpm -gtk -gtk2 -gtkhtml -guile -hal \
     iconv -ipv6 -java -kde -lesstiff mmx -motif -mozilla -ncurses -nls \
     nptl opengl -oss pcmcia -perl -php -python -qt3 -qt4 -samba sse \
     -tcl -tk -tetex wifi -xattr -xinerama xcomposite -zlib"

この辺りは、適宜工夫してみて下さい。

カーネルの作成

インストールプロセスの一環として、カーネルを作成します。 基本的には、以前のビルド環境から.configをコピーして make oldconfig し、 make menuconfig で調整してビルドします。

(chroot) # make
(chroot) # make modules_install
(chroot) # make firmware_install

パッケージ追加

以下のパッケージを追加します。 無線LANもPCMCIAも使っていないので、今回はpcmcia-csは入れませんでした。

インストールした後は、rc-updateをお忘れなく。今回はdhcpcdのaddは不要です。

(chroot) # rc-update add esound default
(chroot) # rc-update add alsasound boot

システムを再emergeします。

# emerge -uD --newuse system

depcleanします。

# emerge --depclean
# revdep-rebuild

各種の設定

/etc/inittabを編集します。

...
# TERMINALS
c1:12345:respawn:/sbin/agetty 38400 tty1 linux         <- c1を除き、削除
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux
# X terminal
x1:345:respawn:/usr/bin/X -query [XDMCP server host]   <- X端末化
...
#x:a:once:/etc/X11/startDM.sh                          <- 不要

X端末化のための X -query の実行については、 他のファイルを編集する手もあるかと思います。

以下は、インストール環境から抜けてから設定します。

X端末にするマシンで作成したXとミキサーの設定をコピーします。 ターゲット名を付加したファイル名に変更しておいて、シンボリックリンク にすると、流用するときに便利かもしれません。

以下、gentoo以下にインストールしたものとします。

(chroot) # exit                                 <- インストール環境から抜ける
# umount gentoo/proc gentoo/dev                 <- まず、アンマウントする
# cp xorg.conf gentoo/etc/X11/xorg.conf
# cp asound.state gentoo/var/lib/alsa/asound.state

基本的に以前の設定ファイルをコピーすればよいのですが、 今のバージョンではalsasoundの設定ファイルが/etcでなく/var以下に なっていることに注意が必要です。

esoundについては、以下の通り設定します。サンプリングレートの設定も必要です。

/etc/conf.d/esound:

...
ESD_START="-nobeeps -as 2"
...
# Public TCP access.
ESD_OPTIONS="-tcp -public -r 96000"
...

/etc/esd/esd.conf:

...
auto_spawn=1
spawn_options=-nobeeps -as 2 -tcp -r 96000
spawn_wait_ms=100
...

カーネルの配置

作成したカーネルは、/tftproot以下にコピーします。

# cp gentoo/usr/src/linux/arch/i386/boot/bzImage /tftproot/kernel-2.6.31

環境のコピー

不要なファイルの削除で失敗したり、カーネルを設定しなおす羽目になったりする かもしれないので、インストールしたファイルをコピーしておきます。

# cp -a gentoo/ base
# rm -r base/usr/src/*

また、X端末環境用のディレクトリを作成しておきます。

# cp -a base/ env
# mv env base/
# cp -a base/env base/env.bak

この二段目のディレクトリは、emergeで不要パッケージを削除するにあたって portageも削除するため必要です。

不要パッケージ削除

base/以下にchrootします。

# chroot base/
# export PS1="(chroot) $PS1"

以下のportageをunmergeします。

ファイルにリストを書いておき、emergeするのが良いかと思います。

(chroot) # cat del_pkgs.txt | \
           xargs emerge --unmerge --root=env --config-root=env

警告が大量に出ますが、構わず削除します。

不要ファイル削除

不要なファイルを削除します。

(chroot) # chroot env
# export PS1="(chroot2) $PS1"
(chroot2) # rm -r \
            boot opt home mnt \
            var/log/portage var/log/emerge*.log var/log/news \
            var/db/pkg var/cache/edb var/tmp/* \
            usr/local usr/src usr/libexec usr/include usr/portage \
            usr/share/aclocal usr/share/doc usr/share/info usr/share/man \
            usr/share/binutils-data usr/share/gcc-data \
            usr/lib/perl5 usr/lib/pkgconfig usr/lib/portage \
            usr/lib/python2.6 \
            usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include* \
            usr/lib/opengl/xorg-x11/include
(chroot2) # find usr/lib \( -name '*.a' -o -name '*.la' \) \
            -a \! -name '*_nonshared.a' -print | xargs rm

initrdイメージ作成

chroot環境から抜けます。

(chroot2) # exit
(chroot) # exit

イメージファイルを作成します。

# dd if=/dev/zero of=xt.img bs=1024k count=240
# mke2fs -F xt.img
# tune2fs -i 0 -c 0 xt.img
# mount -o loop xt.img /mnt
# cp -a base/env/* /mnt/
# umount /mnt
# gzip xt.img.gz

できたファイルを/tftprootにコピーします。

# cp xt.img.gz /tftproot

おしまい…?

色々とトラブルもあったものの、何とか環境を更新できました。今のデスクトップは こんな感じです。 なお、Emacsの背景透過設定は TransparentEmacs を参考にしました。また、Xfceのパネル透過設定は Xfce - Panel を参考にしました。

因みに、background imageは まんがタイムきららWeb からダウンロードした「GA −芸術科アートデザインクラス−」の壁紙です。 background musicは聴こえませんが :-) 「Don't say "lazy" [5人 ver.]」です。

はまったこと

最後に嵌まった事を紹介します。

portage削除(emerge --unmerge)

portageの削除がうまくできません。

# emerge unmerge sys-devel/python sys-apps/portage
...

portageそのものの削除はできない上、派手にエラーが出ます。

emergeでルートとなるディレクトリを指定できるので、別のルートを作成して やれば、そのルートのportageやpythonは綺麗に削除できます。

今回は削除する方向で作業しましたが、逆に必要なportageを追加するように してX端末用環境を構築する手もあったかと思います。

/がマウントできない(sys-apps/gawk)
/がマウントできず、起動中に停止します。手で mount -o rw,remount / すればマウントできます。/etc/init.d/localmountか/etc/init.d/checkroot で失敗していることが予想されました。 調べていくと、awkがないことが原因でした。sys-apps/gawkは必須です。
Xが起動しない(/etc/X11/xorg.conf)
Xが起動しません。古いxorg.confでRgbPathやModulePathを指定していたのですが、 新しい環境ではそのパスはありません。それぞれの指定を削除しました。
ログイン画面が出ない(カーネルドライバ)
Xは起動するのですが、ログイン画面が出ません。dmesgを見ると、eth0を 認識していませんでした。カーネル構築時に誤ってデバイスドライバを 外してしまっていたようです。
音が歪む(media-sound/esound)
Audaciousで音楽再生すると、音が歪んでいます。 時間の進み方が速く、サンプリング数が不足している感じの音になっています。 EsounDの設定で、サンプリングレート(-r)を設定する必要がありました。 なお、最初に設定を試したとき、/etc/conf.d/esoundの変更を忘れて 「?」となりました。
単一クリックで複数回のクリックになってしまう(/etc/X11/xorg.conf)

例えばアイコンボックスを一回クリックしたのに、 二つのウィンドウが立ち上がります。これは、今回の更新前からそうでした。 調べてみると、

  1. AutoAddDevicesで二重登録されることがある
  2. CorePointerが二つ登録されている

という原因があるようです。halを使っていないので、1の線は無さそうです。 2についても「タッチパッドとUSBマウスが繋がっているのだから、 二つ登録する必要があるのでは?」と思っていました。しかし、実際には /dev/input/miceを一つ登録しておけば、両方とも使えるようです。 なので、InputDeviceのmouseを一つにすることで解決しました。

Section "ServerLayout"
        Identifier     "XFree86 Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection
...
Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/input/mice"
        Option      "ZAxisMapping" "4 5"
EndSection
...
効かないキーがある(x11-apps/xkbcomp, x11-misc/xkeyboard-config)
Ctrl-Alt-Fnによる端末切替や_の入力ができません。 xevで確認すると、_のキーコードは入ってきていますが、 KeySymが無いと言っています。/usr/share/X11/xkbのファイルを調べてみると、 キーコードに対応する定義はあるようです。 …が、X端末環境には/usr/share/X11/xkbがありませんでした。 x11-misc/xkeyboard-configに含まれるファイルのようです。 また、これらのファイルだけでは不十分で、X11-apps/xkbcompも必要でした。 これらのportageを追加すると、_だけでなくCtrl-Alt-Fnも効くようになりました。

録箱

anraku@lemon.plala.or.jp