forked from void-linux/void-runit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
zzz
executable file
·64 lines (51 loc) · 1.61 KB
/
zzz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/sh
# zzz - really simple suspend script
USAGE="Usage: ${0##*/} [-nSzZR]
-n dry run (sleep for 5s instead of suspend/hibernate)
-S Low-power idle (ACPI S1)
-z suspend to RAM (ACPI S3) [DEFAULT for zzz(8)]
-Z hibernate to disk & power off (ACPI S4) [DEFAULT for ZZZ(8)]
-R hibernate to disk & reboot
-H hibernate to disk & suspend (aka suspend-hybrid)"
fail() { echo ${0##*/}: 1>&2 "$*"; exit 1; }
export ZZZ_MODE=suspend
export ZZZ_HIBERNATE_MODE=platform
case "$0" in
*ZZZ) ZZZ_MODE=hibernate;;
esac
while getopts hnSzHRZ opt; do
case "$opt" in
n) ZZZ_MODE=noop;;
S) ZZZ_MODE=standby;;
z) ZZZ_MODE=suspend;;
Z) ZZZ_MODE=hibernate;;
R) ZZZ_MODE=hibernate; ZZZ_HIBERNATE_MODE=reboot;;
H) ZZZ_MODE=hibernate; ZZZ_HIBERNATE_MODE=suspend;;
[h?]) fail "$USAGE";;
esac
done
shift $((OPTIND-1))
case "$ZZZ_MODE" in
suspend) grep -q mem /sys/power/state || fail "suspend not supported";;
hibernate) grep -q disk /sys/power/state || fail "hibernate not supported";;
esac
test -w /sys/power/state || fail "sleep permission denied"
(
flock -n 9 || fail "another instance of zzz is running"
printf "Zzzz... "
for hook in /etc/zzz.d/suspend/*; do
[ -x "$hook" ] && "$hook"
done
case "$ZZZ_MODE" in
standby) printf freeze >/sys/power/state || fail "standby failed";;
suspend) printf mem >/sys/power/state || fail "suspend failed";;
hibernate)
echo $ZZZ_HIBERNATE_MODE >/sys/power/disk
printf disk >/sys/power/state || fail "hibernate failed";;
noop) sleep 5;;
esac
for hook in /etc/zzz.d/resume/*; do
[ -x "$hook" ] && "$hook"
done
echo "yawn."
) 9</sys/power