ホーム

Linux を電源ボタンで shutdown (by apmd)


ATX 電源搭載機で、apmd を使えば、 電源ボタンを2回押して shutdown させることができました。
このページの初出は1999年ごろと思います。 今でもアクセスは多いですが、 リンクの更新程度しかしてないので、内容は古くなっている部分もあります。 御了承下さい。

shutdown するには?

 Linux/FreeBSD を shutdown するには、多くの場合 Ctrl+Alt+Del で可能です(*1)。 標準設定ではそのまま reboot してしまいますが、 そうではなく、電源を切るようにするには次のように設定します。

"/etc/inittab"
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now  コメントにする
ca::ctrlaltdel:/sbin/poweroff  追加

 しかしながら、キーボードを外しているサーバーマシン等では、 この操作は不可能です。

 ところで、IBM の特定のマシンに専用ドライバを書けば、 電源ボタンで自動 shutdown が可能だという話はわりと有名で、 さらに松本 徳真さんによる 電源ボタンでシャットダウン というページもありますが、特定のチップセットでのみ動作します。


自機では使用不可

 私事なのですが、 BKi810 という book 型ベアボーンマシン を購入し、キーボードもディスプレイもつながずに運用しはじめたのですが、 あてにしていた上記のプログラムが実は使えないことが判明し、 「電源が切れない」と頭をかかえてしまいました。

 できないなら、自分で何とかするというわけで、何とかなりました。 というわけで、公開します。


ヒントは apmd

 原理は簡単で、BKi810 の電源ボタンは、ノートパソコンで言うところの suspend あるいは standby と同じ動作をするようで、 apmd を使えば、このボタンを押したことを検知できます。 まぁしかし、ボタンを押せばマシンは suspend するので、 長々と shutdown 処理をさせることは無理なようなのですが、 もう一度ボタンを押して resume した時に shutdown 処理をさせることは可能です。 (シノバーさんは Power buttonでshutdown で1回で shutdown に成功したそうです。)

 前振りが長くなりました。

 このようなマシンで、

 を使い、

 ためのスクリプトを書きました。 suspend と shutdown の機能が共存できるところがえらいですね。(^^) その分、操作が複雑になってしまいましたが。

/etc/apmd/apmd_proxy (所有者 root で実行属性を付ける)
 
case $1 in
resume)
    if [ `find /tmp/apmd -mmin 0|wc -l` -eq 1 ]; then
        /bin/echo -e "\a" > /dev/console
        /sbin/poweroff
    fi
;;
suspend)
    if [ "$2" = "user" ]; then
        touch -t `date -d 5seconds +%m%d%H%M.%S` /tmp/apmd
    fi
;;
esac

 "5seconds" のところは、お好みで調整して下さい。 また 'poweroff' よりも 'halt -p' が適当なマシンもあるでしょう。 shutdown 処理に入るときには、beep を鳴らしています。

 このスクリプトを apmd の -P オプションで引き渡してやります。 ちなみに Vine 2.0 では、こんな設定をすればよいです。 (man には "/etc/apmd/apmd_proxy" をディフォルトで使う、 と書いてあるのに、そういう動きをしれくれないので、 わざわざオプションに書いてます。)

/etc/sysconfig/apmd
APMD_OPTIONS="-p 10 -w 5 -W -P /etc/apmd/apmd_proxy"

 これ以外にも、BIOS の設定項目で 「電源ボタンで suspend する」のような設定が必要ですね。 詳しいことは、前述のシノバーさんの Power buttonでshutdown に書いてらっしゃいますので、そちらもどうぞ。


 (*1) 最近ではよくあることですが、 ログイン画面がコンソールではなく、 xdm 等を使って X が立ち上がっていることがあります。 この場合は Ctrl+Alt+Del の操作は無視されてしまいますが、 Ctrl+Alt+BS で X が終了できるので、 間髪を入れずに Ctrl+Alt+Del を叩くとよいです。 まぁ、shutdown ぐらいは GUI で選べるとは思いますが...


ホーム
リンクはご自由にどうぞ。
土村 展之(tutimura(a)nn.iij4u.or.jp) '(a)'は'@'に置き換えて
更新日 5/ 6 14:57, 2004