[OSx86|wpja: OSx86]] で楽しんでいた [[MSi U100](http://www.msi-computer.co.jp/products/NB/U100.html) に、[Ubuntu 9.10 Server](http://www.ubuntulinux.jp/products/WhatIsUbuntu/serveredition) をインストールしてサーバに仕立てることにした。SSH と [Webmin](http://www.webmin.com/) をインストールしてリモートで使えるようにしたあと、蓋を閉めても液晶が点灯したままであることに気がついた。
Google 先生に聞くと、setterm が良いようだ。早速試してみたのだが、全然効かない。Ubuntu Server は特殊なのかと思い検索してみると、Ubuntu日本語フォーラム にドンピシャの記事があった。
記事に従い、vbetool をインストールし、
$ sudo vbetool dpms off
で、見事消灯した。
問題は、消したは良いが、再び点灯できないこと。ssh でリモートから繋げれば点灯できるのだが、ローカルで何とかしないと不便だ。そこで再び Google 先生に聞いてみると、EeePC 4GのLCD 液晶ディスプレイの バックライトをオフ 消す 消灯するには、 vbetool dpms off 。 が見つかった。しかし、/etc/apci の下を見ても空っぽ。
そこで、acpi-support をインストール。インストールしたのだが、記事のような /etc/acpi/actions というディレクトリは無い。適当にディレクトリを掘って、ファイルを置いてみたのだが、案の定動かない。ディレクトリを眺めると、actions は無いけど、events がある。まあこれだろうと思って中を見ると、
$ ls
ac asus-video sleepbtn tosh-mail
asus-brightness-down asus-wireless-2 sony-mute tosh-media
asus-brightness-up asus-wireless-off sony-sleep tosh-next
asus-eee-volume-down asus-wireless-on sony-volume-down tosh-play
asus-eee-volume-mute battery sony-volume-up tosh-prev
asus-eee-volume-up ibm-wireless thinkpad-cmos tosh-stop
asus-f8sv-touchpad lenovo-touchpad tosh-battery tosh-wireless
asus-media-eject lidbtn tosh-hibernate tosh-www
asus-rotate panasonic-lockbtn tosh-ibutton videobtn
asus-touchpad powerbtn tosh-lock
$
こんな感じ。ASUS や TOSHIBA など、ハードウェア依存の名前っぽいのが並んでいる。メーカー非依存っぽいので使えそうなのが lidbtn 。中を見るとこんな感じ。
# /etc/acpi/events/lidbtn
# Called when the user closes or opens the lid
event=button[ /]lid
action=/etc/acpi/lid.sh
蓋の開け閉めのイベント発生時に /etc/acpi/lid.sh が実行されるっぽい。/etc/acpi/lid.sh の中は次のようになっている。
#!/bin/bash
# TODO: Change the above to /bin/sh
test -f /usr/share/acpi-support/state-funcs || exit 0
. /usr/share/acpi-support/power-funcs
. /usr/share/acpi-support/policy-funcs
. /etc/default/acpi-support
[ -x /etc/acpi/local/lid.sh.pre ] && /etc/acpi/local/lid.sh.pre
if [ `CheckPolicy` = 0 ]; then exit; fi
grep -q closed /proc/acpi/button/lid/*/state
if [ $? = 0 ]
then
for x in /tmp/.X11-unix/*; do
displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
. /usr/share/acpi-support/screenblank
fi
done
else
for x in /tmp/.X11-unix/*; do
displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
grep -q off-line /proc/acpi/ac_adapter/*/state
if [ $? = 1 ]
then
if pidof xscreensaver > /dev/null; then
su $user -c "xscreensaver-command -unthrottle"
fi
fi
if [ x$RADEON_LIGHT = xtrue ]; then
[ -x /usr/sbin/radeontool ] && radeontool light on
fi
if [ `pidof xscreensaver` ]; then
su $user -c "xscreensaver-command -deactivate"
fi
su $user -c "xset dpms force on"
fi
done
fi
[ -x /etc/acpi/local/lid.sh.post ] && /etc/acpi/local/lid.sh.post
見るからに X 依存だし、試してみても消灯しない。どうせ Server で X は使わないつもりなので書き換えることにした。念のため、/proc/acpi の下を見てみると次のようになっている。
$ sudo cat /proc/acpi/button/lid/LID0/state
state: closed
$
なので大胆に次のようにしてしまった。
#!/bin/bash
# TODO: Change the above to /bin/sh
test -f /usr/share/acpi-support/state-funcs || exit 0
. /usr/share/acpi-support/power-funcs
. /usr/share/acpi-support/policy-funcs
. /etc/default/acpi-support
[ -x /etc/acpi/local/lid.sh.pre ] && /etc/acpi/local/lid.sh.pre
if [ `CheckPolicy` = 0 ]; then exit; fi
grep -q closed /proc/acpi/button/lid/*/state
if [ $? = 0 ]
then
/usr/sbin/vbetool dpms off
done
else
/usr/sbin/vbetool dpms on
done
fi
[ -x /etc/acpi/local/lid.sh.post ] && /etc/acpi/local/lid.sh.post
試すとうまく動いている。よしよし。次は CPU クロックとか、ファンの制御か。この辺は面白いんだけど面倒。Mac は簡単でいいなぁ。やっぱり。

APPLE MacBook 2.26GHz 13.3インチ 250GB MC207J/A