So I decided to migrate my ThinkPad X230 from Ubuntu 18.04 to the newly released Ubuntu 19.04, codenamed “Disco Dingo”. To get Disco (or any recent, SystemD-ladden Ubuntu releases) to play nice with hibernate, you need to plan ahead.
- Prepare swap partition. In the installation process, prepare and create a swap partition as large as the system’s RAM. My X230 has 16GB and that would be the size for my swap partition. The easiest way to do this is by creating one when you install your system. On “Installation type” select “something else” to create custom partition configuration.
And create a swap partition the size of the system RAM
Or resizing your existing storage to accommodate the swap partition. As a last resort, you can opt to use a swap file
- Check whether hibernate is supported. Do
surfer@M5-X230:~$ cat /sys/power/state freeze mem disk
…If disk is listed, then your system support hibernate
- Update grub to point to the swap partition on resume. Get the location of your swap partition:
surfer@M5-X230:~$ grep swap /etc/fstab # swap was on /dev/sda1 during installation UUID=14cee2ec-9d37-4ac0-b594-eae0e55814aa none swap sw 0 0
Open /etc/default/grub
surfer@M5-X230:~$ sudo nano /etc/default/grub
Modify
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
To:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=14cee2ec-9d37-4ac0-b594-eae0e55814aa"
Save, and update the grub config
surfer@M5-X230:~$ sudo update-grub
Configure the initramfs
sudo nano /etc/initramfs-tools/conf.d/resume
Update to:
RESUME=UUID=14cee2ec-9d37-4ac0-b594-eae0e55814aa
- Re-enable Hibernate menu. Update the policy kit
sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Copy paste the following value and save the file
[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
- Configure Lid switch actions. If you want the laptop to automatically enter hibernation when you close the lid, we need to configure them here:
sudo nano /etc/systemd/logind.conf
The file contains several action that can be configured during login process. The one that is relevant for our purposes is:
#HandleLidSwitch=poweroff
Uncomment and modify it to
HandleLidSwitch=hibernate
Additonally, if you own a laptop dock and you would like to be able to use your laptop when it’s connected to an external monitor while the lid is closed, uncomment:
#HandleLidSwitchDocked=ignore
to
HandleLidSwitchDocked=ignore
…and save the file. Restart the systemd logind service
surfer@M5-X230:~$ sudo systemctl restart systemd-logind.service
- Test out hibernating. You can try hibernate your machine by doing
surfer@M5-X230:~$ sudo systemctl hibernate
This worked for me for one time only and then went back to failing. Is any body ever going to sort hibernate on Ubuntu. The same hardware hibernates successfully on other operating systems and did with Ubuntu up to 16.04.
Would you mind sharing your hardware configuration? Are you using lid action to initiate hibernate and resume? This is working fine so far with my X230
It’s not a laptop. Desktop with two internal drives with different operating systems, using grub to select. Both drives have own swap partition. Correct partition is selected for resume. Usually hard boots after hibernate, but recovered correctly just once after following above procedure. I used to have hibernate option in the settings power screen, but no longer.
Works like a charm for me. Thank you very much for sharing. I seen other tutorials, and issue seams to be always with configuring resume partition correctly, but first one i see with lid action etc. Very complete. Thanks again.
Thanks, I finally have hibernate working on my laptop with a dead battery.
In the code on item 4 there is a truncated line.
The content of that line should be:
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
Fixed, thanks!
I’d be super curious (and thankful, frankly) to see an update of this post for 2020 and with using POPOS/Ubuntu where they are not using grub any longer and have switch ed to systemd (I know POPOS went through a lot of trouble to make systemd switch, but it looks like it has invalidated a whole range of super useful blog posts on getting hibernate and suspend-then-hibernate working. ).
Please ping me @awws on twitter if you do do this. (or know how…).
Amazing tutorial.. Tried many things to achieve this.. Finally able to use hibernation. Now, no need to wait for opening many applications and let them load one by one (sometimes manually)