wiki-system/right-fit-swap-for-laptop-hibernation-Ubuntu-20.04-full-ZFS-install.md
2020-06-22 20:45:59 +02:00

6.8 KiB

right fit swap for laptop hibernation - Ubuntu 20.04 full ZFS install

sources

prerequisite

create swap partition to permit Hibernate

With default Ubuntu zsys-setup full ZFS install swap will have 2GB wich is maybe not enough for your systeme. We have to create a swap partition with a size which fit RAM size for hibernation.

add theses 2 lines in : /usr/share/ubiquity/zsys-setup

MEMSIZE=$(cat /proc/meminfo | grep MemTotal | awk -F' ' '{print $2}')
SWAPVOLSIZE=$(( MEMSIZE / 1024 ))

like bellow :

    # Convert to MiB to align the size on the size of a block
	SWAPVOLSIZE=$(( SWAPSIZE / 1024 / 1024 ))
    
MEMSIZE=$(cat /proc/meminfo | grep MemTotal | awk -F' ' '{print $2}')
SWAPVOLSIZE=$(( MEMSIZE / 1024 ))

	prepare_target "${TARGET}"
	format_disk "${DISK}" "${PARTBASE}" "${PARTESP}" "${PARTBPOOL}" "${PARTRPOOL}" "${SWAPVOLSIZE}"
	init_zfs "${TARGET}" "${DISK}${PARTBASE}${PARTBPOOL}" "${DISK}${PARTBASE}${PARTRPOOL}"
	init_system_partitions "${TARGET}" "${DISK}${PARTBASE}1" "${DISK}${PARTBASE}${PARTESP}"

Run ubiquity to start the installer and install as normal, selecting “Use entire disk” and the option to use ZFS.

activate hibernation in system

Disable secure boot in bios to permit Hibernate.

apt install pm-utils
printf "RESUME=UUID=$(blkid | awk -F\" '/swap/ {print $2}')\n" | head -n 1| sudo tee /etc/initramfs-tools/conf.d/resume

you can check with : blkid

update-initramfs -u -k all

change /etc/default/grub : add your resume UUID into GRUB_CMDLINE_LINUX_DEFAULT

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=75034ff5-...-9e4564e16d34"

Edit file : /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

[Réactive hiberner par défaut dans upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Réactive hiberner par défaut dans 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 hibernate to auto switch from sleep to hibernate

source : Linux Mint Forums : Enable Hibernation with LUKS on LVM and extras

edit : /etc/systemd/sleep.conf

And add this value to it (The number represents seconds you want to pass in sleep, after which the computer will switch to hibernation, so you can put it in 60 seconds or something short just to check it's working and after that you can put whatever ammount of time you want):

[Sleep]
HibernateDelaySec=1200

Here I choose 1200 for 20min, I think that I can move from one place to an other in less than 20min if it's more systeme goes to hibernate mode.

Modify this two lines in /etc/systemd/logind.conf for sleep key and closing the lid actions if that's how you want it:

HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate

encrypt swap partition

sources :

apt-get install ecryptfs-utils
swapoff -a
cryptsetup luksFormat --cipher aes-xts-plain64 --verify-passphrase --key-size 256 /dev/nvme0n1p2
cryptsetup open /dev/<device> swapDevice
mkswap /dev/mapper/mkswap /dev/mapper/swapDevice

edit : /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mapper/swapDevice"
update-grub

Now ajust /etc/fstab to use your mapper, replace your encrypt swap device like bellow :

/dev/nvme0n1p2   none   swap   discard   0   0

remove your encrypt swap device define in /etc/crypttab

swapDevice   /dev/nvme0n1p2		none	luks
swapon -a

Register these changes.

update-initramfs -u -k all

disable encrypt swap partition

  • Turn off swap
swapoff /dev/mapper/cryptswap1
  • remove your encrypt swap device define in your /etc/crypttab
cryptsetup luksClose /dev/mapper/cryptswap1

Now ajust /etc/fstab to use your mapper, remove your swap UUID device to :

/dev/nvme0n1p2   none   swap   discard   0   0

Change your /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT to

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/nvme0n1p2"
mkswap /dev/nvme0n1p2
swapon -a

to be solve

cryptsetup: ERROR: Couln't resolve device rpool/ROOT/ubuntu_...
cryptsetup: WARNING: Couln't determine root device

xfce4-power-manager suspend to hibernate option

source : docs.xfce.org - Frequently Asked Questions - Xfce4 Power Manager

Because it's not possible to configure suspend-then-hibernate for Lid close inside XFCE Power Manager Control Panel, you will make logind handle button events instead of xfce4-power-manager.

  • To have logind handle the lid open/close event, has your normal user do this in a terminal :
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/logind-handle-lid-switch -n -t bool -s true

If you want everything time related, then you can set them with settings in /etc/systemd : sleep.conf and logind.conf

What is our suspend Hibernate comportement with above configuration

  • if system is running, and you close lid, it will suspend to RAM then 20min lather il will Hibernate
  • If you push Power Button, it will ask you what you want to do
  • You can confgure xfce4-power-manager to Hibernate if battery goes under a %