CentOS 5.2 (Kernel 2.6)のシャットダウン ダイアログに、「サスペンド(スリープ)」のボタンが無い。 そのかわり、メインメニューに「サスペンド」メニューがあるが、復帰後に画面が表示されない不具合がある。
シャットダウン ダイアログ
メインメニューのサスペンド
電源管理 pm-utils を用いた方法
メインメニューの「サスペンド」メニューも、この方法に入る。
コマンドラインでサスペンド(スリープ)させて、うまく復帰できるオプションを見つけ出す。今回利用しているマシンでは、--quirk-vbemode-restore オプションを付けると、画面が復帰することがわかった。 (オプションを付けなくても、CTRL + ALT + F7 を押すと画面復帰するので、単にビデオ出力ICの設定が戻っていないだけだと判断が付く。
[root@localhost ~]# pm-suspend --quirk-vbemode-restore
オプションの一覧は、pm-suspendコマンド (これはシンボリックリンクで、実は pm-action というスクリプトファイルが呼ばれている)を読めばわかる。
--quirk-dpms-on)
export DISPLAY_QUIRK_DPMS_ON="true"
export QUIRKOPTS="true" ;;
--quirk-dpms-suspend)
export DISPLAY_QUIRK_DPMS_SUSPEND="true"
export QUIRKOPTS="true" ;;
--quirk-radeon-off)
export DISPLAY_QUIRK_RADEON_OFF="true"
export QUIRKOPTS="true" ;;
--quirk-s3-bios)
export DISPLAY_QUIRK_S3_BIOS="true"
export QUIRKOPTS="true" ;;
--quirk-s3-mode)
export DISPLAY_QUIRK_S3_MODE="true"
export QUIRKOPTS="true" ;;
--quirk-vbe-post)
export DISPLAY_QUIRK_VBE_POST="true"
export QUIRKOPTS="true" ;;
--quirk-vbemode-restore)
export DISPLAY_QUIRK_VBEMODE_RESTORE="true"
export QUIRKOPTS="true" ;;
--quirk-vbestate-restore)
export DISPLAY_QUIRK_VBESTATE_RESTORE="true"
export QUIRKOPTS="true" ;;
--quirk-vga-mode3)
export DISPLAY_QUIRK_VGA_MODE_3="true"
export QUIRKOPTS="true" ;;
--quirk-none)
export QUIRKOPTS="true" ;;
--quirk-old)
export FROM_HAL="true"
export AUTO_QUIRK="true"
export QUIRKOPTS="true" ;;
--from-hal)
export FROM_HAL="true" ;;
うまくサスペンドするようになれば、自動的に必要なオプションが付加されるように、設定ファイルにオプションを書き加える。 ここで、 suspend.cfg というファイル名としているが、ディレクトリ内の全てのファイルを実行してくれるので、ファイル名は何でもよい。
#!/bin/sh
# for X video resume
export DISPLAY_QUIRK_VBEMODE_RESTORE="true"
export QUIRKOPTS="true"
設定スクリプトに実行許可属性をあたえる
[root@localhost ~]# chmod +x /etc/pm/config.d/suspend.cfg
ここまでの設定で、画面は戻るようになったが、CPUクロックの自動調整がうまくいかなくなっていたので、復帰後にそのあたりを修正するスクリプトを作成する。 (リジューム時に、cpuspeedサービスを再起動する)
#!/bin/bash
. /usr/lib/pm-utils/functions
case "$1" in
hibernate|suspend)
;;
thaw|resume)
/etc/rc.d/init.d/cpuspeed restart
;;
*)
;;
esac
exit $?
従来の方法
まず、システムがサスペンドに対応しているか確認
[root@localhost ~]# cat /sys/power/state
mem disk
mem : Suspend-to-RAM (ACPIのS3)
disk : Suspend-to-disk (ACPIのS4)
「mem」という記述があれば、スリープが可能なため、次のコマンドで無理矢理スリープさせることができる
[root@localhost ~]# echo -n mem > /sys/power/state
このコマンドでのスリープから復帰後に、ネットワークのDNS解決ができなくなる不具合があるので、DNS解決しなくても表示できるwebページなどを表示するなどしたら、ネットワークが復帰する。(ドライバのバグか? サスペンド前に ifdown eth0 をして、復帰後に ifup eth0 をしても解決にはならない)
さらに、メインメニューの「サスペンド」ボタンを押せないように、削除する。 システムツール − 設定エディタを起動して、次のように設定。(設定エディタはあらかじめ yum install gconf-editor でインストールしておく)
スリープ復帰後にDNS参照できない問題を、とりあえず回避するための方法
#!/bin/sh
sudo /home/core_sleep.sh
#!/bin/sh
# ネットワークデバイスの停止
/etc/rc.d/init.d/iptables stop
/etc/rc.d/init.d/network stop
# スリープに入る
echo -n mem > /sys/power/state
# ネットワークデバイスの再開
/etc/rc.d/init.d/network start
/etc/rc.d/init.d/iptables start
# DNS参照復旧のため、ダミーのダウンロードを行います
cd /tmp
wget http://203.178.137.175/pub/Linux/centos/4.6/extras/i386/RPMS/libxfcegui4-4.2.3-3.c4.i386.rpm
wget http://203.178.137.175/pub/Linux/centos/4.6/extras/i386/RPMS/libxfcegui4-4.2.3-3.c4.i386.rpm
wget http://203.178.137.175/pub/Linux/centos/4.6/extras/i386/RPMS/libxfcegui4-4.2.3-3.c4.i386.rpm
さらに、sudoを可能にするため許可指定を行う
# スリープ メニューを、一般ユーザ(wheelグループ所属)にも開放する
%wheel ALL=/home/core_sleep.sh
# スリープ メニューを、一般ユーザ(特定ユーザ)にも開放する
UserName ALL=/home/core_sleep.sh
もっと他のよい方法あれば教えてください…