Let's Note CF-R4にFreeBSD 7.0-RELEASEをインストールした記録

Let's Note CF-R4 (CF-R4JWMAXC たぶん生協モデル)にFreeBSD 7.0-RELEASE をインストールしたので, メモしておく.

インストール

USB外付けCDドライブにインストールCDを入れて起動して普通にインストールできるはず. (....なのだが, カスタムでインストールしたら, メモリファイルシステム上にインストールしようとしたので, オプションでインストール先を変更して継続したりとかなんとかした. 普通にやれば問題ないんだと思う. ほんとかどうかしらないけど. )

suspend/resume

/boot/loader.confに

hint.psm.0.flags="0x2000"

と書いておく. resume後にマウスが早く使えるように刺激する, とかなんとか. 詳しくはpsm(4)参照. しかし, たまにresume後に(?)マウスが死ぬことがある. 再現したりしなかったりするのでよくわからない. 0x2000(HOOKRESUME)を0x6000(HOOKRESUME+INITAFTERSUSPEND)にしてみるといいのかもしれない. (設定は特に変えてないが, 最近は起こらなくなった. )

また, resume後に画面が真っ暗になるのでsysctl(8)で

hw.acpi.reset_video=1

を設定し, resumeしたあとでリセットするようにする. 起動時に設定させるために, /etc/sysctl.confにこれを追加しておく.

次のコマンド

# acpiconf -s 3

でsuspend(S3, メモリは通電したまま)できる. また, sysctl(8)で

hw.acpi.power_button_state=S3

と設定すると, 電源スイッチをスライドさせるとsuspendする. また, 同じ操作をするかフタを閉めた状態から開けるとresumeする. これも/etc/sysctl.confに追加しておく.

acpiconf -s 3を連続的に実行すると, フリーズするので注意. また, 電源スイッチをスライドさせた直後にフタを開けてもフリーズすることがあるので注意すること.

デフォルトの/etc/devd.confにあるように,

# User requested suspend, so perform preparation steps and then execute
# the actual suspend process.
notify 10 {
        match "system"          "ACPI";
        match "subsystem"       "Suspend";
        action "/etc/rc.suspend acpi $notify";
};
notify 10 {
        match "system"          "ACPI";
        match "subsystem"       "Resume";
        action "/etc/rc.resume acpi $notify";
};

これによってsuspend/resume時に/etc/rc.suspend, /etc/rc.resumeを実行する. 無線LANをwpa_supplicant(8)を介して利用している場合には, /etc/rc.resumeの最後の方に書いてある

#wpa_cli reassociate

のコメントを外しておくと, resume後に再接続を試みる.

CPU周波数の調整

CPU負荷が低いときにCPU周波数を落すように設定できる. これはcpufreq(4)とpowerd(8)によって行われる. cpufreqデバイス入りカーネル(例えばGENERIC)を用意するか, cpufreq.koをロードして, /etc/rc.confに

powerd_enable="YES"

と書いておく. /etc/rc.d/powerd startなどとすれば起動.

稼働するCPU周波数の最低値を指定するには, MHz単位でsysctl(8)によって

debug.cpufreq.lowest=300

などと設定する. この場合は負荷が低いときには300MHzで駆動する(see cpufreq(4)).

デフォルトでは, 温度が閾値より高くなった場合にCPU周波数を落すことで冷却を試みる(passive cooling). その閾値を例えば摂氏75.0に設定したいときはsysctl(8)で

hw.acpi.thermal.user_override=1
hw.acpi.thermal.tz0._PSV=75.0C

と設定しておく. hw.acpi.thermal.user_overrideを1に設定しないと, 二行目の変数の値を初期値から変更できない. 詳しくはacpi_thermal(4)を参照.

X.org

/boot/loader.confに

hw.psm.synaptics_support="1"

と書いておく.

タッチパッドを使えるようにするために, ports/x11-servers/synapticsをインストール. pkg-message で出てくる設定をする. また, /etc/X11/xorg.confの一部を

Option          "LeftEdge"              "1300"
Option          "RightEdge"             "5300"
Option          "TopEdge"               "1300"
Option          "BottomEdge"            "4700"

のように変更.

USB接続したキーボードとマウスを使えるようにする. /etc/X11/xorg.confに

Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Synaptics_Touchpad" "CorePointer"
        InputDevice    "Mouse0" 
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Keyboard1"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbRules"  "xorg"
        Option      "XkbModel"  "jp106"
        Option      "XkbLayout" "jp"
        Option      "XkbOptions" "ctrl:nocaps"
EndSection

Section "InputDevice"
        Identifier  "Keyboard1"
        Driver      "kbd"
        Option      "Device"    "/dev/kbd2"
        Option      "XkbRules"  "xorg"
        Option      "XkbModel"  "pc101"
        Option      "XkbLayout" "us"
        Option      "AlwaysCore" "yes"
EndSection

などと書いておく. しかし, この設定では, ノートPCのキーボードのレイアウト(jp106)とUSBキーボードのレイアウト(us101)が違ってもjp106のキーボードのレイアウトになってしまう. (未解決)

VGA出力

X.Org 7.3ではxrandr(1)コマンドで解像度や表示先を設定できる.

Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1024 x 1024
VGA disconnected (normal left inverted right x axis y axis)
LVDS connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768       60.1 +   85.0*    75.0     70.1     60.0  
   832x624        74.6  
   800x600        85.1     72.2     75.0     60.3     56.2  
   640x480        85.0     72.8     75.0     59.9  
   720x400        85.0  
   640x400        85.1  
   640x350        85.1  

LVDSは本体の液晶ディスプレイのこと. 1024x768で表示可能なVGA出力に本体液晶ディスプレイの表示を出すには,

% xrandr --output VGA --mode 1024x768

とすればよい. 表示をやめるには,

% xrandr --output VGA --off

とする.

ファンクションキーなど

/boot/kernel/acpi_panasonic.ko をロードする.

F1,F2,F4,F7,F10はこれで使えるようである. acpi_panasonic(4)によれば, 他のファンクションキー押下はdevdを使ってコマンドを適当に実行させるとよいらしい.

devdを使うには/etc/rc.confに

devd_enable="YES"

と書いておく. 設定ファイルはデフォルトで/etc/devd.confにある. 詳しくはファイルとdevd.conf(5)を参照.

VGA出力切替え

xrandrは, VGAコネクタが接続されていたら信号を流して, 接続されていなかったら信号を流さないようにするオプション --auto があるので, それで十分な場合には

% xrandr --output VGA --auto 

などとすればよい. Windowsでの挙動のように出力をトグルするようなコマンドはないので, vgatoggle.shというスクリプトを書いた(ちょっとイマイチだけど).

#!/bin/sh

XRANDR=/usr/local/bin/xrandr
AWK=/usr/bin/awk
MODE=1024x768

TMP0=`$XRANDR | grep VGA`
TMP1=`echo $TMP0 | $AWK '{print $3}'`
TMP2=`echo $TMP0 | $AWK '{print $2}'`

# if disconnected, always turn off a signal to VGA
if [ x$TMP2 = x"disconnected" ] ; then
  $XRANDR --output VGA --off
else
  # if connected, toggle output
  if [ x`printf "%c" $TMP1` = x"(" ] ; then
    $XRANDR --output VGA --mode $MODE
  else
    $XRANDR --output VGA --off
  fi
fi

ファンクションキーを押してVGA出力を切替えるために

notify 10 {
        match "system"          "ACPI";
        match "subsystem"       "Panasonic";
        match "notify"          "0x83";
        action "/home/murashin/bin/vgatoggle.sh";
};

と/etc/devd.confに書く.

ところが, これでは動かない. 念のためにaction行を

action "/usr/bin/logger Pressed_Fn+F3";

と変えてみたが, それでも駄目.

devdを-Ddオプション付きで起動してキーを押してイベントが観測されるかチェックしてみたが, Fn+F3とFn+F8のPressイベントとReleaseイベントはdevdに渡っていない. acpi_panasonic(4)には, Fn+F8は対応するイベントコードがないので, 何も起こらないのが正しいのかも知れない. Fn+F3については, "Not supported by the acpi_panasonic driver."と書いてあるのだが, 対応するイベントコードは存在するようにしか読めず, 整合的でないように思える.

/sys/dev/acpi_support/acpi_panasonic.cとか/sys/dev/acpica/以下を見てみたが, devdにイベントを送るかどうかを決めているのがどの部分なのかよくわからなかった.

というわけで保留.

音量調節

音をならすにはsound.koとsnd_ich.koをロードすると良い.

mixer(8)コマンドで音量が調節できる.

/etc/rc.confに

mixer_enable="YES"

と書けば, /etc/rc.d/mixer stopが呼ばれたときにmixerの状態を保存できるようだ.

ファンクションキーを押したときに音量を増減させるには/etc/devd.confに例えば以下のように書く.

notify 10 {
        match "system"          "ACPI";
        match "subsystem"       "Panasonic";
        match "notify"          "0x85";
        action "/usr/sbin/mixer pcm -5";
};

notify 10 {
        match "system"          "ACPI";
        match "subsystem"       "Panasonic";
        match "notify"          "0x86";
        action "/usr/sbin/mixer pcm +5";
}; 

これで, F5を押すたびにスピーカーから出る音量が5ずつ減り, F6を押すたびに5ずつ増える.

無線LAN

カーネルモジュールの読み込み設定など

/boot/loader.confに以下を追記.

legal.intel_iwi.license_ack="1"
if_iwi_load="YES"
wlan_load="YES"
wlan_wep_load="YES"
wlan_scan_sta_load="YES"

一番上の行は/usr/share/doc/legal/intel_iwi/LICENSEを読み, 承諾したというしるし. 詳しくはiwi(4)を参照すること.

アクセスポイントごとの接続の設定

複数のアクセスポイントで使いたい場合には, wpa_supplicant(8)を使うとよい.

FreeBSD Handbook 29.3 Wireless Networking や wpa_supplicant(8), /usr/share/examples/wpa_supplicant/wpa_supplicant.confを見て設定する.

IPアドレスがとれなくなることがある. そのときはrootで

/etc/rc.d/netif restart iwi0

などとする.

XFCE4

x11-wm/xfce4 をインストール.

パネル設定

パネルはデフォルトでは上下にあるが, 下のパネルを右に移した(WindowMakerをずっと使っていたので).

右のパネルには,

をインストールして設置. 設置はプロパティからぽちぽちと.

xfce4-genmon-plugin で現在のCPU周波数をモニタする. プロパティから指定するコマンドは``やらパイプやらを解さないので, シェルスクリプトを用意する.

#!/bin/sh

echo "<txt>`sysctl -n dev.cpu.0.freq`MHz</txt>"
echo "<tool></tool>"

これを~/bin/cpufreqmon.shなどと適当な場所に保存して, genmonから指定する. <tool></tool>はtooltipとして表示する文字列として空文字列を指定している. デフォルトではスクリプトのパスが出てしまい, 大きなtooltipが表示されて邪魔なので.

その他

NTFSのマウント

/etc/fstabに以下を書いて,

/dev/ad0s1 /mnt ntfs rw,noauto 0 0

次のコマンド

# mount_nfs /mnt

でマウントできる. 読み込みは問題なくできるようだが, 書き込みはできないようだ.

ToDo

resolv.conf読み直さない問題

/etc/resolv.confを変更したらアプリケーション(例えばfirefox)を再起動しないと反映されない. モバイル環境でのDNS (BSD Magazine No.12)によれば, dns/totdを入れてdhclientの設定をいじれば/etc/resolv.confを変更せずに済む.

複数のアクセスポイントがある場合につなぎなおしまくる問題

ある空間から複数のアクセスポイントが見える場合(例えば, 私の場合は研究室)で, /etc/wpa_supplicant.confに複数のアクセスポイントの設定を書いている場合に, 頻繁別のアクセスポイントに再接続し, それまでのコネクションが切れる.

priorityをアクセスポイントごとに設定してあるが, 効果はないようだ.

そこそこ接近して3-4台おいてあるので, 全部使わなくても実はあまり問題がない. そういうわけで, /etc/wpa_supplicant.confには複数ある一つのアクセスポイントしか書かないようにした.

ところが, どうもそれでも設定ファイルに書いてあるアクセスポイント以外のアクセスポイントに繋いでいることがある. これは要調査.

参考文献