This tutorial shows how to completely disable suspend and/or hibernate function, so your Linux computer will never go to sleep.
Linux can automatically go to sleep when system is idle or laptop lid is closed, though user can configure to disable that behavior via either graphical options or logind.conf configuration file.
But, if you never want to sleep your computer, e.g., for server, then you can completely disable this function. So even the suspend option in power-off menu or the corresponding Linux command won’t work!
This tutorial shows how to automatically run custom command, script, or other actions after resuming your Linux PC/laptop from suspend or hibernate.
As you may know, there are quite a few ways to run something automatically at Ubuntu startup. You can use “Startup Applications” utility to run apps or custom commands at login, use crontab to schedule startup jobs, udev rules to auto-configure devices on detection, and systemd-tmpfiles service to auto create, delete, and write configuration files.
But what if your computer does not function properly, or some personal settings do not persist after waking up from sleep?
Without waiting for upstream fixes, you can workaround by creating custom systemd services, to auto-restart the function, or re-configure the settings, and trigger it automatically when waking up from sleep.
This tutorial shows how to enable/disable Keyboard, Mouse, Lid Open, and/or other devices events from waking up your Ubuntu PC or laptop from sleep.
By default, open laptop lid, press any key on keyboard, or press sleep button can wake up your computer from suspend or hibernation state. If you want, you can configure Ubuntu to ignore certain wakeup triggers that you don’t want.
Computer hibernate does not work in your Ubuntu? Here’s step by step complete guide shows how to enable this feature in Ubuntu 24.04 and Ubuntu 22.04 LTS.
Similar to suspend, hibernate can be used to save your system work. It moves the content from RAM memory into swap area in hard disk, then shutdown your machine completely. Next time you boot the computer, it restores the system status exactly as it was.
NOTE:This tutorial now is tested and works on my Ubuntu 22.04 and Ubuntu 24.04 Laptop with default GNOME. It may NOT work if you’ve used Grub-Customizer to edit the boot-menu!!
For other desktop environments, you need to replace gnome-text-editor or gedit in following commands with your favorite text editor, or use the universal nano command line editor that works in most desktops (use Ctrl+S to save, Ctrl+X to exit).
Step 1: Check the ID of Swap Area & Create if NOT exist.
System hibernate feature saves data into swap area on disk. You need to first find out the ID or UUID of the swap device, so to know where to resume from hibernation.
a. Check Swap Area:
First, press Ctrl+Alt+T on keyboard to open terminal. When it opens, run command:
swapon --show
The command will output all enabled swap devices in your system, along with its name, type, size, priority, etc., information.
If the TYPE is a partition, then you need to write down its name, which is usually ‘/dev/sdaX‘ or ‘/dev/nvme0n1px‘. Next go directly to step 2
If it’s a file, then you need to go next step (b.) to find out the root partition (Ubuntu file-system) name, as well as the physical offset to locate that swap file.
NOTE: A Linux system may have multiple swap devices, go check the one with highest priority! If the swap name is “/dev/zram0”, then it does NOT support hibernation!!
b. Find root partition name and physical offset
So, if your system uses a file for swap area, then you need to find out the root partition name + physical offset to locate it.
To get the system partition name, run the command below, and check the one mounted on “/”:
df -h
In the screenshot below, the root is /dev/nvme0n1p6 in my case.
To get the physical offset of the file, use command:
sudo filefrag -v /swapfile
Here, replace /swapfile with yours swap file name (see swapon --show output). Then, copy the start number under physical_offset. It’s 3606528 in my case.
c. Create Swap File, if you don’t have Swap area:
To create a file for swap if you don’t have it, run following commands one by one:
a.) Pre-allocate a disk place for a file via command:
Replace 8192 MB (8G) to your desired size. As large as RAM is recommended for swap.
b.) Change the file permission to only read & write for root:
sudo chmod 600 /swapfile
c.) Set the file as swap area:
sudo mkswap /swapfile
d.) Finally enable it by running command:
sudo swapon /swapfile
If you already have a swap space, and want to use this one with higher priority, run sudo swapon -p 100 /swapfile instead. Replace 100 with any number bigger than the existing swap.
And, if you already ‘swapon’ the swap, then you need to disable it via sudo swapoff /swapfile first, then swap-on with priority number with the command above.
e.) And write it into ‘/etc/fstab’, so Ubuntu will mount it automatically on startup.
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
When done, you may run step b. to find out the root partition name plus physical offset for this swap file.
Step 2: Enable Hibernate by adding Kernel Parameter
After step 1, you can now add kernel parameter in Grub boot-loader config file, to tell it to try resuming from the swap device on every boot.
To do so, press Ctrl+Alt+T to open terminal, and run command to edit the config file:
sudo gnome-text-editor /etc/default/grub
For Ubuntu 22.04 and earlier, replace gnome-text-editor with gedit. For non-GNOME desktop, use other text editor or nano that works for all.
For Swap partition, add resume=/dev/xxx (do replace “/dev/xxx” to the Swap partition name you got in step 1) as value of “GRUB_CMDLINE_LINUX_DEFAULT”.
For Swap file, add resume=/dev/xxx resume_offset=xxx (also replace xxx with the root partition name and physical offset number according to step 1) instead for value of “GRUB_CMDLINE_LINUX_DEFAULT”.
Finally, save the file and apply changes by updating the Grub configuration via command:
sudo update-grub
Step 3: Check if hibernate works:
NOTE: The hibernation won’t work with secure boot!! You have to disable it in BIOS/EFI first. With secure boot enabled, you’ll get error:
“Failed to hibernate system via logind: Sleep verb “hibernate” not supported”.
To verify if the hibernation function works now, open terminal (Ctrl+Alt+T) and run command:
sudo systemctl hibernate
Save you work before running the command!! Then type user password when it asks. The command will turn off your computer/laptop. Next you can boot the machine again, and see if it restores your system status after login.
If hibernation works, go to Step 4 to enable ‘Hibernate’ option in shutdown menu. If NOT, then your computer may NOT support this feature or something has gone wrong.
Troubleshooting:
For Ubuntu 24.04 with swap file, there was a bug, that may cause “Call to Hibernate failed: Invalid argument” error when running the hibernate command. In the case, the hibernation may only work on first action.
The bug has been fixed in Ubuntu 24.04.1. And, here is just the note about the workaround:
First, open terminal and run command lsblk to get the MAJ:MIN value of the root partition. If you don’t know root name, use df -h to find the one mounted on “/”.
Next, run command to create a tmpfiles.d config file:
sudo nano /etc/tmpfiles.d/hibernation_resume.conf
When file opens in terminal window, add the lines below:
# Path Mode UID GID Age Argument
w /sys/power/resume - - - - 259:6
Here, replace 259:6 according to MAJ:MIN value you got in last command. Then, press Ctrl+S to save file and Ctrl+X to exit.
This config file tells to write MAJ:MIN value to the /sys/power/resume automatically on system boot, so to workaround the bug until it was fixed.
Regenerate initramfs if hibernate to Swap file
Hibernation works in my case without this step!! If it’s NOT for you, try regenerating initramfs via a new rule.
Firstly, open terminal (Ctrl+Alt+T) and run command to create a config file:
sudo gedit /etc/initramfs-tools/conf.d/resume
Then paste the line “RESUME=/dev/xxx resume_offset=xxx” (replace xxx with correct partition name and offset number) and save it.
After saving the file, regenerate initramfs via command:
sudo update-initramfs -c -k all
Finally reboot and test hibernate function again.
Step 4: Enable Hibernate option in Power-Off Menu:
After enabled the function, you can now add a menu option into the system tray shutdown menu.
Option 1: The legacy method for For Ubuntu 22.04 and earlier, though it still works in Ubuntu 24.04.
1.) First, open terminal (Ctrl+Alt+T) and run command to create the config directory, that’s not exist by default in Ubuntu 24.04:
When the file opens, paste following lines and save it.
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
Option 2: Thanks to this thread, since Ubuntu 24.04, the new method to add hibernate menu option is to create config file under /etc/polkit-1/rules.d/ directory.
For those first time installing Gnome extension, you need to run command to install “chrome-gnome-shell” package first:
sudo apt install chrome-gnome-shell
And click the “click here to install browser extension” link in the extension page and refresh the page if you don’t see the toggle icon.
Or, search for and install “Extension Manager” from Ubuntu Software, and use the tool to search and install that extension:
After installed the extension, go back “Installed” tab in Extension Manager window, and click configure the extension for showing/hiding power-off menu options (May need log out and back in).