I tried different options to enable hibernation in Ubuntu 20.04 but nothing is working. How can I enable the hibernate option in Ubuntu 20.04?
8 Answers
I assume you have a swap partition ready to use (if you have a swap file you cannot hibernate using this method). Follow these steps:
Install
pm-utilsandhibernate:sudo apt install pm-utils hibernateThen:
cat /sys/power/stateYou should see:
freeze mem diskThen run one of the following lines:
grep swap /etc/fstab blkid | grep swapAnd copy the
UUIDvalue. You will need it later.Then run (use your favorite editor if not
nano):sudo nano /etc/default/grubChange the line that says:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"so that it instead says:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=<YOUR_COPIED_UUID>"Be careful not to miss the
UUID=part.Then, after saving the file and quitting the text editor, run:
sudo update-grubTo test it, run:
sudo systemctl hibernate
This extension seems to enable showing the "Hibernate" menu entry, but it changes the overall look of this sub-menu: https://extensions.gnome.org/extension/3070/simpler-off-menu/ .
Tested on Ubuntu 20.04 using kernel version 5.4.0-31 on my Lenovo ThinkPad X1 Carbon.
If you want to use a /swapfile to hibernate instead of the swap partition:
The top answer works well, but you don't have to use a partition, you can also use a default /swapfile.
First of all, you should increase the size of the /swapfile at least to the size of your RAM.
Install dependencies:
sudo apt install pm-utils hibernate uswsuspFind your UUID and swap offset:
findmnt -no UUID -T /swapfile && sudo swap-offset /swapfileYou will see something like this:
371b1a95-d91b-49f8-aa4a-da51cbf780b2 resume offset = 23888916Edit
/etc/default/gruband replace the string:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"with your UUID and offset:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=371b1a95-d91b-49f8-aa4a-da51cbf780b2 resume_offset=23888916"Update GRUB:
sudo update-grubTest your hibernation:
sudo systemctl hibernate
Probably you should not change the size of your swap after enabling the hibernation (at least without changing the swap-offset in GRUB).
See wiki for more details.
EXTRA BONUS: If you want to hibernate when a laptop lid is closed (see this):
Disable any options in the settings that touch the laptop lid, set them to "do nothing".
Run:
sudo mkdir -p /etc/acpi/events/ && sudo nano /etc/acpi/events/laptop-lidand paste:
event=button/lid.* action=/etc/acpi/laptop-lid.shRun:
sudo touch /etc/acpi/laptop-lid.sh && sudo chmod +x /etc/acpi/laptop-lid.sh && sudo nano /etc/acpi/laptop-lid.shand paste:
#!/bin/bashLOG_FILE='/var/log/laptop-lid.log' touch $LOG_FILE && chmod 0666 $LOG_FILE
grep -q closed /proc/acpi/button/lid/LID/state if [ $? = 0 ] then # close action echo "$(date '+%Y.%m.%d %H:%M:%S.%3N'): closed" >> $LOG_FILE systemctl hibernate else # open action echo "$(date '+%Y.%m.%d %H:%M:%S.%3N'): opened" >> $LOG_FILE fi
Run:
sudo /etc/init.d/acpid restart
- 860
- 8
- 7
And if you want to turn on hibernation in your Ubuntu 20.04*, follow these steps:
First ensure you allocate swap memory in your machine to check:
swapon --showThen check whether the swap memory you allocated is more than or at least equal to the Physical memory(RAM).
Use the following command to find the swap partition:
grep swap /etc/fstabCopy the UUID of the output for example(
UUID=XXXXX-XXX-XXXX-XXXX-YYYYYYYYYY).Add a boot parameter by the following command:
sudoedit /etc/default/grubAt the line starting with
GRUB_CMDLINE_LINUX_DEFAULT, add:resume=UUID=XXXXX-XXX-XXXX-XXXX-YYYYYYYYYYNote: In all other threads they used to ask to add swap partition but here we are adding the UUID value.
The final line will be like:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=XXXXX-XXX-XXXX-XXXX-YYYYYYYYYY"Update the file:
sudo update-grubsudo systemctl hibernateand hibernation will now work in your Ubuntu 20.04.
- 16,703
- 363
eldwist's solution worked for me, except...
...not initially, 'cos I got the following error:
$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb not supported
If you get this error, you probably need to disable secure boot under the security menu in the UEFI/BIOS (see similar problem with 16.04). Then it worked for me (tested on Ubuntu 20.04; 5.4.0-33 kernel, configured for Dual-boot with Win10).
- 278
- 403
- 3
- 8
To enable Hibernation in 20.04:
All of the examples on this page seem to be missing resume-offset it is necessary when using a swapfile rather than a swap partition.
Increase swapfile size to match RAM size up to 8GB.
Check the swap that is in use:
sudo swapon -sIf swap partition(s) are found:
sudo swapoff -a sudo nano -Bw /etc/fstabAdd
#before theUUIDof the swap partition(s):# UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX none swap sw 0 0Add a line for the
swapfile, if one does not exist:/swapfile none swap sw 0 0Create the
swapfile:sudo fallocate -l XG /swapfile*where
Xisswapfile's size in GB:sudo mkswap /swapfile sudo chmod 0600 /swapfile sudo swapon /swapfileReboot:
sudo reboot
Add resume location and offset to grub.cfg:
Edit
/etc/default/grub:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX resume_offset=XXXXX"Use
UUIDfrom root.Use offset from:
sudo filefrag -v /swapfile |grep " 0:"| awk '{print $4}'Update GRUB:
sudo update-grubTest hibernation:
sudo systemctl hibernate
A hibernate button can be added using GNOME extensions.
Note that there is a slight possibility of getting holes in a swapfile when creating it with fallocate. /var/log/syslog can be searched for the phrase swapon: swapfile has holes to ensure there will be no data loss.
A swap file can alternatively be created using dd:
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
An error when using dd may overwrite your HDD.
- 20,530
- 12
- 78
- 125
I just added a keyboard shortcut. I disabled the Super+H, since I don't need it (the default action is to hide the window) and created a new shortcut with the command:
systemctl hibernate
- 16,703
- 69
SuRa's answer at the top works great, however, if your laptop came with a swap file instead of a swap partition then you'll have to follow a few steps first to make it all work. At a high level:
- Boot from live CD/USB drive, shrink you main partition by the amount of memory you have plus 1-2 GBs for margin. E.g. I have 16 GBs so I shrunk my partition by 18 GB for good measure. That will leave empty/unpartitioned space on your disk.
- Create a new partition of type swap in the empty/unpartitioned space on your disk.
- Reboot back into your installed OS (ie without the live CD/USB)
- Go to "partitions" or "gparted" to get the UUID of your new swap partition.
- Add your new swap partition to
/etc/fstaband delete (or comment out) the old swap file - Use the
swapoffandswaponcommands to switch from the swap file to the swap partition - Don't forget to the delete the swap file to reclaim that space
- Now you can follow SuRa's instructions.
Using a partition device instead of an UUID
I had to deviate a bit from the "how to" above, probably since I encrypted my hard drive. My /etc/fstab file does not contain an UUID for the swap partition but a partition device.
If your /etc/fstab contains a <partition_device> rather than a UUID for the swap partition, edit the line starting with GRUB_CMDLINE_LINUX_DEFAULT in the file /etc/default/grub to contain resume=<partition_device>
Example:
if /etc/fstab contains this
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0
/etc/default/grub should contain the line
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mapper/ubuntu--vg-swap_1"
Then execute sudo update-grub and test by executing sudo systemctl hibernate