Suspend and hibernate

This article Article description::describes how to suspend or hibernate a Gentoo system.

Kernel
Make sure support for suspend and hibernation has been activated ( CONFIG_SUSPEND ) and ( CONFIG_HIBERNATION ):

Software
One of the following packages can be used to control the in-kernel default suspend/hibernate implementation, namely, swsusp.


 * provides the following commands that can be launched as root or from a user account. Many desktop environments already require it if systemd is not used instead. Make sure it is configured properly.
 * provides:
 * provides:
 * provides:
 * provides:

Available suspend modes
To see available suspend modes use

for swsusp, default implementation.

Those two file will list at least ACPI S2/4 power down methods on modern hardware. New hardware would also support S5 method which is a rough S4 method. ACPI S2 correspond to suspend to ram (ram method in swsusp terms and 3 in ToI terms); S4 hibernation to disk (disk in swsusp terms and 4 in ToI terms; S5 hibernation to disk (5 in ToI terms).

Swsusp users can choose between platfom, meaning ACPI, or shutdown methods which can be echo-ed to sysfs file.

Suspend to RAM
Preferred commands to suspend are:

or, if using elogind

For suspend (to ram) for hibernate-script users:

or

to hibernate (to disk.)

A more raw method is to

Suspend to disk
For suspend to disk to operate a swap partition or swap file must exist.

The swap file should be active beforehand and should be echoed on the appropriate file before any attempt to suspend/hibernate.

A more raw method is to:

Do not forget to probe:

before issuing an actual command and append the result to kernel command line argument prepended with `resume='. This will suffice to resume from a block device or swap file for ToI. However, it's more complicated for a swapfile with swsusp.

Suspend to disk with sys-auth/elogind
First, make sure a swap partition has been set, grub.cfg rebuilt and the initramfs (if any) updated as shown above.

Reboot the system:

Next, try

Suspend to disk with swapfile
You can use suspend to disk with a swapfile. When you have a functional swapfile you need to configure kernel parameters (via GRUB, etc.).

First find UUID of device where your swapfile resides. For example:.

Find offset of swapfile on given partition using  utility from :

After that edit GRUB config and add required parameters to boot string:

Rebuild GRUB config:

Reboot the system and check used kernel parameters:

It should now be possible to hibernate the system.

Btrfs requires you to compute the offset of the swap file a different way, see Arch Linux wiki, Hibernation into a swap file on Btrfs.

Troubleshooting
Classic kernel buffer comes handy:

Can not resume after suspend
In case resuming from suspend does not work, disable the security chip setting in BIOS/UEFI and try again. Outdated microcode can result in dysfunction of resumption from suspension, thus make sure it is updated (eg. Intel microcode with i915 drivers).

For i915 drivers if the microcode update is ineffective, try disabling  at the cost of Spectre v2 vulnerability.

Wifi stays hard blocked
Although possibly unsafe, tricking the bios into believing it being "Windows" might solve it.

This can be done by adding  or  (kernel source) to the boot command line options.

For, it can be appended to GRUB_CMDLINE_LINUX in.

Migration from pm-utils to elogind
Copy any suspend/resume and hibernate/thaw hook scripts from the directory to, and modify them to cater for the new $1 ('pre' or 'post') and $2 ('suspend', 'hibernate', or 'hybrid-sleep'). See also: elogind

External resources

 * Suspend and hibernate on wiki.archlinux.org
 * TuxOnIce
 * has been last-rited, see.
 * Linux kernel documentation - swsusp.txt, or the usual location of
 * Gentoo Forums: Suspend and Hibernate with UEFI