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 / 问题 / 1140329
Accepted
Michael
Michael
Asked: 2019-05-04 11:15:04 +0800 CST2019-05-04 11:15:04 +0800 CST 2019-05-04 11:15:04 +0800 CST

盖子关闭时如何运行脚本?

  • 772

我正在尝试将运行 LUbuntu 18.04 的笔记本电脑配置为首先进入登录屏幕,然后在显示登录屏幕后暂停。这样做的原因是,简单地暂停然后在恢复时显示登录屏幕的默认设置会导致在恢复时显示登录屏幕之前延迟大约 5 秒,而如果在机器暂停时登录屏幕已经启动,它几乎可以在简历上立即使用。

无论如何,我一直在研究如何做到这一点,似乎我最好的选择是在盖子关闭时简单地运行一个脚本,它首先调用,dm-tool lock然后在需要等待登录屏幕显示时延迟,然后systemctl suspend。

但是,如何将关闭盖子的动作链接到运行此脚本?根据我的研究,这似乎是acpid要走的路。通过阅读手册页,似乎需要在被/etc/acpi/events调用的可执行脚本lidbtn。该目录存在于我的系统上,但不存在这样的脚本,并且手册页不清楚它需要包含的确切内容。查看此目录中的其他脚本,似乎我需要知道为“event =”行放置什么,但我在任何地方都没有找到它。

还提到了处理此事件的窗口管理器,目前尚不清楚我需要做什么来确保我的脚本不会与此冲突。在常规选项卡下的 Xfce 电源管理器(菜单 -> 首选项 -> 电源管理器)下,我看到“当笔记本电脑盖关闭时”...暂停,但唯一的其他选择是“关闭显示”和“锁定屏幕”。“什么都不做”别无选择。我需要在这里做什么?每当我可能创建的 acpid 脚本被执行之前或之后,请求的操作是否会发生,或者这是否完全覆盖了这一点?

power-management scripts suspend lubuntu 18.04
  • 1 1 个回答
  • 5833 Views

1 个回答

  • Voted
  1. Best Answer
    Michael
    2019-05-04T13:58:04+08:002019-05-04T13:58:04+08:00

    首先,我创建了一个/etc/acpi/events/laptop-lid包含以下内容的新文件:

    event=button/lid.*
    action=/etc/acpi/laptop-lid.sh
    

    然后我创建了/etc/acpi/laptop-lid.sh包含以下代码:

    #!/bin/bash
    
    source $HOME/.Xdbus
    grep -q closed /proc/acpi/button/lid/LID/state
    if [ $? = 0 ]
    then
        # close action
        dm-tool switch-to-greeter
        sleep 5
        systemctl suspend
    else
        # open action
    fi
    

    在$HOME/.Xdbus我输入以下内容:

    export XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
    

    我制作了/etc/acpi/laptop-lid.sh可执行文件(chmod a+x)。

    然后我跑了 /etc/init.d/acpid restart

    最后,我进入 XFCE 电源管理器并在笔记本电脑盖合上时将其设置为“关闭显示器”,以避免与我改进的新功能发生冲突。

    但是,我发现还是有一个问题——退出挂起后,会显示登录屏幕,然后机器又会挂起。经过一番搜索,我认为这是由于 Ubuntu 中的一个错误显然仍然存在于 18.04 中。我通过检查自从我尝试睡眠 5 秒以来是否已经过去了超过 6 秒,如果是,我不暂停。看起来我的笔记本电脑实际上会在 2 秒内挂起,所以这对我来说总是有效的。我尝试将 Xfce 设置为锁定屏幕,但它似乎也没有兑现这一点——在这两种情况下,我的机器都在 2 秒内暂停,而我的脚本应该强制它至少等待 5 秒。

    更新:

    做了这一切之后,我还是完全不满意。因为我的 XFCE 电源管理器设置基本上被忽略了,导致机器在我合上盖子时总是处于睡眠状态,这会在睡眠过程和 dm 工具创建欢迎程序的距离之间产生竞争条件,这总是会导致一些延迟在该过程完成启动欢迎程序时恢复。所以我完全取消了上述所有工作,而是做了以下工作:

    编辑~/.config/openbox/lubuntu-rc.xml. 找到锁定屏幕的键绑定并将其更改为切换到欢迎程序。这样做的主要效果似乎是不关闭显示,这对于让迎宾员在恢复时立即出现似乎很重要:

        <keybind key='W-L'>
            <action name='Execute'>
                <command>dm-tool switch-to-greeter</command>
            </action>
        </keybind>
    

    现在,我没有关上盖子,而是点击Win+L,当迎宾员出现时,我就关上盖子。

    注意:我想要一个单独的脚本,首先切换到欢迎程序,然后暂停,但似乎无论我如何尝试暂停(systemctl、dbus 等),他们都拒绝在没有手动干预的情况下从锁定屏幕暂停- 从对话框输入密码 - 因为我们处于锁定屏幕,所以无法满足!

    • 9

相关问题

  • 如何编写 shell 脚本来安装应用程序列表?

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

  • Mac OS X Automator 的替代品?

  • 为什么我的 Kubuntu 会话在恢复后需要相当长的时间才能响应?

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

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