Вопрос или проблема
В какой-то момент мой ноутбук перестал надежно включать экран блокировки, когда он бездействует.
Он блокируется, если я запускаю команду вручную (xflock4
).
Запуск команды, которую я нашел в другом месте:
dbus-send --dest=org.freedesktop.PowerManagement --print-reply=literal \
/org/freedesktop/PowerManagement/Inhibit \
org.freedesktop.PowerManagement.Inhibit.GetInhibitors
в данный момент показывает:
array [
firefox firefox ]
что соответствует сообщениям панели управления электропитанием:
firefox в настоящее время блокирует управление питанием
firefox в настоящее время блокирует управление питанием
Однако это не меняется даже когда firefox не запущен.
Предположительно, в какой-то момент firefox заблокировал управление питанием, но по ошибке эта блокировка никогда не была снята.
Как мне:
- Заблокировать любое неправильно работающее приложение (в этом примере, firefox), чтобы оно не блокировало управление питанием?
- Или вручную принудительно снять блокировки?
Я вижу, что есть файл /usr/share/polkit-1/actions/org.freedesktop.login1.policy
, который может быть актуален для первого варианта, но я не знаю, как его использовать.
Для второго варианта, возможно, есть код, который я могу запустить, но я ничего не знаю об API и как его использовать, кроме как найти https://www.freedesktop.org/wiki/Software/systemd/inhibit/, и я не вижу ничего, что указывало бы на то, что блокировку можно принудительно снять третьей стороной.
Ответ или решение
Вопрос управления энергопотреблением на ноутбуке, который не блокируется автоматически при бездействии, может вызывать значительные неудобства. Рассмотрим, как решить проблему с остановкой приложений, таких как Firefox, от вмешательства в управление питанием. Мы проанализируем два основных подхода: блокировку приложений от ингибирования и принудительное освобождение ингибирующих процессов.
1. Блокировка приложений от ингибирования управления питанием
Чтобы предотвратить приложения от ингибирования управления питанием, вы можете воспользоваться средствами управления доступом, предоставляемыми системой Linux, такими как PolicyKit. В частности, файл /usr/share/polkit-1/actions/org.freedesktop.login1.policy
несет административные правила, касающиеся ингибирования.
Шаги:
- Откройте файл конфигурации:
sudo nano /usr/share/polkit-1/actions/org.freedesktop.login1.policy
- Измените или добавьте правила, которые отключают возможность ингибирования для определенных приложений. Например, вы можете отключить ингибирование для Firefox, добавив соответствующий блок в конфигурацию. Изменитесь правила доступа так, чтобы разрешать выполнение ингибирования только определенным приложениям или пользователям.
Пример блока:
<action id="org.freedesktop.login1.inhibit">
<message>Authentication is required to inhibit power management.</message>
<defaults>
<allow_any>none</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
Замечания
Имейте в виду, что изменения в конфигурационных файлах могут иметь серьезные последствия для работы системы. Рекомендуется создать резервную копию оригинала перед внесением изменений.
2. Принудительное освобождение ингибирующих процессов
Если проблема связана с устаревшим или зависшим состоянием некоторых приложений, можно попробовать принудительно освободить ингибирование. Однако следует помнить, что это действие может быть не предусмотрено большинством API.
Использование dbus-перечисления
Для получения списка активных ингибиторов можно использовать команду, которую вы уже использовали:
dbus-send --dest=org.freedesktop.PowerManagement --print-reply=literal \
/org/freedesktop/PowerManagement/Inhibit \
org.freedesktop.PowerManagement.Inhibit.GetInhibitors
Если Firefox продолжает отображаться как ингибитор, вы можете попробовать перезапустить систему или перезапустить сервисы D-Bus, что может помочь восстановить нормальное состояние.
Шаги для перезапуска D-Bus
sudo systemctl restart dbus
Очистка зависших процессов
Если все еще остается проблема, стоит проверить зависшие процессы Firefox и завершить их:
pkill -f firefox
Заключение
Для решения проблемы с ингибированием управления питанием на вашем ноутбуке можно либо заблокировать определенные приложения от исполнений ингибирования, воспользовавшись PolicyKit, либо принудительно освободить ингибирующие процессы через методы работы с D-Bus. Если проблема не решена после выполнения вышеуказанных шагов, рекомендуется обратиться к сообществу или технической поддержке Linux для более подробной диагностики.