blog.fuktommy.com

Linux on Inspiron 700m

はじめに

DELLInspiron 700m (テレビCMでやってる/やってたやつ)が生協で安かったので、 クラスメイトが買いました。 それにつられて、僕も買ってしまいました。

性能は申し分ないのですが、サイズと重さが微妙です。 A4ジャストサイズ・12.1インチディスプレイは据置くにはちょっと小さいです。 1.7kgはモバイルにはちょっと重いです。

まあ、とにかくDebian GNU/Linux (Sarge)を インストールしてみましたので、ノートしておきます。

カーネル

2.6.8を利用。 2.4(Knoppix3.4日本語版に入ってたやつ) だとNICドライバがうまく動かなかったため。

NICドライバ

b44を利用。前述のようにカーネルのバージョンによっては動きません。 Knoppix3.4日本語版に入ってる2.6カーネルでは動きます。

USB関連

usbcore, uhci_hcd, ehci_hcd, ohci_hcd, usbmouseモジュールを読み込みました。

KnoppixだとUSBメモリを差し込んだまま起動すれば自動で認識されます。

インストール手順のメモ

詳しくはKnoppixでDebianをインストールを参照してください。

  1. Knoppixで起動
  2. cfdisk /dev/hda
  3. mke2fs -j /dev/hda1 (例)
  4. mkreiserfs /dev/hda5 (例)
  5. mkswap /dev/hda6 (例)
  6. ファイルシステムのマウント
  7. /etc/resolv.confの設定
  8. debootstrap の最新版debを入手し、展開する(任意)
  9. debootstrap sarge /mnt/debroot http://www.t.ring.gr.jp/pub/linux/debian/debian 最新版を展開したところ/usr/lib/debootstrap/scripts/sarge
  10. エラーが出て止まっても、ここでは気にしない
  11. chroot /mnt/debroot /bin/bash
  12. chmod o+s /tmp /var/tmp
  13. /etc/apt/source.listの設定
  14. apt-get update
  15. apt-get -f install
  16. exim4の設定は後まわし
  17. base-config

debootstrapについてはDebian GNU/Linux on OpenBlockS266を参考にしました。

各種設定

詳しくはKnoppixでDebianをインストールを参照してください。

  1. /etc/fstab
  2. /debroot/etc/hostname
  3. /debroot/etc/hosts
  4. /debroot/etc/network/interfaces
  5. apt-get --reinstall dpkg
  6. rm /usr/sbin/sendmail && ln -s exim4 /usr/sbin/sendmail
  7. apt-get install kernel-image-2.6.8-1-686
  8. apt-get install grub

GRUBの設定

詳しくはKnoppixでDebianをインストールを参照してください。

  1. grub-install --root-directory=/boot /dev/hda (エラーで止まる)
  2. cd /boot && mv boot/grub . && rmdir boot
  3. cd /boot/grub && cp /lib/grub/i386/* .
  4. cp /usr/share/doc/grub/example/menu.lst .
  5. menu.lstの設定。timeout,default,fallbackの行だけあればよい
  6. update-grub
  7. grubを起動して設定 (root (hd0,0) ; setup(hd0))
  8. いよいよ再起動

XFree86の設定

Dell 700m with Debian Sargeを参考にします。 1280x800の解像度にするにはちょっと複雑なことをします。

  1. Home of Alain Poirierから 855resolutionを入手
  2. make && strip 855resolution && cp 855resolution /uer/local/sbin
  3. /usr/local/sbin/855resolution 5c 1280 800 (これは起動時に毎回実行)

それから /etc/X11/XF86Config-4 をこんな感じに

/etc/X11/XF86Config-4:
Section "Monitor"
        Identifier      "Generic Monitor"
        HorizSync       30-90 
        VertRefresh     50-160
        Option          "DPMS"
        Modeline "1280x800_60.00"  83.46  1280 1344 1480 1680  800 801 804 828
        -HSync +Vsync

タッチパッドを使うには psmouse, mousedev モジュールを読み込みます。

USBメモリ

十条電子株式会社の Disk Key J!というUSBメモリを使いました。 各種設定ファイルは次の通り。

/etc/usbmgr/vendor/0c45/1060/module:
scsi_mod
sd_mod
usb-storage
/etc/mtools.conf:
drive b: file="/dev/sda1"
fstab:
/dev/sda1 /mnt/flash vfat user,noauto,showexec 0 0

パワーマネージメント

  1. apt-get install acpi acpid hdparm
  2. hdparm -S 120 /dev/hda (アクセスがなければ10分でHDDの回転を止めるという意味。起動時に毎回実行)

バッテリが空になりそうになったら、自動的に電源を切る設定もしました。 恐いので試してません。

/etc/acpi/events/battery:
event=battery
action=/etc/acpi/battery.sh
/etc/acpi/battery.sh:
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
STAT=/proc/acpi/battery/BAT0/state

if grep "capacity state:.*critical" $STAT > /dev/null 2>&1; then
        shutdown -h +1 "Battery critical"
fi

ついにサスペンドができるようになりました。 まず S3 resume: no video - Sony S1XP にある video_post tool from Venki をダウンロードし、インストールします。

/etc/acpi/powerbtn.sh:
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
MODULES="usbmouse ehci_hcd uhci_hcd usb_strage"

/etc/init.d/usbmgr stop
for m in $MODULES; do
    rmmod $m
done
umount /proc/bus/usb
rmmod usbcore
sync; sync; sync;

echo mem > /sys/power/state

video_post
modprobe usbcore
mount -t usbfs usbfs /proc/bus/usb
for m in $MODULES; do
    modprobe $m
done
/etc/init.d/usbmgr start

これで電源ボタンを押すとサスペンドします。 もう一度電源ボタンを押すと復帰します。 Xを立ち上げているときには表示が乱れますので、 予めコンソールに切り替えておきます。

復帰したときにUSBマウスや、そのほかのUSB機器を認識しないことがあります。

モニタの電源を切るには次のように入力します。

% xset dpms force off

サウンド

次のようにしてsnd_intel8x0モジュールを読み込みます。

  1. apt-get install alsa-utils
  2. alsaconf

Skype-1.0.0.7が動きました。音声入力・出力ともに問題ありません。 ちなみにSkypeで日本語入力を文字化けなしに行うには、次の設定が必要です。

~/.qt/qtrc:
[General]
XIMInputStyle=Over The Spot

フォント

画面が小さく、解像度が高いので字が小さくなります。 仮想端末では次のようにして大きな文字を表示できるようにしました。 krxvt -fn rk24 -fm kanji24

Emacsのためには次のように設定しました。 rxvtでも同様の設定ができます。

~/.Xresources:
Emacs*font:  -sony-fixed-medium-r-normal--24-*
Emacs*mfont:  -jis-fixed-medium-r-normal--24-*

キーボード

CAPSをCtrlにする定番の設定の他に、 アプリケーションキーをAltに割当てました。 右Altキーがないためです。

~/.Xmodmap:
! [Caps] -> [Ctrl]
remove Lock = Caps_Lock
remove Control = Control_L
!keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

! [Kanji] -> [Esc]
keycode 49 = Escape

![Henkan] -> [Space]
keycode 120 = space
keycode 129 = space
keycode 131 = space

![Windows] -> [Space]
keycode 115 = space
keycode 116 = space
keycode 117 = Alt_R
add mod1 = Alt_R

外部ディスプレイ出力

キーボードに切り替えスイッチがありますが、利きません。 linux on VAIO TR2を 参考に設定します。

  1. i855crt を入手する。
  2. 設定ファイルが /usr/local/etc/i855crt.conf になるように書き換える。
  3. インストール
  4. Ctrl+Alt+テンキーの「+」などで解像度を切り替える
  5. i855crt on 640x480@60

画面左上にゴミが入りますが、ほぼ問題ありません。 プロジェクタに繋げば gv ohp.ps -spartan のようにしてプレゼンができると思います。

i810switchでもいいのかもしれませんが、画面がちらつきます。 ディスプレイやプロジェクタとの相性かもしれませんが、よくわかりません。

プレゼンで全画面表示をするならpspresentが便利です。 ただし左上のゴミを回避するならgvの方がよいでしょう。

ネットワークの違いに対応する

家と学校では動作を変えるとか、ネットワークの有無とか。

これが最初のやりかたです。現在は違います。

  1. Exim4については後述。
  2. ntpdate はサーバをIPアドレスで記述する。タイムアウトが利く。
  3. runlevel 3 をスタンドアローンモードとする。GRUBの設定。
  4. /etc/rc3.d から要らないサーバは削除。今回は該当するものはなし。
  5. runlevel コマンドの出力によって挙動を変化させる。

現在のやりかたです。

  1. ntpdate はサーバをIPアドレスで記述する。タイムアウトが利く。
  2. ntpdate はときどき実行する。
  3. LAN内部でDHCPサーバを動かす。
  4. /etc/network/interfaces では eth0 は auto にしない。
  5. 別に起動スクリプトを用意し、バックグラウンドでeth0を有効にする。
/etc/cron.d/ntpdate:
# m     h dom mon dow user command
49    */3   *   *   * root /etc/init.d/ntpdate start > /dev/null 2>&1
/etc/network/interfaces:
auto lo
iface lo inet loopback

iface eth0 inet dhcp
        pre-up /sbin/iptables-restore < /etc/iptables/active
/etc/init.d/localnet:
#!/bin/sh

PATH=/sbin:/bin:/usr/bin
IFACE=eth0

case "$1" in
        start)
                echo -n "bring up: "
                ifup $IFACE > /dev/null 2>&1 &
                echo "$IFACE."
        ;;
        stop)
                echo -n "take down: "
                ifdown $IFACE > /dev/null 2>&1
                echo "$IFACE."
        ;;
        force-reload|restart|reload)
                $0 stop
                $0 start
        ;;
        *)
                echo "Usage: $0 {start|stop|restart|reload|force-reload}"
                exit 1
esac

exit 0
# update-rc.d localnet start 41 S . stop 32 0 1 6 .

Exim4をinetd経由で起動するための細工

LANなしで起動したり、 インターネット向けのメールサーバにしたりの切り替えのためです。

この設定は実はあまり意味がないことがわかりました。 eth0が有効なのにLANに繋がってない、というのが問題でした。 eth0が無効ならExim4は動きます。

実行するコマンドは次の通り。

  1. update-exim4defaults --queuerunner queueonly

設定ファイルは次の通り。

/etc/inetd.conf:
smtp stream tcp nowait Debian-exim /usr/sbin/exim4 exim4 -bs
/etc/cron.d/exim4-local:
# Run queue every 15 minutes
08,23,38,53 * * * * Debian-exim if [ -x /usr/sbin/exim4 ]; then /usr/sbin/exim4 -q ; fi

# Tidy databases
13 16 * * * Debian-exim if [ -x /usr/sbin/exim_tidydb ]; then /usr/sbin/exim_tidydb /var/spool/exim4 retry >/dev/null; fi
17 16 * * * Debian-exim if [ -x /usr/sbin/exim_tidydb ]; then /usr/sbin/exim_tidydb /var/spool/exim4 wait-remote_smtp >/dev/null; fi
Copyright© 1998-2014 Fuktommy. All Rights Reserved.
webmaster@fuktommy.com (Legal Notices)