Изменение настройки systemd HandleLidSwitch во время выполнения?

Изменение настройки systemd HandleLidSwitch во время выполнения?

Настройка HandleLidSwitchопределяется /etc/systemd/logind.confследующим образом:

HandleLidSwitch=<hibernate,ignore,...>

Настройка успешно применяется при загрузке. Однако я хотел бы изменить настройку во время выполнения в зависимости от состояния AC:

Если мой ноутбук заряжается, используйте HandleLidSwitch=ignore. Если мой ноутбук работает от батареи, используйте HandleLidSwitch=suspend.

Возможно ли это как-то реализовать с помощью текущей версии systemd?

решение1

logind предоставляетблокировка ингибитораМеханизм, позволяющий пользовательскому программному обеспечению переопределять системную политику. Он позволяет, например, Gnome контролировать все кнопки и переключатели ACPI, пока он активен. Вы можете использовать его для запрета "handle-lid-switch", когда устройство подключено, и снятия блокировки, когда оно отключено.

Лучшим подходом было бы написать скрипт на языке с привязками DBus и использовать Inhibit()метод logind, но systemd предоставляет systemd-inhibitкоманду, которую можно использовать из скрипта оболочки. Обратите внимание, что она предназначена для использования в качестве оболочки, удерживающей блокировку до тех пор, пока дочерний процесс не завершит работу:

systemd-inhibit --what=handle-lid-switch SOME_COMMAND_HERE

P.S. Все это предполагает, что вы не используете среду рабочего стола, которая уже блокирует "handle-lid-switch". Запуск systemd-inhibitбез аргументов выведет список существующих ингибиторов.

Связанный контент