Archives For November 30, 1999

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!

image from pixabay.com

Continue Reading…

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.

Continue Reading…

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.

image from pixabay.com

Continue Reading…

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:

sudo dd if=/dev/zero of=/swapfile count=8192 bs=1MiB

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:

sudo mkdir -p /etc/polkit-1/localauthority/50-local.d

2.) Thanks to @Joerg, Ubuntu 23.10 and Ubuntu 24.04 users need to install polkitd-plka package first:

sudo apt install polkitd-pkla

3.) Then, run command to create & edit a config file (replace gedit with gnome-text-editor for 24.04):

sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

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.

  • First, run command to create a config file:
    sudo nano /etc/polkit-1/rules.d/10-enable-hibernate.rules
  • When file opens, paste the lines below and press Ctrl+S to save, finally press Ctrl+X to exit.
    polkit.addRule(function(action, subject) {
        if (action.id == "org.freedesktop.login1.hibernate" ||
            action.id == "org.freedesktop.login1.hibernate-multiple-sessions" ||
            action.id == "org.freedesktop.upower.hibernate" ||
            action.id == "org.freedesktop.login1.handle-hibernate-key" ||
            action.id == "org.freedesktop.login1.hibernate-ignore-inhibit")
        {
            return polkit.Result.YES;
        }
    });

After doing either option above, your desktop (including MATE, XFCE, KDE, but exclude GNOME) should NOW have the “Hibernate” option in shutdown menu!

For GNOME, the default desktop in Ubuntu, you need to do one more step for the menu option visible:

For default GNOME desktop, go to the link button below and install the extension for the menu option:

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).

Moreover:

If everything goes well after this tutorial, you can get more, including hibernate when lid is closed, and automatic hibernate on system idle.