Debian Linux for CF-W4 (Let's note)

コメントはお気軽にメールでどうぞ。

トピック

パーティーション

取り敢えず Knoppix 3.9 が立ち上がる。qtparted で 16G windows に残し、 残りは 1G のスワップと残り全て reiser。今のところ linux 部分で 50% 位の 使用量なのでまあ大丈夫っぽい。KDE, Gnome を使わなければこんなものか。

インストール

Knoppix からハードディスクインストールしてみる(k2hd)。 エラク時間がかかるが問題なし。

Debian に戻す

これが結構面倒。まあ、本質的でないので後でまとめることにする。

細かい設定やドライバ

hdparm

まず第一に /etc/default/hdparm で取り敢えず DMA を有効にする。 これがないと、ディスクが遅すぎて作業のオーバーヘッドになる。こういう 設定にしてみた。と言ってもごく普通。
harddisks="/dev/hda"
hdparm_opts="-d1 -c1"

で、これを

/etc/init.d/hdparm restart

で有効にする。

カーネルのリビルド

Knoppix は便利な半面、不必要なモジュールが沢山ロードされているので、 これを綺麗にするために、カーネルを再構築する。最新カーネルで問題なし。 取り敢えずはネットさえ使えればいいので eth0 の Realtek 関係だけ注意。 他には、

位かな? IDE とか alsa とか、適当にやってください。

カーネル変更後

ここからが本題。元々のカーネルに載っていないモジュールを自分で 足していく。

無線 LAN eth1: ipw2200 + ieee80211

kernel 2.6.15 ではカーネルソースに既に入っていて問題なし。

そうでない場合、ipw2200.sf.org からソースを入手。ファームウェアのインストールと、 ieee80211 のソースが必要な点以外は問題なし。ポイントはソースパッケージを使わず、最新の物を使うことか。

udev の一部のバージョン(例、0.088-2)では ipw2200 のファームウェアのロードに time out で失敗する。0.089-1 では問題なし。

特殊 acpi デバイス: pcc_acpi

LCD の輝度や音量が取得/変更できる。 ソースはここで 入手。どのファイルが何かちょっと判りにくいので、ちょっとメモ:
pcc-acpi-?.?.?
肝心のカーネルモジュール。コンパイルは容易。
hotkey-handler-?.?, ac-power-handler-?.?
ACPI のイベントハンドラーなど。/etc/acpi に置く。Perl や sh なので 改造容易。
hotkeys-?.?.?
Fn+functionキーを押すことで、pcc-acpi のインターフェースにアクセス、 輝度や音量を変更するためのアプリケーション。 そのままコンパイルしてもいいけど、gtk2 はスプラッシュスクリーンにしか 使われていないから外してしまってコンパイルしたほうがよい。

X.org

X.org が使えるようになりました。(testing 以上?)X.org には i915GM に対応している i810 ドライバを使えばいいです。(昔はうまくいきませんでしたので dri nightly build を使う必要がありました。)

dri nightly build (今は必要ない)

問題が一部解決しました。i915GM の対応は x.org 6.8.2 リリース以降、さらに 進化しているようです。dri.freedesktop.org の nightly build を使うと見事 i810 で描画可能。dri も動いて快適。くわしくは ここ を見てもらうとして、かいつまんで書くと、 dri.sourceforge.net/snapshots から を入手、展開の後、GL/*, core/*, i915/* のファイルを/usr/X11R6/lib に 存在するオリジナルファイルと差し替えれば、i810 ドライバがちゃんと 動作します。ファイル差し替え時のパス確認や、バックアップを取るのを 忘れないように!

direct rendering: Yes

i915GM は「一応」hardware 3d graphics accellaration がついています。今まであきらめていたんですが、これもうまく動きました。glxinfo で direct rendering: Yes と出たらおめでとう、うまく動いています。testing でうまくいかなかったら、、、unstable の xorg に一式入れ換えてみてください。

タッチパッド: xfree86-driver-synaptics

xfree86-driver-synaptics で動きます。タッチパッド下端からのスクロールも 快調。設定では、ドラッグとダブルクリックの狭間でちょっと苦労しました。 現在の設定(抜粋):
Option "LeftEdge" 	"1500"
Option "RightEdge" "5400"
Option "TopEdge" "1200"
Option "BottomEdge" "4400"
Option "FingerLow" "25"
Option "FingerHigh" "28"
Option "MaxTapTime" "340"
Option "MaxTapMove" "220"
Option "MaxDoubleTapTime" "180"
Option "ClickTime" "100"
Option "FastTaps" "0"
Option "EmulateMidButtonTime" "75"

手で色々いじっていたのですが、結局、X を再起動しなくても設定が 確認できる qsynaptics が楽。

CRT out

CRT out は i855crt に i915 用のパッチを当てれば動きます。ソース、 パッチとも、 http://sourceforge.net/projects/i855crt から入手可能。ただ、問題があって、上述のバージョンの i810 ドライバでは 色がおかしくなります。vesa ドライバを使えば、描画は遅くなりますが、色も 正しく表示できます。だれかうまくいったら是非教えてください。

Suspend to RAM: S3

個人的には S4 より S3 のほうがきびきびして好きなので。 モジュールなどをちゃんと外してやれば動くみたい。ただし、コンソールから 行うとスクリーン復帰しない。また、復帰するには蓋を開くか、 パワースイッチを使うが、パワースイッチを押したという acpi イベントを 拾って shutdown してしまわないように、/etc/acpi/powerbtn.sh を少々いじる 必要がある。 suspend 用のスクリプトを適当に書いて実験中。 動いているようだ。

DNS proxy: pdnsd

S3 ができると俄然問題になってくるのが DNS。移動して別のネットに接続すると name server も変わって resolv.conf も変わる。でも既に立ち 上がっているアプリケーションは前の resolv.conf の設定のままなので、再立ち 上げが必要になる。firefox とか、 fetchmail とか。そこで DNS proxy を立ち上げて、接続先が変更されるごとに proxy を設定し直すことでこの問題を解決することにしました。(resolveconf を入れればそんな必要もない?) はじめは totd を使っていたのですが、cache 機能のある pdnsd を今は使っています。親 dns server が狂ったときにも cache を見に行くので結構便利。

ipv6

ipv6 が on になっていると firefox を使っているとアホな dns サーバが time out するのでカーネルでサポートを off。(pdnsd とは関係ないか。)

resolveconf

resume した時、pdnsd に新しい dns server を見に行くようにさせる。依存関係は: dhclient => /etc/dhclient-script の make_resolv_conf() => /sbin/resolvconf -a eth1 => /etc/resolvconf/update.d/pdnsd => /usr/sbin/pdnsd-ctl で更新 と、結構ややこしい。うまくいかないときはこれらのスクリプトを一個づつ確認していくとよい。
/etc/dhclient-enter-hooks

pdnsd.conf

global { ... status_ctl=on; neg_ttl=2000; neg_rrs_pol=on; ... }
server { label="resolvconf"; uptest=none; timeout=1; proxy_only=on; }
source { ttl=86400; owner="localhost."; file="/etc/hosts"; }
で運用中。

/etc/dhclient-enter-hook

totd を使っていた人はここが totd 用に変更されているので元に戻す。

問題点

resume 時になぜか pdnsd がボケていて新しい server を見に行ってないときがある、、、/etc/pdnsd restart, dhclient eth1 で解決するが、、、

DNS proxy: totd (今は使っていない)

dns proxy の totd を使う。まず resolv.conf を変更して totd を見に行くようにする:
nameserver 127.0.0.1

totd 自体は、ネット接続の変更ごとに dhclient 経由で /etc/totd.conf を 書き換えたうえ再立ち上げする。totd には totdconfig という、それこそ dhclient のスクリプトのフックを生成するコマンドが付随しているので簡単。

totdconfig -a -D

これで、dhclient を呼んで name server の変更を察知すると、totd が新しい 設定の元で再起動されるようになる。

laptop-net は dhclient を使っているようなので問題なし。残りは手動で ifconfig や route を呼び出す場合だが、これは手動で /etc/dhclient-enter-hooks のようなことをやってやればよろしい。

cpufreqd

/etc/cpufreqd.conf で acpi_workaround=1 にすると、cpufreqd が 動作するときのロードを低く抑えることができる。W4 の CPU の 最低動作周波数は 0.6GHz とフルの半分なので、Profile を色々と修正。 温度監視の簡単なシェルプログラムを書いて、温度上昇を抑える(つもりの) 機構を作ってみた。

発振音

なーんか本体左上方、電池の近くからピーピーという小さい発振音が 聞こえてくることが、、、AC アダプタの抜き差しと関係があるようだが、、、 Linux と関係ないようだけど。気にし出すと結構気になる。これを解決?する 方法を発見しました。発振音は次の時、聞こえなく(非常に小さく)なります: 発振音をなくすために常時ハードディスクをアクセスしたり、サウンドを 再生しつづける訳にはいかないので、試しに、マイクから音を取り 込んでみると、これでも発振音が消えることが判りました。なので、
cat /dev/dsp > /dev/null

と試しにしてみると、これで何と発振音が止まる!ずっと読み 出しつづけるのもアレなので、CTRL-Z でサスペンドしてみましたがこれでも 発振音は消えたままです。というわけで、マイクが使えなくなりますが、 /dev/dsp を open して1バイト読み込むだけで発振音が消えることが 判りました。ただ、/dev/dsp だと oss 関係のソフトと相性が悪そうなので、 /dev/adsp を使ってみたらこれもOK。と言う訳で、次のプログラムを 動かしています:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{
int fd;
char buf[256];
fd = open("/dev/adsp", O_RDONLY);
read(fd, buf, 1);
pause();
}

これで消えます。騙されたと思ってやって御覧。

リンク

参考にしたページなど