Configuring Lubuntu 18.04 to enable hibernation using a swap file
July 14, 2018 27 Comments
In an earlier post about Lubuntu 18.04 I stated that hibernation is precluded because the Lubuntu Installer installs the OS with a swap file instead of a swap partition. In fact, even with a swap file it is possible to configure Lubuntu so that hibernation is possible. This is how I did it.
1. This PC has 4 GiB RAM but the Lubuntu Installer had created a 2 GiB swap file named /swapfile
, so I increased the size of the swap file to 4 GiB to ensure it was large enough to store the memory image:
user $ sudo swapoff -a
user $ sudo dd if=/dev/zero of=/swapfile bs=1024 count=4M
user $ sudo chmod 600 /swapfile
user $ sudo mkswap /swapfile
user $ sudo swapoff -a
user $ sudo swapon /swapfile
user $ cat /proc/meminfo | grep -i memtotal
MemTotal: 3924108 kB
user $ ls -la /swapfile
-rw------- 1 root root 4294967296 Jul 10 18:25 /swapfile
Note that you can check the status of the swap file before and after the above steps by using either of the following commands:
user $ swapon -s
user $ free -m
2. The Lubuntu Installer had previously configured /etc/fstab
for the swap file, so I left that as it is:
user $ grep swapfile /etc/fstab
/swapfile none swap sw 0 0
3. I checked on which device the root partition with the file /swapfile
is located (sda2
in my case) and found out its UUID (ignore the PARTUUID):
user $ sudo blkid
[sudo] password for fitzcarraldo:
/dev/sda1: UUID="3602-BD57" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="72b3693e-b81f-7299-84fb-bf3781bef43d"
/dev/sda2: UUID="afe17116-26fa-4169-b2d9-fb6ac8afc63c" TYPE="ext4" PARTUUID="738fed17-293d-832f-c7a4-e83471fe8ca6"
4. I found the resume_offset for the file /swapfile
, which is 16746496 in my case (look for the first value in the two columns under ‘physical_offset
‘):
user $ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 4294967296 (1048576 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 30719: 16746496.. 16777215: 30720:
1: 30720.. 63487: 16809984.. 16842751: 32768: 16777216:
2: 63488.. 96255: 16842752.. 16875519: 32768:
3: 96256.. 126975: 16875520.. 16906239: 30720:
4: 126976.. 129023: 16908288.. 16910335: 2048: 16906240:
5: 129024.. 161791: 16912384.. 16945151: 32768: 16910336:
6: 161792.. 194559: 16945152.. 16977919: 32768:
7: 194560.. 227327: 16977920.. 17010687: 32768:
8: 227328.. 249855: 17010688.. 17033215: 22528:
9: 249856.. 282623: 17035264.. 17068031: 32768: 17033216:
10: 282624.. 315391: 17068032.. 17100799: 32768:
11: 315392.. 319487: 17100800.. 17104895: 4096:
12: 319488.. 321535: 17121280.. 17123327: 2048: 17104896:
13: 321536.. 325631: 17129472.. 17133567: 4096: 17123328:
14: 325632.. 327679: 17137664.. 17139711: 2048: 17133568:
15: 327680.. 329727: 17143808.. 17145855: 2048: 17139712:
16: 329728.. 331775: 17154048.. 17156095: 2048: 17145856:
17: 331776.. 339967: 17162240.. 17170431: 8192: 17156096:
18: 339968.. 344063: 24485888.. 24489983: 4096: 17170432:
19: 344064.. 346111: 32665600.. 32667647: 2048: 24489984:
20: 346112.. 348159: 32677888.. 32679935: 2048: 32667648:
21: 348160.. 350207: 33261568.. 33263615: 2048: 32679936:
22: 350208.. 352255: 33363968.. 33366015: 2048: 33263616:
23: 352256.. 354303: 33853440.. 33855487: 2048: 33366016:
24: 354304.. 356351: 34000896.. 34002943: 2048: 33855488:
25: 356352.. 389119: 34027520.. 34060287: 32768: 34002944:
26: 389120.. 391167: 34060288.. 34062335: 2048:
27: 391168.. 393215: 34134016.. 34136063: 2048: 34062336:
28: 393216.. 395263: 34158592.. 34160639: 2048: 34136064:
29: 395264.. 428031: 34189312.. 34222079: 32768: 34160640:
30: 428032.. 452607: 34222080.. 34246655: 24576:
31: 452608.. 485375: 34248704.. 34281471: 32768: 34246656:
32: 485376.. 518143: 34281472.. 34314239: 32768:
33: 518144.. 550911: 34314240.. 34347007: 32768:
34: 550912.. 583679: 34347008.. 34379775: 32768:
35: 583680.. 616447: 34379776.. 34412543: 32768:
36: 616448.. 643071: 34412544.. 34439167: 26624:
37: 643072.. 645119: 34445312.. 34447359: 2048: 34439168:
38: 645120.. 649215: 34457600.. 34461695: 4096: 34447360:
39: 649216.. 659455: 34463744.. 34473983: 10240: 34461696:
40: 659456.. 688127: 34476032.. 34504703: 28672: 34473984:
41: 688128.. 690175: 34506752.. 34508799: 2048: 34504704:
42: 690176.. 692223: 34510848.. 34512895: 2048: 34508800:
43: 692224.. 724991: 34514944.. 34547711: 32768: 34512896:
44: 724992.. 757759: 34549760.. 34582527: 32768: 34547712:
45: 757760.. 778239: 34582528.. 34603007: 20480:
46: 778240.. 786431: 34637824.. 34646015: 8192: 34603008:
47: 786432.. 819199: 34648064.. 34680831: 32768: 34646016:
48: 819200.. 843775: 34680832.. 34705407: 24576:
49: 843776.. 845823: 34707456.. 34709503: 2048: 34705408:
50: 845824.. 849919: 34713600.. 34717695: 4096: 34709504:
51: 849920.. 854015: 34729984.. 34734079: 4096: 34717696:
52: 854016.. 886783: 34744320.. 34777087: 32768: 34734080:
53: 886784.. 919551: 34777088.. 34809855: 32768:
54: 919552.. 950271: 34809856.. 34840575: 30720:
55: 950272.. 983039: 34842624.. 34875391: 32768: 34840576:
56: 983040.. 1015807: 34875392.. 34908159: 32768:
57: 1015808.. 1048575: 34908160.. 34940927: 32768: last,eof
/swapfile: 38 extents found
Note that you can also find the resume_offset
by installing the package uswsusp
and using the command swap-offset
on the swap file:
user $ sudo apt install uswsusp
user $ sudo swap-offset /swapfile
resume offset = 16746496
5. I updated the file /boot/grub/grub.cfg
using the information found in Steps 3 & 4 as follows:
5.1 I added ‘resume=UUID=afe17116-26fa-4169-b2d9-fb6ac8afc63c resume_offset=16746496 resumedelay=15
‘ to the parameters in the variable GRUB_CMDLINE_LINUX_DEFAULT
in the file /etc/default/grub
(Your existing parameters could be different to mine; that is not a problem):
user $ sudo nano /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=vendor acpi_osi='!Windows 2013' acpi_osi='!Windows 2012' resume=UUID=afe17116-26fa-4169-b2d9-fb6ac8afc63c resume_offset=16746496 resumedelay=15" #
Note that the optional ‘resumedelay=15
‘ specifies the delay (in seconds) to pause before attempting to read the resume files. I added this to try to allow enough time for the filesystem containing the swap file to become Read-Write.
5.2 I regenerated /boot/grub/grub.cfg
by using the following command:
user $ sudo update-grub
6. I edited the file /etc/initramfs-tools/conf.d/resume
using the information found in Steps 3 & 4, and regenerated the initramfs files for the kernel images in the /boot
directory:
user $ sudo nano /etc/initramfs-tools/conf.d/resume
RESUME=UUID=afe17116-26fa-4169-b2d9-fb6ac8afc63c resume_offset=16746496 # Resume from /swapfile
user $ sudo update-initramfs -u -k all
7. I edited the Polkit rules files to permit hibernation (Create the files if they do not already exist):
7.1 For Polkit version 0.106 and higher
user $ sudo nano /etc/polkit-1/rules.d/85-suspend.rules
polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.login1.suspend" || action.id == "org.freedesktop.login1.suspend-multiple-sessions" || action.id == "org.freedesktop.login1.hibernate" || action.id == "org.freedesktop.login1.hibernate-multiple-sessions") { return polkit.Result.YES; } });
7.2 For Polkit versions below 0.106
user $ sudo nano /var/lib/polkit-1/localauthority/50-local.d/50-enable-suspend-on-lockscreen.pkla
[Allow hibernation and suspending with lock screen] Identity=unix-user:* Action=org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions ResultAny=yes ResultInactive=yes ResultActive=yes
It does not do any harm to create both the above-mentioned rules files, whatever the version of Polkit that happens to be installed.
8. I rebooted, logged in, launched a few GUI applications and then clicked on the Lubuntu menu icon on the Panel and selected ‘Logout’ > ‘Hibernate’, which did put the machine into hibernation. I then pressed the PC’s power push-button to resume from disk, entered my password on the lock screen and the Desktop appeared exactly as it was prior to hibernation. All good.