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

Мне не удается заставить функционал «Suspend» корректно работать в Ubuntu 18.04. Однако функциональность Hibernate работает, как и ожидалось.

Описание проблемы: Когда я использую Suspend из Power Menu или «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 /
  • пробег:

    $ sudo systemctl daemon-reload

  • Проверьте это:

    $ sudo systemctl suspend

Результаты описаны выше, ноутбук спит, но сохраненный сеанс не восстанавливается при перезагрузке.

Я знаю, что вызывается скрипт systemd-suspend.service. Если я изменю строку ExecStart = / usr / sbin / s2ram на ExecStart = / usr / sbin / s2disk, ноутбук перейдет в режим гибернации и восстановит сеанс.

Дополнительная информация:

Чтобы заставить 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.

Какой-то шаг или элемент конфигурации мне не хватает?

1 Ответ

0 голосов
/

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

Отчасти проблема с корректной работой hibernate / suspend заключалась в том, что Ubuntu загружает и назначает / dev / sda2, / dev / sdb2 и т. Д., Поскольку порядок назначения дисков иногда меняется от загрузки к загрузке. Итак, первый шаг - определить UUID раздела подкачки. Поскольку UUID постоянен, он делает точку подключения гораздо надежнее.

UUID можно получить из:

sudo blkid

Найдите запись с надписью "swap"

/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:

Смещение, за которым вы работаете, является первым «физическим смещением», в данном случае это будет 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 в конфигурации "suspend". 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

Примечание. При использовании файла подкачки необходимо добавить смещение. добавить: смещение возобновления = 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

Что вы должны увидеть :

  • hibernate - полностью выключает систему, это займет несколько минут. После перезагрузки компьютера и повторного входа в приложения следует возобновить работу. Примечание. Процесс возобновления может занять несколько минут, и во время возобновления машина может казаться зависшей. Будьте терпеливы.
  • приостановить - система переходит в «спящий» режим, и индикатор питания медленно мигает (дышит). Нажатие основной кнопки питания разбудит машину. Вы должны увидеть экран входа в систему, и ваши приложения должны быть возобновлены.

Дальнейшие действия :
Вы должны быть в состоянии перейти в спящий режим / режим ожидания из выпадающего меню питания. Когда вы откроете выпадающий список, нажмите клавишу Alt. Значок питания должен измениться на значок сна.

Также можно добавить опцию меню Hibernate. Уже есть несколько хороших руководств по этому вопросу, которые можно найти, выполнив поиск "ubuntu add hibernate power menu"

Добро пожаловать на сайт proUbuntu, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...