Как использовать uswsusp для suspend-then-hibernate с systemd?

Я думаю, что ответ здесь заключается в том, что пакеты, созданные с помощью checkinstall, являются взломами, и не следует ожидать, что они будут вести себя так же, как правильные пакеты Debian. Когда я ушел и правильно создал пакет с помощью debhelper, это больше не было проблемой.

1
29.12.2018, 20:03
4 ответа

Я нашел ответ на этот вопрос, но URL-адрес (не работал в домашней системе в то время ). Вам нужно добавить «-a hibernate» после «-pre» и «-a post» строк ExecStart. Мне также пришлось изменить путь для спящего режима -, так как я использую Ubuntu, как упоминалось в предыдущем посте.

Пример:

[Service] 
ExecStart=
ExecStartPre=-/usr/bin/run-parts -v -a pre -a hibernate /lib/systemd/system-sleep
ExecStart=/usr/bin/s2disk
ExecStartPost=-/usr/bin/run-parts -v --reverse -a post -a hibernate /lib/systemd/system-sleep
1
27.01.2020, 23:15

Создайте следующую службу systemd для гибридного -сна (приостановки, а затем гибернации ).

Имя файла :/etc/systemd/system/systemd -гибрид -sleep.service.d/override.conf

[Service] 
ExecStart=
ExecStartPre=-/usr/bin/run-parts -v -a pre -a hybrid-sleep /lib/systemd/system-sleep
ExecStart=/usr/bin/s2both
ExecStartPost=-/usr/bin/run-parts -v --reverse -a post -a hybrid-sleep /lib/systemd/system-sleep

[Редактировать :Обратите внимание на использование -a hybrid-sleepи s2both.]

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

0
27.01.2020, 23:15

Я хотел сделать то же самое, но застрял на том же месте, что и вы, и не знал, как это настроить. В конце концов я нашел работу -, вокруг которой у меня сработал ответ здесь:https://superuser.com/a/1153147

Он не использует реальную конфигурацию systemd для приостановки -, затем -гибернации, а вместо этого использует обычную приостановку, но затем запускает сценарий после выбранной вами задержки, который пробуждает систему и переводит ее в спящий режим

(Обратите внимание, что для меня в Ubuntu 18.04 правильный путь был /lib/systemd/system-sleep/, а не /usr/lib/systemd/system-sleep/)

.
2
27.01.2020, 23:15

Вдохновленный ответом @AdamLett, я реализовал следующее решение/обходной путь.

Я отредактировал systemd -приостановку -, затем -службу гибернации, чтобы использовать пользовательский сценарий, который я создал в /usr/local/bin/s2ram -, затем -s2disk.sh

#!/bin/bash
# Custom suspend-then-hibernate script using uswsusp.

# Edit the "HibernateDelaySec" variable below to set the number
# of seconds to remain in suspend before hibernate.
HibernateDelaySec=1200

curtime=$(date +%s)
lock=/tmp/rtchibernate.lock

# Suspending... Record current time and set a wake up timer.
echo "$curtime" > $lock
rtcwake -m no -s $HibernateDelaySec
s2ram

# The systen is now suspended.

# Coming out of sleep...
curtime=$(date +%s)
sustime=`cat $lock`
rm $lock

# Did we wake up due to the rtc timer above?
if [ $(($curtime - $sustime)) -ge $HibernateDelaySec ]; then
    # Hibernate (suspend to disk)...
    s2disk
else
    # Cancel the rtc timer and wake up normally.
    rtcwake -m disable
fi

/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/local/bin/s2ram-then-s2disk.sh
ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
3
27.01.2020, 23:15

Теги

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