我知道有几个关于电源按钮选项的问题,但这有点不同。
在我与家人共享的系统上,我已从设备菜单禁用关机功能,用户只能注销。电源是单独管理的,以防止在 SSH 处于活动状态时意外关机,或者有人正在流式传输到电视等。相反,计算机会监控登录和连接,并会在 20 分钟不活动后休眠。我通过添加禁用了关机:
[Disable lightdm PowerMgmt]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no
到 /etc/polkit-1/localauthority/50-local.d/disable-shutdown.pkla
这按预期工作。
但是,我想在按下电源按钮本身时覆盖此策略 - 有时有人希望计算机关闭或重新启动或立即挂起,而忽略管理软件。我认为电源按钮不是您可能不小心按下的东西。如果按下电源按钮,我可以更改 Polkit 策略中的任何内容以允许执行这些操作,否则不允许执行这些操作吗?用户通常不是管理员帐户,因此他们无法使用 sudo 进行身份验证以强制关机。我知道我可以让电源按钮立即触发关机,但我仍然希望 Ubuntu 菜单询问用户要执行的操作(关机、重启、睡眠,就像菜单中未禁用时一样),而不是立即关机。
如果在 Polkit 中不可能,有没有办法显示正常的 Ubuntu 电源选项菜单,但在按下电源按钮时以超级用户身份运行它?
好吧,我有一个很好用的解决方案,至少对我来说是这样。我正在运行 Ubuntu 14.04。我没有对它进行广泛的测试,但它似乎可以完成这项工作。如果您发现问题,请发表评论。
创建 Polkit 规则
在终端中运行此命令:
并将其复制到其中:
保存并关闭,然后也运行这个:
并将其粘贴到其中:
保存并关闭。
这两个文件将告诉 Ubuntu 不要让任何用户启动关机、重启、暂停或休眠操作。如果需要,可以修改这些以仅禁用其中一些操作。
编辑 powerbtn.sh
运行此命令以编辑在按下电源按钮时运行的脚本:
关于第 6 行,插入以下内容:
文件的顶部现在应该如下所示:
它所做的是发出一个信号,Upstart 将使用该信号(我们将在接下来进行)来更改关闭操作的权限。它不会抑制正常的电源按钮按下过程,所以你仍然会看到通常的 Ubuntu Unity 关机菜单(或者至少我做了 :P )
保存并关闭 gedit。
创造暴发户工作
我在某处读到 Ubuntu 将在接下来的几个版本中转向 systemd 而不是 Upstart,因此这适用于 14.04 但可能不适用于此之后的版本
在终端中运行此命令:
这将创建一个新文件,该文件将成为在您按下电源按钮时运行的任务。
将以下内容复制到其中:
保存并关闭它,然后运行:
并将其粘贴到其中:
这些将临时重命名安全策略文件,以便忽略它们,从而使用户能够关闭、重新启动、暂停和休眠。当然,这可以根据您的喜好进行修改,以仅启用其中的一些。一分钟后,文件将重命名回它们应该的名称,从而再次禁用用户电源管理。预停止部分应恢复关机权限。否则,第二个 Upstart 作业将在启动时运行以恢复策略。
这里的所有都是它的!对于这台机器上的用户,我还从设备菜单中隐藏了关机选项,因此用户只能看到“注销”选项。运行
dconf-editor
,导航至“应用程序”>“指示器会话”并勾选“抑制重启菜单项”和“抑制关闭菜单项”。这对权限没有任何作用,它只是有助于在人们按下“关机”时不让他们感到困惑,但它不起作用。因此,澄清一下,现在当按下电源按钮时,将向用户显示 Ubuntu 电源菜单,如果关闭和重启已被抑制,则该菜单只会显示注销选项。选择注销,然后在登录屏幕上,关机菜单将工作,计算机可以关闭,仅一分钟。