2 # zzz - really simple suspend script
4 USAGE="Usage: ${0##*/} [-nSzZR]
5 -n dry run (sleep for 5s instead of suspend/hibernate)
6 -S Low-power idle (ACPI S0)
7 -z suspend to RAM (ACPI S3) [DEFAULT for zzz(8)]
8 -Z hibernate to disk & power off (ACPI S4) [DEFAULT for ZZZ(8)]
9 -R hibernate to disk & reboot
10 -H hibernate to disk & suspend (aka suspend-hybrid)"
12 fail() { echo ${0##*/}: 1>&2 "$*"; exit 1; }
14 export ZZZ_MODE=suspend
15 export ZZZ_HIBERNATE_MODE=platform
18 *ZZZ) ZZZ_MODE=hibernate;;
21 while getopts hnSzHRZ opt; do
26 Z) ZZZ_MODE=hibernate;;
27 R) ZZZ_MODE=hibernate; ZZZ_HIBERNATE_MODE=reboot;;
28 H) ZZZ_MODE=hibernate; ZZZ_HIBERNATE_MODE=suspend;;
35 suspend) grep -q mem /sys/power/state || fail "suspend not supported";;
36 hibernate) grep -q disk /sys/power/state || fail "hibernate not supported";;
39 test -w /sys/power/state || fail "sleep permission denied"
42 flock -n 9 || fail "another instance of zzz is running"
46 for hook in /etc/zzz.d/suspend/*; do
47 [ -x "$hook" ] && "$hook"
51 standby) printf freeze >/sys/power/state || fail "standby failed";;
52 suspend) printf mem >/sys/power/state || fail "suspend failed";;
54 echo $ZZZ_HIBERNATE_MODE >/sys/power/disk
55 printf disk >/sys/power/state || fail "hibernate failed";;
59 for hook in /etc/zzz.d/resume/*; do
60 [ -x "$hook" ] && "$hook"