Настройка 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
без аргументов выведет список существующих ингибиторов.