ノート PC のモニタ開閉時に acpid を使ってサスペンド/復帰する設定を行いました。
- ThinkPad X60
- Debian GNU/Linux wheezy
はじめに
acpid では ACPI イベントを捕捉して、それに応じたアクションを実行できます。
シンプルな仕組みで、設定も簡単。動作は自由に定義できるので便利です。
acpid については以下のサイトに詳しいです。
イベントの確認
イベントは acpi_listen コマンドで確認できます。
acpi_listen コマンドを実行してノート PC のモニタをパタパタさせてみたところ、lid イベントが発生していることが確認できました。
$ acpi_listen
button/lid LID close
video/switchmode VMOD 00000080 00000000
processor LNXCPU:00 00000081 00000000
button/lid LID open
アクションの定義
イベントに対するアクションは /etc/acpi/events/ 以下で定義します。
$ ls /etc/acpi/events/
ac lenovo-undock thinkpad-volume-up
asus-brightness-down lidbtn tosh-battery
asus-brightness-up panasonic-lockbtn tosh-hibernate
...
定義は非常にシンプルです。
$ cat /etc/acpi/events/sleepbtn
event=button[ /]sleep
action=/etc/acpi/sleep.sh
event には捕捉したいイベントを識別する文字列を指定。正規表現も使えるようです。action にはイベントが発生した際に実行するコマンドを指定。
設定してみる
ノート PC のモニタを閉じたときにサスペンドさせる設定を追加してみます。
イベントは acpi_listen コマンドで確認したところ、モニタを閉じたときに button/lid LID close が発生しているので、それを捕捉します。
アクションは自分でスクリプトを用意することもできますが、/etc/acpi/ に様々なスクリプトが用意されていたので、今回はこれを使いました。
設定が終わったら acpid を再起動します。
$ sudo nano -wk /etc/acpi/events/thinkpad-suspend
event=button[ /]lid LID close
action=/etc/acpi/sleep.sh
$ sudo /etc/init.d/acpid restart
これで設定完了。
ノート PC のモニタを閉じるとちゃんとサスペンドされました。
画面がロックされない
サスペンドはできたものの、なぜか画面のロックがされず、なんだか気持ちが悪い状態。
アクションとして指定した /etc/acpi/sleep.sh を見てみると、xscreensaver の起動を確認し、起動されている場合には xscreensaver-command -lock を実行するようになっていました。サスペンド自体は pm-utils の pm-suspend で実現されています。
なので xscreensaver を立ち上げておけばオッケー。