]> git.armaanb.net Git - asd-repo.git/blob - extra/zzz/files/zzz
Adapt for asd linux
[asd-repo.git] / extra / zzz / files / zzz
1 #!/bin/sh
2 # zzz - really simple suspend script
3
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)"
11
12 fail() { echo ${0##*/}: 1>&2 "$*"; exit 1; }
13
14 export ZZZ_MODE=suspend
15 export ZZZ_HIBERNATE_MODE=platform
16
17 case "$0" in
18   *ZZZ) ZZZ_MODE=hibernate;;
19 esac
20
21 while getopts hnSzHRZ opt; do
22   case "$opt" in
23     n) ZZZ_MODE=noop;;
24     S) ZZZ_MODE=standby;;
25     z) ZZZ_MODE=suspend;;
26     Z) ZZZ_MODE=hibernate;;
27     R) ZZZ_MODE=hibernate; ZZZ_HIBERNATE_MODE=reboot;;
28     H) ZZZ_MODE=hibernate; ZZZ_HIBERNATE_MODE=suspend;;
29     [h?]) fail "$USAGE";;
30   esac
31 done
32 shift $((OPTIND-1))
33
34 case "$ZZZ_MODE" in
35   suspend) grep -q mem /sys/power/state || fail "suspend not supported";;
36   hibernate) grep -q disk /sys/power/state || fail "hibernate not supported";;
37 esac
38
39 test -w /sys/power/state || fail "sleep permission denied"
40
41 (
42 flock -n 9 || fail "another instance of zzz is running"
43
44 printf "Zzzz... "
45
46 for hook in /etc/zzz.d/suspend/*; do
47   [ -x "$hook" ] && "$hook"
48 done
49
50 case "$ZZZ_MODE" in
51   standby) printf freeze >/sys/power/state || fail "standby failed";;
52   suspend) printf mem >/sys/power/state || fail "suspend failed";;
53   hibernate)
54         echo $ZZZ_HIBERNATE_MODE >/sys/power/disk
55         printf disk >/sys/power/state || fail "hibernate failed";;
56   noop) sleep 5;;
57 esac
58
59 for hook in /etc/zzz.d/resume/*; do
60   [ -x "$hook" ] && "$hook"
61 done
62
63 echo "yawn."
64 ) 9</sys/power