Если на моем компьютере зарегистрировано более одного человека, при выключении компьютера в Ubuntu требуется аутентификация суперпользователя. Как я могу сделать так, чтобы любой пользователь мог выключить компьютер без запроса пароля?
Вам не нужно обходных путей, просто измените политику, чтобы вы могли выключиться без аутентификации в качестве администратора для выключения и перезагрузки, когда несколько пользователей вошли в систему.
Редактируйте файл /usr/share/polkit-1/action/org.freedesktop.consolekit.policy, используя ваш любимый текстовый редактор. Вам понадобятся права root'а.
Измените раздел, относящийся к выключению, когда другие пользователи вошли в систему с
<action id="org.freedesktop.consolekit.system.stop-multiple-users">
<description>Stop the system when multiple users are logged in</description>
<message>System policy prevents stopping the system when other users are logged in</message>
<defaults>
<allow_inactive>no</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
</defaults>
</action>
до
<action id="org.freedesktop.consolekit.system.stop-multiple-users">
<description>Stop the system when multiple users are logged in</description>
<message>System policy prevents stopping the system when other users are logged in</message>
<defaults>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
и раздел, относящийся к перезагрузке, когда другие пользователи вошли в систему с
<action id="org.freedesktop.consolekit.system.restart-multiple-users">
<description>Restart the system when multiple users are logged in</description>
<message>System policy prevents restarting the system when other users are logged in</message>
<defaults>
<allow_inactive>no</allow_inactive>
<allow_active>auth_admin_keep</allow_active>
</defaults>
</action>
до
<action id="org.freedesktop.consolekit.system.restart-multiple-users">
<description>Restart the system when multiple users are logged in</description>
<message>System policy prevents restarting the system when other users are logged in</message>
<defaults>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
И это позволит вам выключать и перезагружать компьютер, когда несколько пользователей вошли в систему. Хотите ли вы сделать это - вопрос другой.
Кажется, теперь HAL устарел и не установлен в последних выпусках Ubuntu.
Вы должны использовать ConsoleKit и UPower службы dbus для управления питанием состояние
Завершение работы:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Перезагрузка:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Приостановка:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Гибернация:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Благодаря форумам Arch Linux .
На данный момент это работает в Precise и Quantal, но не Не знаю, как давно фокус Freedesktop, похоже, сместился с ConsoleKit на systemd. Не знаю, заботит ли Canonical ...
Ответ Ричарда Холлоуэя на самом деле не является способом предоставления полномочий PolickKit. Файлы, установленные в / usr / share / polkit-1 / actions
, не подлежат изменению. Вместо этого вам следует изменить права доступа в /etc/polkit-1/localauthority/50-local.d/
.
Вот как это сделать для этого вопроса:
Создайте файл с именем /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pkla
и отредактируйте его с помощью sudoedit
, чтобы он выглядел следующим образом:
[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop-multiple-users
ResultInactive=no
ResultActive=yes
Затем создайте еще один .pkla
файл в том же каталоге. Используйте любое имя, заканчивающееся на .pkla
, например allow_all_users_to_restart.pkla
, и заполните его следующим содержанием:
[Allow all users to restart]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.restart-multiple-users
ResultInactive=no
ResultActive=yes
Есть лучший способ. Если у вас установлена dbus-send, то вы можете выключиться через dbus без необходимости повышения привилегий root.
Я не помню страницу, где находится документация, но один из пользователей Archlinux это выяснил.
Shutdown:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Reboot:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Reboot
Suspend:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:1
Hibernate:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate
Regards.
Я считаю, что это проблематично только при выполнении через командную строку.
Если это так, то здесь есть ссылка , которая может помочь решить вашу проблему.
Добавьте остановку и/или перезагрузку в файл sudoers, назначенный группе/пользователю, которому вы хотите разрешить выполнение этой задачи. Таким образом, вы все еще можете управлять тем, кто может выключиться, но без предоставления им полного корневого доступа к машине...
http://linux.byexamples.com/archives/315/how-to-shutdown-and-reboot-without-sudo-password/
Это работает 14.04. Обновленный вариант предыдущего ответа IMO, правильный ответ Flimm .
sudo mkdir -p /etc/polkit-1/localauthority/50-local.d
sudoedit /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown_reboot_suspend.pkla
Вставьте это внутри:
[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-multiple-sessions
ResultActive=yes
[Allow all users to reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-multiple-sessions
ResultActive=yes
[Allow all users to suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-multiple-sessions
ResultActive=yes
[Allow all users to ignore inhibit of shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-ignore-inhibit
ResultActive=yes
[Allow all users to ignore inhibit of reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-ignore-inhibit
ResultActive=yes
[Allow all users to ignore inhibit of suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-ignore-inhibit
ResultActive=yes
Очевидно, что вы можете завершить работу без root из GUI, потому что gdm запускается как root. Gnome говорит gdm выключиться, а gdm делает это.
Вы можете сделать что-нибудь подобное со скриптом. Я не уверен, насколько удобно работать с BASH, но я считаю, что можно написать скрипт, который запускается от имени root и, когда он получает определенный сигнал, запускает команду shutdown.
Имейте в виду, что это может создать проблему безопасности.
Невозможно обойти запрос пароля суперпользователя при перезагрузке, пока другие пользователи входят в систему, не открыв терминальное окно и не выдав команду reboot
в качестве root:
sudo reboot
Даже если вы не настроены на обход запроса пароля для вашей учетной записи пользователя, sudo
также выдаст запрос на ввод пароля.
Не волнуйтесь, это GOOD вещи. Перезагрузка должна быть редкой, а простая подсказка пароля администратора поможет вам случайно зачистить шланги!