Я думаю, что ответ здесь заключается в том, что пакеты, созданные с помощью checkinstall, являются взломами, и не следует ожидать, что они будут вести себя так же, как правильные пакеты Debian. Когда я ушел и правильно создал пакет с помощью debhelper, это больше не было проблемой.
Я нашел ответ на этот вопрос, но 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
Создайте следующую службу 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
.]
Вчера вечером я добавил это в свою систему и оставил машину в этом состоянии в качестве теста. Короткий тест показал, что приостановка работает, но я хотел, чтобы моя батарея разрядилась, чтобы проверить выход из спящего режима сегодня вечером.
Я хотел сделать то же самое, но застрял на том же месте, что и вы, и не знал, как это настроить. В конце концов я нашел работу -, вокруг которой у меня сработал ответ здесь:https://superuser.com/a/1153147
Он не использует реальную конфигурацию systemd для приостановки -, затем -гибернации, а вместо этого использует обычную приостановку, но затем запускает сценарий после выбранной вами задержки, который пробуждает систему и переводит ее в спящий режим
(Обратите внимание, что для меня в Ubuntu 18.04 правильный путь был /lib/systemd/system-sleep/
, а не /usr/lib/systemd/system-sleep/
)
Вдохновленный ответом @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