サスペンドとハイバネーション
サスペンドやハイバネーション、Windowsで言うところのスタンバイ、休止状態は、現在ノートパソコンに限らず便利なものとして使われている。これはLinuxにおいても例外ではなく2.6カーネルでは当然ながらサポートされている。@IT:ACPIで電源管理を行うにはという記事によれば簡単な一行のコマンドを実行するだけでよい。但し、この記事にはずっと放置されている誤りがあるようで、 "/etc/power/state" に書き込んでも無駄で、"/sys/power/state"に書き込まねばならない。しかし、当然ながら、DELL Latitude D400上のFedora 7(2.6.22.9-91.fc7) では何の設定もなしに'Fn + Esc'のホットキーでサスペンドすることは出来ない。そこでいくらかGoogleで調べて、Open Tech Press | LinuxノートPCのサスペンドとハイバネーションという記事を参考に設定を施してみることにした。
まず、サスペンド復帰後に画面が真っ暗になったままになるのを防ぐため、xorg.confのDeviceセクションに'Option "VBERestore" "true"'と追記する。
Section "Device" Identifier "Videocard0" Driver "i810" VendorName "Intel Corporation" BoardName "Intel Corporation 82852/855GM Integrated Graphics Device" BusID "PCI:0:2:0" Screen 0 Option "VBERestore" "true" EndSection
次に、キーの押下イベント発生により自動的にサスペンドさせるため、acpidをインストールする。
# yum -y install acpid
ちなみに、この記事執筆時点での最新版は1.0.4-7.fc7のようだ。その後、Linux on Let's note CF-W4:Fnキー+F7でサスペンドを参考に'Fn + Esc'でどのようなイベントが起きるのかを見てみる。
$ acpi_listen button/sleep SBTN 00000080 00000001
次にノートパソコンを閉じる時に起きるイベントを確認する。
$ acpi_listen button/lid LID 00000080 00000001 video VID 00000080 00000000 button/lid LID 00000080 00000002
そして、以下のファイルを作成する。
ファイル名: /etc/acpi/events/hibernate.conf
# ACPID config to hibernate the machine. event=button/sleep.* action=/etc/acpi/actions/hibernate.sh
ファイル名: /etc/acpi/events/suspend.conf
# ACPID config to suspend the machine. event=button/lid.* action=/etc/acpi/actions/suspend.sh
ファイル名: /etc/acpi/actions/hibernate.sh
#!/bin/sh # Write all unwritten data on the RAM to the disk sync sync sync # Suspend to RAM echo -n disk > /sys/power/state
ファイル名: /etc/acpi/actions/suspend.sh
#!/bin/sh # Write all unwritten data on the RAM to the disk sync sync sync # Suspend to RAM echo -n mem > /sys/power/state # Switch to the first virtual terminal and then to the seventh one chvt 1 chvt 7
以上のファイルでは、'Fn + Esc'押下時にハイバーネイトし、ノートパソコンを閉じたときにサスペンドするようにしている。また、Open Tech Pressの記事とは異なり、ビデオ関連の設定は問題が無かったので省き、なぜかサスペンドからの復帰後、仮想ターミナル1に切り替え、7に戻ると画面が正常に戻ることを利用して、画面が正常に戻らない問題に対処している。
その後、/etc/acpi/actions以下のファイルに実行権限を付与し、acpidを再起動する。
# chmod u+x /etc/acpi/actions/*.sh # /etc/init.d/acpid restart
あとは、実際にイベントを発生させ、設定が正しいかどうか検証するだけだ。
これで簡単な操作でハイバネーション、サスペンドすることが出来る。今まではターミナルから直接コマンドを叩いていたので、今後は便利に使えそうだ。