Прошлое решение базировалось на pm-utils, но с переходом jessie на systemd это перестало работать (#745848). До недавнего времени я пользовался jessie + sysv init и эта проблема меня не касалась, но последнее время все чаще сталкиваюсь с systemd и решил дать ему шанс на домашней системе. Наибольшей проблемой после перехода на systemd стал отвалившийся suspend-to-hibernate.
В wiki archlinux есть вариант для systemd. Пришлось немного доработать их вариант, чтобы он начал работать в debian jessie.
[Unit]
Description=Delayed hibernation trigger
Documentation=https://wiki.archlinux.org/index.php/Power_management
Before=suspend.target
Conflicts=hibernate.target hybrid-suspend.target
StopWhenUnneeded=true
[Service]
Type=oneshot
RemainAfterExit=yes
Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm"
Environment="SLEEPLENGTH=+2hours"
ExecStart=-/bin/sh -c 'echo -n "alarm set for "; date +%%s -d$SLEEPLENGTH | tee $WAKEALARM'
ExecStop=-/bin/sh -c '\
alarm=$(cat $WAKEALARM); \
now=$(date +%%s); \
if [ -z "$alarm" ] || [ "$now" -ge "$alarm" ]; then \
echo "hibernate triggered"; \
systemctl hibernate; \
else \
echo "normal wakeup"; \
fi; \
echo 0 > $WAKEALARM; \
'
[Install]
WantedBy=sleep.target
Этот сервис нужно сохранить в файле /etc/systemd/system/suspend-to-hibernate.service и добавить в suspend.target зависимость на suspend-to-hibernate.service. В противном случае suspend.target не будет дожидаться выполнения suspend-to-hibernate.service.
sudo cp /lib/systemd/system/suspend.target /etc/systemd/system/suspend.target echo Requires=suspend-to-hibernate.service | sudo tee -a /etc/systemd/system/suspend.target sudo systemctl enable suspend-to-hibernate.service sudo systemctl daemon-reload
В будущем планирую интегрировать поддержку systemd в мой laptop-utils и собрать для него пакет.
Комментариев нет:
Отправить комментарий