How to customize the zzz script for Void Linux

2020-01-10

(last time edited: 2021-02-12)

tags: linux, void

zzz is a simple script to suspend or hibernate your system. It supports hooks before and after suspending.

First take a look at the /etc/zzz.d directory.

$ ls /etc/zzz.d

We will find 2 directories: resume and suspend.

Scripts inside the suspend directory will be executed when we run zzz. And any script file we save in the resume directory will be executed by root when the system wakes up.

In my personal system I've created 2 scripts.

This is an example of /etc/zzz.d/resume/slock.sh It executes slock when the system is woke up.

#!/bin/sh
slock

This is an example of /etc/zzz.d/suspend/wakeup.sh

#!/bin/sh

for DEVICE in  $(cut -f 1 /proc/acpi/wakeup); do
    if [ "$(grep "$DEVICE" /proc/acpi/wakeup | grep -o enabled)" = enabled ]; then
        echo "$DEVICE" > /proc/acpi/wakeup
    fi
done

echo "SLPB" > /proc/acpi/wakeup
echo "EXPB" > /proc/acpi/wakeup

This script disables every device that could wake up the system and only enables the Sleep and Power Button to wake it up.

If you wanna go deeper and want to understand what we are trying to do with the wakeup.sh script you gotta understand first how /proc/acpi/wakeup works.

Try the next command:

$ cat /proc/acpi/wakeup

It shoud look something like this.

Device   S-state  Status      Sysfs node
LID       S4      *disabled   platform:PNP0C0D:00
SLPB      S3      *enabled    platform:PNP0C0E:00
IGBE      S4      *enabled
PXSX      S4      *disabled
PXSX      S4      *disabled
PXSX      S4      *disabled
PXSX      S4      *disabled
PXSX      S4      *disabled
PXSX      S4      *disabled
EXPB      S4      *enabled    pci:0000:00:1d.2
PXSX      S4      *disabled   pci:0000:03:00.0
PXSX      S4      *disabled
XHCI      S3      *enabled    pci:0000:00:14.0

Enabled devices CAN wake up the system when the it's sleeping. Disabled devices CANNOT.

Devices have their own 4 letter identification.

SLPB is for Sleep Button, EXPB is probably for External Power Button, XHCI is for xHCI USB Controllers (USB ports basically).

If you want to check which identification represent each device you can do it using lspci and grepping half of their sysfs node.

$ lspci | grep 00:14.0

You should get something like this:

00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)

Scripts must have execution permission otherwise root could not be able to run them.

# chmod +x /etc/zzz.d/suspend/wakeup.sh /etc/zzz.d/resume/slock.sh

Happy hacking!