Приостановить работу в Ubuntu 18.04 без сохранения состояния с использованием uswsusp и s2ram

Мне не удается заставить функционал «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
  • сохранил файл , Он сохраняется в / etc / systemd / system /
  • 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.

Есть ли какой-то шаг или элемент конфигурации, который я не хватает?

0
задан 20 June 2019 в 18:07

1 ответ

1125 После долгих поисков ответа и стуча головой по столу, я сам нашел решение, собрав воедино кусочки информации из разных источников. Это решение работает на моем Sony Vaio Model VPCEB15FM под управлением Ubuntu 18.04, ваш пробег может отличаться.

Отчасти проблема с корректной работой 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"

0
ответ дан 20 June 2019 в 18:07

Другие вопросы по тегам:

Похожие вопросы: