Так уж сложилось, что в моей жизни Linux стало больше: сегодня на работе поставил Debian "Jessie", есть такая необходимость. Хотя обычно я предпочитаю и использую fluxbox, на этот раз было нужно окружение Mate. После запуска Mate я обнаружил, что среда запрашивает пароль root всякий раз, когда я пытаюсь выключить или перезагрузить компьютер. Хочу поделиться простым рецептом, как от этого избавиться, и включить возможность перезагрузки и выключения компьютера под обычным пользователем.
Сначала стоит убедиться, что у нас установлены следующие пакеты:
# apt-get install policykit-1 mate-polkit consolekit
После этого необходимо подправить соответствующую политику polkit. В любимом редакторе (мой любимый - mcedit) откройте файл org.freedesktop.login1.policy, вот так
# mcedit /usr/share/polkit-1/actions/org.freedesktop.login1.policy
Он имеет структуру XML. Найдите в нем блок <action id="org.freedesktop.login1.power-off">
Измените содержимое секции <defaults>, чтобы получилось что-то такое:
<action id="org.freedesktop.login1.power-off"> <description>Power off the system</description> <message>Authentication is required for powering off the system.</message> <defaults> <allow_any>yes</allow_any> <allow_inactive>yes</allow_inactive> <allow_active>yes</allow_active> </defaults> </action>
Таким же образом измените содержимое блоков defaults в следующих секциях:
<action id="org.freedesktop.login1.power-off-multiple-sessions"> <action id="org.freedesktop.login1.reboot"> <action id="org.freedesktop.login1.reboot-multiple-sessions"> <action id="org.freedesktop.login1.suspend"> <action id="org.freedesktop.login1.suspend-multiple-sessions"> <action id="org.freedesktop.login1.hibernate"> <action id="org.freedesktop.login1.hibernate-multiple-sessions">
Завершите сеанс Mate, если он у вас был запущен, и запустите снова. Теперь вы сможете выключить, перезагрузить или загнать в сон Debian, работая под обычным пользователем.
Эти правила же будут действовать только до первого обновления polkit. Что нужно сделать для того, чтобы они не были перезаписаны правилами из обновлённого пакета?
Полагаю, в этом случае надо писать правила в /etc/polkit-1/rules.d
Что-нибудь типа:
/etc/polkit-1/rules.d/99-shutdown.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions" ||
action.id == "org.freedesktop.login1.reboot" ||
action.id == "org.freedesktop.login1.reboot-multiple-sessions") {
return polkit.Result.YES;
}
});
Должно прокатить.