如何使关机不需要管理员密码?


49

如果我的计算机上登录了多个人,则在关闭计算机时,Ubuntu需要超级用户身份验证。我该如何做到这一点,以便任何用户都可以在不要求输入密码的情况下关闭计算机?


3
+1我怀疑输入密码来关闭家庭计算机上的许多用户。
理查德·霍洛威

7
如果您在其他人登录时关闭计算机,那么他们打开的窗口会怎样?他们的公开文件?我认为任何不自动保存的内容都会丢失。这值得考虑。
Torben Gundtofte-Bruun

“ Ubuntu在关闭计算机时需要超级用户身份验证”,在Ubuntu 11.10中,它不要求超级用户授权,使用菜单关闭时,它仅可用作注销并进入登录页面,例如此问题:askubuntu.com/ q / 64073/11995,我对如何配置Ubuntu询问我超级用户密码感兴趣?
Mikl

1
对于14.04及更高版本:请参见askubuntu.com/questions/454039/…–塔卡特2015
6

Answers:


27

您不需要解决方法,只需更改策略即可关闭,而无需以管理员身份进行身份验证即可关闭,并在多个用户登录时重新启动。

使用您喜欢的文本编辑器编辑文件/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>

  <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>

这样一来,当有多个用户登录时,您可以关闭并重新启动PC。是否要这样做是另一个问题。


1
以下是有关policykit的更多信息的链接:hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Richard Holloway 2010年

4
每当重新安装或升级polkit时,您的更改都不会消失吗?
瑞安·汤普森

3
@Ryan,根据wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04,您可以在/ etc / polkit-1 / localauthority内编写一个.pkla文件,但我不确定其语法:)(此Wiki中有一些信息)。 archlinux.org/index.php/PolicyKit#Authorities
Joril


1
如何在不重新启动的情况下重新加载规则?
森卡彻

33

Richard Holloway的答案实际上并不是授予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

参考文献:


原来这是一个非常奇怪的问题的解决方案。在安装PowerBroker(向Active Directory进行身份验证)之后的12.04,用户根本无法使用GUI重新启动或关闭计算机(lightdm和indicator-session都不起作用。它将返回登录屏幕。)将这些权限添加到Policykit,一切正常。
korylprince

man pklocalauthority在Ubuntu中有信息
Konstigt 2014年

4
请注意,现在名称已更改!这是从14.04开始的:/ usr / share / polkit-1 / actions $ grep multiple * org.freedesktop.login1.policy:<action id =“ org.freedesktop.login1.power-off-multiple-sessions”> org.freedesktop .login1.policy:<action id =“ org.freedesktop.login1.reboot-multiple-sessions”> org.freedesktop.login1.policy:<action id =“ org.freedesktop.login1.suspend-multiple-sessions”> org .freedesktop.login1.policy:<action id =“ org.freedesktop.login1.hibernate-multiple-sessions”>
Konstigt 2014年

1
对于16.04,除了@Konstigt的更改之外,对我来说,文件必须存在,/var/lib/polkit-1/localauthority/50-local.d并且ResultAny=yes两个文件都需要附加一行。我现在收到的唯一警告消息是Failed to set wall message, ignoring: Interactive authentication required.,但是关闭并重新启动现在可以正常工作。
sigalor'1

@ sigalor的评论工作对我来说,与加sysctl poweroff -i要求org.freedesktop.login1.power-off-multiple-sessions,所以我做了同样的思路一个单独的文件除外Action=org.freedesktop.login1.power-off-multiple-sessions
wickedchicken

16

有个更好的方法。如果已安装dbus-send,则可以通过dbus关闭,而无需升级为root特权

我不记得文档所在的页面,但是一位Archlinux用户发现了这一点。

关掉:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

重启:

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

休眠:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate

问候。


哇,真是太黑了。很棒,但又很hacky…
贾坦教徒

1
关闭并重新启动似乎在11.10中不再起作用
Mikl

@Mikl尝试安装hal(sudo apt-get install hal)
Epeli 2012年

12

HAL现在似乎已被弃用,并且未在最新的Ubuntu版本中安装。

您必须使用ConsoleKitUPower 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是否在乎...


4

这适用于14.04。Flimm先前IMO正确答案的更新版本。

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

1

在重启其他用户而没有打开终端窗口并reboot以root身份发出命令的情况下重新登录时,无法避免超级用户密码提示。

sudo reboot

即便如此,如果未配置为绕过用户帐户的密码提示,sudo也会提示您输入密码。

别担心,这些都是好东西。重新启动应该很少,并且简单的管理员密码提示可以避免意外地把自己弄丢!


您也可以编辑visudo并在键入sudo时使用户不提示输入密码。
Da1T 2013年

0

我相信这只是通过命令行进行操作时的问题。

如果是这样,那么这里的链接可以帮助您解决问题。


否,有一个弹出窗口要求您输入管理员密码,如果您关闭该帐户时是否还有其他用户登录。使用GUI。
以赛亚书


-1

显然,由于gdm以root身份运行,因此您可以在没有root的情况下从GUI关闭。Gnome告诉gdm关闭,然后gdm完成它。

您可以使用脚本执行类似的操作。我不确定您使用BASH有多方便,但是我相信有人可以编写一个以root身份运行的脚本,并在收到某种信号后运行shutdown命令。

请记住,这可能会带来安全问题。


我认为他可能会遇到的问题是出现提示,提示其他人仍在登录,并且需要使用sudo密码来启用关闭/重新启动。
大卫·托马斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.