ノート PC のモニタ開閉時に acpid を使ってサスペンド/復帰する設定を行いました。

  • ThinkPad X60
  • Debian GNU/Linux wheezy

はじめに Link to heading

acpid では ACPI イベントを捕捉して、それに応じたアクションを実行できます。

シンプルな仕組みで、設定も簡単。動作は自由に定義できるので便利です。

acpid については以下のサイトに詳しいです。

イベントの確認 Link to heading

イベントは 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

アクションの定義 Link to heading

イベントに対するアクションは /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 にはイベントが発生した際に実行するコマンドを指定。

設定してみる Link to heading

ノート 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 のモニタを閉じるとちゃんとサスペンドされました。

画面がロックされない Link to heading

サスペンドはできたものの、なぜか画面のロックがされず、なんだか気持ちが悪い状態。

アクションとして指定した /etc/acpi/sleep.sh を見てみると、xscreensaver の起動を確認し、起動されている場合には xscreensaver-command -lock を実行するようになっていました。サスペンド自体は pm-utilspm-suspend で実現されています。

なので xscreensaver を立ち上げておけばオッケー。