AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 493627
Accepted
seanlano
seanlano
Asked: 2014-07-10 05:39:37 +0800 CST2014-07-10 05:39:37 +0800 CST 2014-07-10 05:39:37 +0800 CST

电源按钮关机权限覆盖

  • 772

我知道有几个关于电源按钮选项的问题,但这有点不同。

在我与家人共享的系统上,我已从设备菜单禁用关机功能,用户只能注销。电源是单独管理的,以防止在 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 电源选项菜单,但在按下电源按钮时以超级用户身份运行它?

power-management
  • 1 1 个回答
  • 1871 Views

1 个回答

  • Voted
  1. Best Answer
    seanlano
    2014-08-01T16:22:28+08:002014-08-01T16:22:28+08:00

    好吧,我有一个很好用的解决方案,至少对我来说是这样。我正在运行 Ubuntu 14.04。我没有对它进行广泛的测试,但它似乎可以完成这项工作。如果您发现问题,请发表评论。


    创建 Polkit 规则

    在终端中运行此命令:

    gksudo gedit /etc/polkit-1/localauthority/50-local.d/disable-shutdown.pkla
    

    并将其复制到其中:

    [Disable shutdown/reboot]
    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;
    ResultAny=no
    ResultInactive=no
    ResultActive=no
    

    保存并关闭,然后也运行这个:

    gksudo gedit /etc/polkit-1/localauthority/50-local.d/disable-suspend.pkla
    

    并将其粘贴到其中:

    [Disable suspend/hibernate]
    Identity=unix-user:*
    Action=org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate;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
    

    保存并关闭。

    这两个文件将告诉 Ubuntu 不要让任何用户启动关机、重启、暂停或休眠操作。如果需要,可以修改这些以仅禁用其中一些操作。


    编辑 powerbtn.sh

    运行此命令以编辑在按下电源按钮时运行的脚本:

    gksudo gedit /etc/acpi/powerbtn.sh
    

    关于第 6 行,插入以下内容:

    initctl emit power-button-press
    

    文件的顶部现在应该如下所示:

    #!/bin/sh
    # /etc/acpi/powerbtn.sh
    # Initiates a shutdown when the power putton has been
    # pressed.
    
    
    initctl emit power-button-press 
    
    
    [ -r /usr/share/acpi-support/power-funcs ] && . /usr/share/acpi-support/power-funcs
    
    # If logind is running, it already handles power button presses; desktop
    # environments put inhibitors to logind if they want to handle the key
    # themselves.
    if pidof systemd-logind >/dev/null; then
        exit 0
    fi
    

    它所做的是发出一个信号,Upstart 将使用该信号(我们将在接下来进行)来更改关闭操作的权限。它不会抑制正常的电源按钮按下过程,所以你仍然会看到通常的 Ubuntu Unity 关机菜单(或者至少我做了 :P )

    保存并关闭 gedit。


    创造暴发户工作

    我在某处读到 Ubuntu 将在接下来的几个版本中转向 systemd 而不是 Upstart,因此这适用于 14.04 但可能不适用于此之后的版本

    在终端中运行此命令:

    gksudo gedit /etc/init/power-button-pressed.conf
    

    这将创建一个新文件,该文件将成为在您按下电源按钮时运行的任务。

    将以下内容复制到其中:

    description "Allow shutdown when power button is pressed"
    
    start on power-button-press
    stop on shutdown 
    
    emits power-button-timeout
    
    task
    
    script 
        mv /etc/polkit-1/localauthority/50-local.d/disable-shutdown.pkla /etc/polkit-1/localauthority/50-local.d/disable-shutdown.ignore 2> /dev/null
        mv /etc/polkit-1/localauthority/50-local.d/disable-suspend.pkla /etc/polkit-1/localauthority/50-local.d/disable-suspend.ignore 2> /dev/null
    
        sleep 1m
    
        initctl emit power-button-timeout
    
    end script
    
    pre-stop script
        initctl emit power-button-timeout
    
    end script
    

    保存并关闭它,然后运行:

    gksudo gedit /etc/init/power-button-restore.conf
    

    并将其粘贴到其中:

    description "Re-disable shutdown, on boot or when signalled"
    
    start on (power-button-timeout or local-filesystems)
    
    task
    
    script 
        mv /etc/polkit-1/localauthority/50-local.d/disable-shutdown.ignore /etc/polkit-1/localauthority/50-local.d/disable-shutdown.pkla 2> /dev/null
        mv /etc/polkit-1/localauthority/50-local.d/disable-suspend.ignore /etc/polkit-1/localauthority/50-local.d/disable-suspend.pkla 2> /dev/null
    
    end script
    

    这些将临时重命名安全策略文件,以便忽略它们,从而使用户能够关闭、重新启动、暂停和休眠。当然,这可以根据您的喜好进行修改,以仅启用其中的一些。一分钟后,文件将重命名回它们应该的名称,从而再次禁用用户电源管理。预停止部分应恢复关机权限。否则,第二个 Upstart 作业将在启动时运行以恢复策略。


    这里的所有都是它的!对于这台机器上的用户,我还从设备菜单中隐藏了关机选项,因此用户只能看到“注销”选项。运行dconf-editor,导航至“应用程序”>“指示器会话”并勾选“抑制重启菜单项”和“抑制关闭菜单项”。这对权限没有任何作用,它只是有助于在人们按下“关机”时不让他们感到困惑,但它不起作用。

    因此,澄清一下,现在当按下电源按钮时,将向用户显示 Ubuntu 电源菜单,如果关闭和重启已被抑制,则该菜单只会显示注销选项。选择注销,然后在登录屏幕上,关机菜单将工作,计算机可以关闭,仅一分钟。

    • 1

相关问题

  • 笔记本电脑在合上盖子时关闭

  • 如何从命令行挂起/休眠?

  • 登录失败并显示低图形然后崩溃?[关闭]

  • 延长笔记本电脑和笔记本电脑电池寿命的技巧

  • 如何让“您的电池坏了”消息消失?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve