LINUX.ORG.RU
решено ФорумAdmin

Выключение системы по команде от UPS. Call to PowerOff failed: Interactive authentication required.

 , , , ,


0

1

Привет, ЛОР.

Есть следующая железная конфигурация. APC UPS, Synology NAS (который ретранслирует события UPS в локальную сеть) и множество клиентов, которые эти события слушают через nut (mode=netclient).

Сервер корректно завершает свою работу, а вот с рабочей станцией возникли трудности.

Скрипт, который пытаюсь выполнить при переходе в режим ONBAT, выглядит вот так

#!/bin/sh
echo "UPS is on battery, initiating immediate shutdown" | logger
/usr/bin/systemctl poweroff

Однако, все заканчивается ошибкой в логах journalctl

Call to PowerOff failed: Interactive authentication required.

Правило для polkit написано вот так

vsulimov@workstation ~ $ sudo cat /etc/polkit-1/rules.d/50-allow-nut-shutdown.rules
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.login1.power-off" && subject.user == "nut") {
        return polkit.Result.YES;
    }
    if (action.id == "org.freedesktop.login1.reboot" && subject.user == "nut") {
        return polkit.Result.YES;
    }
});

Подскажите, пожалуйста, ЧЯДНТ? Дистрибутив на рабочей станции - Arch.

Перемещено dataman из general

★★★★

Чтобы выключить комп необходимо рутовую привилегию. Иногда рутовый процесс выключающий комп может принять сигнал от пользовательского процесса. В этом случае рутовый процесс может проверять залогинен ли юзер локально в системе и если нет то игнорировать команду на выключение.

Знаю как настроить старый init, а что там в systemd & polkitd сами разбирайтесь.

anonymous
()
Ответ на: комментарий от debugger

Спасибо большое за наводку, ковырять надо было в эту сторону, помогло в итоге вот такое.

polkit.addRule(function(action, subject) {
    if ((action.id == "org.freedesktop.login1.suspend" || 
         action.id == "org.freedesktop.login1.suspend-multiple-sessions") && 
        subject.user == "nut") {
        return polkit.Result.YES;
    }
});

Ну и я переделал shutdown на suspend, поскольку потребление энергии в таком сценарии близится к нулю, а ИБП может выдержать в таком режиме минут 40 по времени.

Jefail ★★★★
() автор топика