uswsusp (Русский)
µswsusp (userspace software suspend) — это набор userspace-инструментов, используемых для перехода в ждущий или спящий режим в системах Linux.
В его состав входят:
s2ram — обёртка над механизмом suspend-to-RAM из ядра, позволяющая пользователю выполнять некоторые манипуляции с видеокартой со стороны пользователя перед уходом в сон и после пробуждения, что может помочь восстановить графику (и всю систему) после пробуждения. Включает в себя функциональность vbetool и radeontool, а также некоторые собственные приёмы. Содержит список рабочих конфигураций оборудования с соответствующими наборами операций, которые необходимо выполнить для их успешного пробуждения. Для этого используется белый список, который сопровождает HAL — s2ram транслирует параметры из базы данных HAL в параметры s2ram.
s2disk — эталонная реализация userspace-программы для перехода в сон (µswsusp); она координирует действия, необходимые для приостановки системы (такие как замораживание процессов, подготовка подкачки и т.д.), и обрабатывает запись и чтение образа. s2disk уже поддерживает сжатие и шифрование образа, и могут быть легко добавлены другие возможности (например, красивый прогресс-бар, сохранение образа на удалённый диск, игра в тетрис в процессе восстановления и т.д.).
s2both — объединяет в себе функции s2ram и s2disk и очень полезна, когда батарея почти разряжена. s2both записывает снимок системы в подкачку (как s2disk), но затем переводит машину в ждущий режим (как s2ram). Если заряда батареи достаточно, то можно быстро пробудить машину из ждущего режима, а если нет, то можно загрузить сохранённое состояние с диска без потери работы.
Установка
Установите пакет uswsusp-gitAUR.
Настройка
Перед переходом в спящий режим (suspend-to-disk) нужно отредактировать /etc/suspend.conf
.
- При использовании раздела подкачки:
resume device = /dev/disk/by-label/swap
гдеby-label/swap
— путь к блочному устройству, которое является подкачкой.
- При использовании файла подкачки:
resume device = /dev/sdXN # раздел, на котором находится файл подкачки resume offset = 123456
гдеX
иN
— это буква и номер раздела соответственно, а123456
— смещение, по которому находится заголовок подкачки. Узнать смещение можно с помощью команды# swap-offset файл_подкачки
- Параметр
image size
(необязательный) может использоваться для ограничения размера образа снимка системы, создаваемого s2disk. Если не удаётся создать образ нужного размера, s2disk все равно уведёт систему в сон, создав образ большего размера. Если размер образа установлен в 0, то образ будет настолько маленьким, насколько возможно.
- Параметр
shutdown method
(необязательный) задаёт операцию, которая будет выполняться, когда машина будет готова к выключению. Если задано значениеreboot
, то машина будет немедленно перезагружена. При значенииplatform
машина будет выключена с использованием специальных операций управления питанием, доступных ядру, которые могут потребоваться для правильной реинициализации оборудования после пробуждения и могут привести к более быстрому возобновлению работы системы. Если установить значениеshutdown
, то машина будет просто выключена, что может привести к проблемам с некоторым оборудованием.
- Если параметр
compute checksum
имеет значениеy
, то s2disk и инструменты возобновления будут использовать MD5 для проверки целостности образа.
- Если параметр
compress
имеет значениеy
, то s2disk и инструменты возобновления будут использовать LZF для сжатия/распаковки образа.
- Если
splash
имеет значениеy
, то s2disk и/или инструменты возобновления будут использовать графический экран загрузки. На данный момент поддерживаются splashy и fbsplash, но они недоступны в Arch Linux.Примечание: Для них требуются дополнительныеconfigure
-флаги в µswsusp (--enable-splashy
и--enable-fbsplash
соответственно).
- Опция
resume pause
вводит задержку после успешного выхода из спящего режима, чтобы дать пользователю возможность ознакомиться со статистикой (скорость чтения и записи, размер образа и т.д.).
- Если
threads
включен, то s2disk будет использовать несколько потоков для сжатия, шифрования и записи образа. Это должно ускорить работу. Подробнее об этом можно прочитать в комментариях к файлу suspend.c
Настройка initramfs
/etc/suspend.conf
вы должны пересобрать образ initramfs. Если вы этого не сделаете и linux не сможет найти ваш образ при загрузке, то вы не увидите сообщения об ошибке. Процесс загрузки зависнет после запуска хука uresume
, обычно после сообщения с версией libgcrypt.Отредактируйте файл /etc/mkinitcpio.conf
и добавьте uresume
в массив HOOKS
.
HOOKS=(base udev autodetect block uresume filesystems)
Затем пересоберите образ initramfs.
Пример настроек
/etc/suspend.conf
snapshot device = /dev/snapshot resume device = /dev/disk/by-label/swap # размер образа в байтах image size = 1468006400 #suspend loglevel = 2 compute checksum = y compress = y #encrypt = y #early writeout = y #splash = y # до 60 (секунд) #resume pause = 30 threads = y
Использование
Напрямую
Для перехода в спящий режим (suspend-to-disk) выполните:
# s2disk
Перед переходом в ждущий режим (suspend-to-ram) сперва выполните:
# s2ram --test
чтобы проверить, есть ли ваша машина в базе данных известных машин. Если в результате будет получено что-то вроде Machine matched entry xyz
, то можно запускать:
# s2ram
А если нет, то нужно будет добавить --force
и, возможно, какие-то ещё параметры (смотрите s2ram --help
). Это может не сработать.
Теперь можно попробовать приостановить работу, запустив s2disk напрямую из командной строки:
# s2disk
Возможно, придётся прибегнуть к userspace-инструменту, вызывающему s2disk.
Через systemd
Для перехода в спящий режим с помощью команды systemctl hibernate
отредактируйте юнит systemd-hibernate.service
, добавив:
/etc/systemd/system/systemd-hibernate.service.d/override.conf
[Service] ExecStart= ExecStartPre=-/usr/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep ExecStart=/usr/bin/s2disk ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
После этого команда systemctl hibernate
будет уводить систему в спящий режим. Внесите аналогичные изменения в systemd-hybrid-sleep.service
(заменив s2disk на s2both), чтобы получить гибридный спящий режим на основе µswsusp.
Решение проблем
Моя машина отсутствует в белом списке
Если s2ram не найдёт в белом списке запись, соответствующую вашей машине, то будет выведено несколько идентификационных строк общего назначения для вашей машины (аналогичных тем, которые предоставляет s2ram -i
). В этом случае можно попытаться заставить s2ram увести машину в сон с помощью команды s2ram -f
.
Опция force не работает
Если s2ram -f
не срабатывает, попробуйте обходные пути, которые предлагает s2ram. Команда s2ram -h
покажет список доступных опций:
# s2ram -h
Usage: s2ram [-nhi] [-fspmrav] Options: -h, --help: this text. -n, --test: test if the machine is in the database. returns 0 if known and supported -i, --identify: prints a string that identifies the machine. -f, --force: force suspending, even on unknown machines. The following options are only available with -f/--force: -s, --vbe_save: save VBE state before suspending and restore after resume. -p, --vbe_post: VBE POST the graphics card after resume -m, --vbe_mode: get VBE mode before suspend and set it after resume -r, --radeontool: turn off the backlight on radeons before suspending. -a, --acpi_sleep: set the acpi_sleep parameter before suspend 1=s3_bios, 2=s3_mode, 3=both -v, --pci_save: save the PCI config space for the VGA card.
Попробуйте такие варианты:
# s2ram -f -a 1 # s2ram -f -a 2 # s2ram -f -a 3 # s2ram -f -p -m # s2ram -f -p -s # s2ram -f -m # s2ram -f -s # s2ram -f -p # s2ram -f -a 1 -m # s2ram -f -a 1 -s
Если никакие комбинации не сработали, попробуйте ещё раз с опцией -v
.
Обратите внимание, что смешивание опций -a
и опций vbetool (-p
, -m
, -s
) обычно является крайней мерой и не имеет особого смысла.
Если вы нашли несколько комбинаций, которые работают (например, s2ram -f -a 3
и s2ram -f -p -m
работают на вашей машине), то лучше выбрать in-kernel метод (-a
), а не userspace-методы (-p
, -m
, -s
).
Проверьте все комбинации в обоих случаях при сообщении об успехе разработчикам s2ram:
- при запуске s2ram из консоли
- при запуске s2ram из X
s2ram не работает ни с какими опциями
Есть приём, который не соответствует опции командной строки, поскольку требует от вас дополнительных операций. Он помечен в белом списке как NOFB и используется для тех ноутбуков, которые приостанавливают и возобновляют работу корректно только при отсутствии фреймбуфера. Если вы убедились, что ни одна из опций командной строки s2ram не работает, можно попробовать отключить фреймбуфер. Для этого необходимо отредактировать настройки вашего загрузчика, удалить все возможные значения vga=значение
из строки ядра и перезагрузиться. Это необходимо сделать, по крайней мере, если вы используете фреймбуфер VESAFB (как в ядре Arch по умолчанию). Если вы используете другой драйвер фреймбуфера, обратитесь к его документации, чтобы узнать, как его отключить.
Смотрите также
- Домашняя страница µswsusp
- Файл HOWTO в исходном коде ядра Linux
/usr/share/doc/suspend/README
документация µswsusp/usr/share/doc/suspend/README.s2ram-whitelist
README белого списка s2ram