Если на моем компьютере зарегистрировано более одного человека, Ubuntu требует аутентификации суперпользователя при выключении компьютера. Как я могу сделать это так, чтобы любой пользователь мог выключить компьютер, не запрашивая пароль?
Если на моем компьютере зарегистрировано более одного человека, Ubuntu требует аутентификации суперпользователя при выключении компьютера. Как я могу сделать это так, чтобы любой пользователь мог выключить компьютер, не запрашивая пароль?
Вам не нужен обходной путь, просто измените политику, чтобы вы могли отключиться без аутентификации в качестве администратора для выключения и перезагрузки, когда несколько пользователей вошли в систему.
Отредактируйте файл /usr/share/polkit-1/actions/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>
to
<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>
И это позволит вам завершить работу и перезагрузить компьютер, когда несколько пользователей вошли в систему. Если вы хотите сделать это, это другой вопрос.
ответ Ричарда Холлоуэя на самом деле не означает, что разрешения 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-передача, вы можете отключиться через 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
Приостановить
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
С уважением.
HAL, похоже, теперь устарел и не установлен в последних выпусках Ubuntu.
Вы должны использовать ConsoleKit и UPower dbus для управления состоянием питания
Shutdown:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Restart:
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
Hibernate:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Благодаря Arch Linux форумам .
Теперь это работает в Precise и Quantal, но не знаю, как долго, поскольку фокус Freedesktop, похоже, смещается с ConsoleKit на systemd. Не знаю, заботится ли Канонич ...
Это работает 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
Невозможно обойти приглашение для пароля суперпользователя при перезагрузке, в то время как другие пользователи регистрируются, не открывая окно терминала, и выдает команду reboot
с правами root:
sudo reboot
Даже если вы не настроили обход пароля для учетной записи пользователя, sudo
также предложит вам ввести пароль.
Не волнуйся, это ХОРОШИЕ вещи. Перезагрузка должна быть редкими, и простое приглашение пароля администратора автоматически спасает вас!
Добавьте halt и / или перезагрузите файл sudoers, назначенный группе / пользователю, который вы хотите разрешить для выполнения этой задачи. Таким образом, вы все равно можете контролировать, кто может завершить работу, но не предоставит им полный корневой доступ к машине.
По-видимому, вы можете отключить root из GUI, потому что gdm работает от имени root. Gnome сообщает gdm, чтобы закрыть, и gdm делает это.
Вы можете сделать что-то подобное со сценарием. Я не уверен, насколько вы удобны с BASH, но я считаю, что можно написать скрипт, который запускается с правами root, и когда он получает определенный сигнал, запускает команду shutdown.
Имейте в виду, что это может создать проблему безопасности.