備忘録: 理由の説明とかはあまり書いていません。
バッテリー残量が不足するとクラッシュするので困っていた。hibernateができないというのは、具体的には以下のことができない。困った。
-
sudo pm-hibernate
を実行するとクラッシュする -
システム設定 > 電源 > 電力がひどく低下した時の動作
でハイバーネート
を選択できない - 復帰後の画面がロックされてない
ハイバーネートに失敗する
まずpm-hibernate
コマンドできちんとハイバーネートが機能するか確認する。自分の場合クラッシュして、起動時に"System problem detected"のメッセージが表示された。
ハードウェアやスワップ、その他諸々の都合で、(そのままでは)機能しないことがある模様。RAMの内容を退避するswapが足りないというのがありがちらしいが、free
でRAMとswapの容量を確認したところ、問題ない。
自分の場合、問題は/sys/power/image_size
にあった。これは退避イメージサイズの上限を規定するのだが、恐らくこれが小さかったようだ。値を0にすると最適~みたいなよくある仕組みなので、どこかのタイミング(/etc/rc.local
など)でecho 0 > /sys/power/image_size
を実行する。上手くいった。
ハイバーネートを有効にしたい
問題なければ、機能としてハイバーネートを有効にすると、いろいろな所でハイバーネートができるようになる。
有効にするには/var/lib/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
を作成し、以下の内容を書き込む。/var/lib
でだめな場合は/etc
にという情報もある。詳しくは理解していないのでググろう(沢山出てくる)。
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes
ハイバーネート復帰後にロックスクリーンを表示したい
こちらのmzzzzb氏の回答を参考にして、/etc/acpi/hibernate.sh
を作成し、以下の内容を書き込んだ。
if [ x$LOCK_SCREEN = xtrue ]; then
if pidof xscreensaver > /dev/null; then
for x in /tmp/.X11-unix/*; do
displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
. /usr/share/acpi-support/screenblank
fi
done
fi
fi