Мне не удается заставить функционал «Suspend» корректно работать в Ubuntu 18.04. Однако функциональность Hibernate работает, как и ожидалось.
Описание проблемы: Когда я использую Suspend из меню Power или «sudo systemctl suspend», происходит следующее:
Что я сделал до сих пор:
$ sudo apt-get install uswsusp
$ sudo update-initramfs -u
$ sudo systemctl edit systemd-suspend.service
Я вставил следующие строки в systemd-suspend.service:
[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/sbin/s2ram
ExecStartPost=-/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
run:
$ sudo systemctl daemon-reload
Проверьте это:
$ sudo systemctl suspend
Результаты такие же, как описано выше, ноутбук спит, однако сохраненный сеанс не восстанавливается при перезагрузке.
Я знаю, что вызывается скрипт systemd-suspend.service. Если я изменю строку ExecStart = / usr / sbin / s2ram на ExecStart = / usr / sbin / s2disk, ноутбук перейдет в Hibernate и восстановит сеанс.
Дополнительная информация:
Чтобы заставить Hibernate работать, я изменил grub:
sudoedit /etc/default/grub
изменил эту строку:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
to:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=<string of hex> resume_offset=34816"
затем запустил:
$ sudo update-grub
Информация ядра:
lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 18.04.2 LTS
Release: 18.04
Codename: bionic
uname -a
Linux <machinename> 4.18.0-21-generic #22~18.04.1-Ubuntu SMP Thu May 16 15:07:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
sudo s2ram -K
This kernel has KMS support.
Есть ли какой-то шаг или элемент конфигурации, который я не хватает?
Отчасти проблема с корректной работой hibernate / suspend заключалась в том, что Ubuntu загружает и назначает / dev / sda2, / dev / sdb2 и т. Д., Поскольку порядок назначения дисков иногда меняется от загрузки к загрузке. Итак, первый шаг - определить UUID раздела подкачки. Поскольку UUID является постоянным, он делает точку подключения гораздо более надежной.
UUID можно получить из:
sudo blkid
Найдите запись, которая говорит «своп»
/dev/sda2: UUID="5c555600-2e37-477d-62df-6013d61dc36" TYPE="swap" PARTUUID="2f501554-02"
Ваш UUID будет отличаться от моего. Не используй мое, используй свое.
Если вы используете файл подкачки вместо раздела подкачки, тогда используйте UUID основного раздела Linux, и вам также нужно будет знать смещение файла подкачки.
Чтобы получить смещение для файла подкачки:
sudo filefrag -v /swapfile
Вывод будет выглядеть примерно так:
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
2: 63488.. 96255: 100352.. 133119: 32768: 98304:
Смещение, за которым вы работаете, является первым «Physical_offset», в данном случае это будет 34816.
Теперь у вас есть информация, необходимая для начала.
Измените / etc / default / grub
sudoedit /etc/default/grub
измените строку:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
при использовании раздела подкачки на:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36"
при использовании файла подкачки для:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36 resume_offset=34816"
Установить uswsusp.
Это устанавливает методы s2disk, s2ram и s2both.
sudo apt-get install uswsusp
Установите systemd-hibernate.service и systemd-suspend.service.
Эти файлы находятся в / etc / systemd / system / или будут созданы там, если они еще не существуют.
sudo systemctl edit systemd-hibernate.service
Вставьте в эти строки:
[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2disk
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
Примечание: моя система имеет путь к / lib / systemd / system-sleep, другие могут иметь другое расположение, например / usr / lib / systemd /system-sleep.
sudo systemctl edit systemd-suspend.service
Вставьте в эти строки:
[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2both
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
Обратите внимание, используйте s2both вместо s2ram в конфигурации «приостановить». s2ram не работает в моей системе, но s2both всегда работает.
Редактировать /etc/uswsusp.conf.
Используйте UUID и при использовании файла подкачки смещение:
sudo nano /etc/uswsusp.conf
Измените, чтобы использовать ваш UUID и т. Д.
# /etc/uswsusp.conf(5) -- Configuration file for s2disk/s2both
resume device = UUID=5c555600-2e37-477d-62df-6013d61dc36
compress = y
# early writeout = y
# image size = 1741570539
# RSA key file = /etc/uswsusp.key
shutdown method = platform
# only needed if using a swapfile
# resume offset = 34816
Примечание. Для файла uswsusp.conf имеется справочная страница, которая полностью описывает все параметры. Там куча других настроек, это минимум, необходимый. Закомментированные строки были оставлены, чтобы вы могли видеть некоторые другие варианты.
Редактировать /etc/initramfs-tools/conf.d/resume
sudo nano /etc/initramfs-tools/conf.d/resume
добавить эту строку: RESUME = UUID = 5c555600-2e37-477d-62df-6013d61dc3
Примечание: если используется файл подкачки, необходимо добавить смещение. add: resume offset = 34816 после UUID
Хорошо, это должно заботиться о различных элементах конфигурации.
Обновление grub и initramfs:
sudo update-grub
sudo update-initramfs -u or update-initramfs -u -k all to do all kernels
Перезапустите Ubuntu.
После перезагрузки протестируйте режим гибернации и приостановите работу. Hibernate может занять несколько минут, чтобы записать файл резюме в своп и завершить работу машины. Не паникуйте. Приостановить это немного быстрее.
Проверьте все это!
sudo systemctl hibernate
sudo systemctl suspend
Что вы должны увидеть :
Дальнейшие действия :
Вы должны быть в состоянии перейти в спящий режим / режим ожидания из выпадающего меню питания. Когда вы откроете выпадающий список, нажмите клавишу Alt. Значок питания должен измениться на значок сна.
Также можно добавить опцию меню Hibernate. Уже есть несколько хороших руководств по этому вопросу, которые можно найти, выполнив поиск "ubuntu add hibernate power menu"