LINUX.ORG.RU

Неочевидная штука systemd, suspend-then-hibernate, счетчик времени

 , , ,


1

1

Итак файл: /etc/systemd/sleep.conf

[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
HibernateMode=platform shutdown
HibernateDelaySec=10min

В таком виде не работает. Т.е. ноут как бы засыпает, потом якобы уходит в гибернацию, но на деле у меня (Thinkpad X1 Carbon G8) жрёт 16% батарейки за сутки.

Если запустить вручную в терминале: systemctl suspend-then-hibernate, то плюётся ошибкой:

Call to SuspendThenHibernate failed: Sleep verb 'suspend-then-hibernate' is not configured or configuration is not supported by kernel

Выяснил, что в параметр HibernateDelaySec надо именно что вписывать integer, без постфиксов секунд, минут, и прочая.

Причём нигде в доках systemd я про это не нашёл.

Гадство в том, что некоторые другие тайм-параметры, например в юнитах, например OnBootSec - допускают префиксы.

Таким обазом, рабочий вариант такой:

[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
HibernateMode=platform shutdown
HibernateDelaySec=600


Последнее исправление: kixx09 (всего исправлений: 1)

Очень странно, какая версия системды?

У меня этот файл в комментариях весь, в т.ч. есть:

# See systemd-sleep.conf(5) for details.

и

#HibernateDelaySec=180min

А в man по этому поводу:

HibernateDelaySec=
 The amount of time the system spends in suspend mode before the system is automatically put into hibernate mode, when using systemd-suspend-then-hibernate.service(8). Defaults to 2h.

И ещё есть https://www.freedesktop.org/software/systemd/man/latest/systemd-sleep.conf.html

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от Dimez

systemd версии 257.8

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

В какой момент системда перестала понимать конфиг, не могу сказать, не следил, но, видимо, в промежуток между маем и июлем 2025.

kixx09
() автор топика

Судя по ману, оно периодически просыпается и проверяет батарейку, а уйдет в гибернацию лишь когда останется 5% заряда. Абзац про AllowSuspendThenHibernate касательно обработки HibernateDelaySec в зависимости от наличия батарейки.

Выяснил, что в параметр HibernateDelaySec надо именно что вписывать integer, без постфиксов секунд, минут, и прочая. Причём нигде в доках systemd я про это не нашёл.

А ты где-то в доках нашел слова о том, что в параметр с названием «СЕКУНДЫ» можно вписывать «минуты и прочая»?

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 2)
Ответ на: комментарий от thesis

А ты где-то в доках нашел слова о том, что в параметр с названием «СЕКУНДЫ» можно вписывать «минуты и прочая»?

Нигде. Конфиг файл изначально прилетел в систему несколько лет назад с параметром:

#HibernateDelaySec=180min

И оно работало, будучи раскомментированным, до определённого времени.

А еще я видел в доках системды, «что в параметр с названием «СЕКУНДЫ» можно вписывать «минуты и прочая»», другой параметр, да, но с названием СЕКУНДЫ:

The arguments to the directives are time spans configured in seconds. Example: "OnBootSec=50" means 50s after boot-up. The argument may also include time units. Example: "OnBootSec=5h 30min" means 5 hours and 30 minutes after boot-up. For details about the syntax of time spans, see systemd.time(7).

Source: https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html

kixx09
() автор топика

У меня с HibernateDelaySec=20m работает. Единственная проблема, на которую натыкался, если это значение больше чем SuspendEstimationSec, то ноут по таймеру просыпался и обратно засыпал, никогда не уходя в гибернацию.

kneedeep
()

интересное упражнение: открыть исходники сустемд на гитхабе и попробовать невооруженным взглядом найти там код, который достаёт эти 600 после HibernateDelaySec.

Спойлер, после пары раскрытий определений макросов всё приходит вот в эти 100 строк нечитаемого говнокода там, где в любой нормальной программе написали бы просто один scanf.

PS бггг, и естественно у них там были вот такие баги. Интересно, а всякие бездари типа заббалов и интелфхов вот тогда уже вовсю бегали и рассказывали, какой сустемд крутой и инновационный?))

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)