
Я не могу заставить функцию «Приостановить» работать правильно в Ubuntu 18.04. Однако функция гибернации работает так, как и ожидалось.
Описание проблемы: Когда я использую Suspend из меню питания или «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 демон-перезагрузка
Попробуй это:
$ sudo systemctl приостановить
Результаты такие же, как описано выше: ноутбук переходит в спящий режим, однако сохраненная сессия не восстанавливается при перезагрузке.
Я знаю, что вызывается скрипт 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 обновление-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
После долгих поисков ответа и биения головой об стол я нашел решение самостоятельно, собрав воедино крупицы информации из разных источников. Это решение работает на моем Sony Vaio Model VPCEB15FM под управлением Ubuntu 18.04, ваш опыт может отличаться.
Часть проблемы с правильной работой спящего режима/режимов ожидания была в том, как 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
Обратите внимание, что в конфигурации «suspend» следует использовать s2both вместо s2ram. s2ram не работает в моей системе, но s2both работает всегда.
Убунту 18.04 и 20.04:
Отредактируйте /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
Примечание: есть man-страница для uswsusp.conf, которая полностью описывает все параметры. Есть куча других настроек, это минимум, который требуется. Закомментированные строки были оставлены, чтобы вы могли увидеть некоторые другие опции.
Убунту 22.04:
Отредактируйте /etc/suspend.conf.
09-16-2022 Файл /etc/uswsusp.conf был заменен на /etc/suspend.conf
Видеть:https://wiki.archlinux.org/title/Uswsusp
sudo nano /etc/suspend.conf
Только "возобновить устройство" строка изменилась по сравнению с инструкциями выше, все остальное может остаться прежним.
Вместо этого используйте эту строку:
resume device = /dev/disk/by-label/swap
Редактировать /etc/initramfs-tools/conf.d/resume
sudo nano /etc/initramfs-tools/conf.d/resume
добавьте эту строку: RESUME=UUID=5c555600-2e37-477d-62df-6013d61dc3
Примечание: если используется файл подкачки, то необходимо добавить смещение. Добавьте: resume offset = 34816 после UUID.
Хорошо, это должно решить все вопросы конфигурации.
Обновите grub и initramfs:
sudo update-grub
sudo update-initramfs -u or update-initramfs -u -k all to do all kernels
Перезапустите Ubuntu.
После перезагрузки проверьте функциональность спящего режима и режима ожидания. Спящему режиму может потребоваться несколько минут, чтобы записать файл возобновления в раздел подкачки и выключить машину. Не паникуйте. Режим ожидания немного быстрее.
Проверьте все это!
sudo systemctl hibernate
sudo systemctl suspend
Что вам следует увидеть:
- спящий режим — полностью выключает систему, займет несколько минут. После перезагрузки компьютера и повторного входа в систему ваши приложения должны возобновиться. Примечание: процесс возобновления может занять несколько минут, и машина может зависнуть во время возобновления. Будьте терпеливы.
- приостановить - система переходит в режим "спячки", а индикатор питания медленно мигает (дышит). Нажатие основной кнопки питания пробуждает машину. Вы должны увидеть экран входа в систему, и ваши приложения должны возобновить работу.
Дальнейшие шаги:
Вы должны иметь возможность войти в режим сна/приостановки из раскрывающегося меню питания. Когда вы откроете раскрывающееся меню, нажмите клавишу Alt. Значок питания должен смениться на значок сна.
Также можно добавить опцию меню Hibernate. Уже есть несколько хороших руководств по этому вопросу, которые можно найти, выполнив поиск по запросу "ubuntu add hibernate power menu"