唤醒时运行脚本?

唤醒时运行脚本?

有没有办法在计算机“唤醒”(从睡眠状态)时运行脚本?我知道这显然可以在启动时完成,但在这种情况下的问题是,我的笔记本电脑的背光似乎每次从睡眠状态唤醒时都会重置,理想情况下,我希望有一个脚本负责将其调低到合理的水平,而不是每次都必须手动输入。

答案1

在 15.04 Vivid 中,您需要将脚本放置在:

/lib/systemd/system-sleep/

基于 Arch wiki 的示例脚本(systemd sleep 钩子):

#!/bin/sh
case $1/$2 in
  pre/*)
    echo "Going to $2..."
    # Place your pre suspend commands here, or `exit 0` if no pre suspend action required
    ;;
  post/*)
    echo "Waking up from $2..."
    # Place your post suspend (resume) commands here, or `exit 0` if no post suspend action required
    ;;
esac

不要忘记让你的脚本可执行!

sudo chmod a+x /lib/systemd/system-sleep/your-script

请参阅man systemd-sleep此处了解更多详情。

没有必要,sudo因为您的脚本将以 root 身份运行。

注意:Arch wiki 上关于该主题的链接(systemd 睡眠钩子) 指出(对于 15.04 来说是错误的)您应该将脚本放在 中/usr/lib/systemd/system-sleep/,但这在 Ubuntu 15.04 中不起作用。/lib/systemd/system-sleep/如果您运行的是 15.04,请将脚本放在 中。

答案2

pm-utils 提供了一组在睡眠/恢复时运行的脚本,您可以将脚本添加到那里,但您需要小心,因为搞砸了可能会破坏恢复。查看/usr/lib/pm-utils/sleep.d,那里有脚本,您可以查看调用的脚本,95led因为它非常简单,将是一个很好的入门模型。

95led 提供了休眠/挂起和解冻/恢复的案例,如果您只想要恢复,您可以像这样编写脚本:

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac

您的脚本可能应该最后运行,因此请确保它出现在目录的最后,也许将其命名为 99ZZZ_myscript 或类似名称。同样,如果您不确定在这里做什么,我不会乱动它。您最终可能会破坏挂起/恢复。如果发生这种情况,您可以删除脚本或修复它,但您必须进行硬电源循环才能恢复系统。

可能还有更简单的方法,但我知道这种方法会有效。

答案3

由于我没有足够的声誉来发表评论,我将重写 mfisch 的解决方案并添加 Lindh-E 的答案:

解决方案 :

pm-实用程序提供了一组在睡眠/恢复时运行的脚本。

您需要的是:

  1. 创建一个名为99MyScript.sh(99 允许在其他脚本之后运行它)
  2. 添加脚本/usr/lib/pm-utils/sleep.d
  3. 分配执行权:sudo chmod +x /usr/lib/pm-utils/sleep.d/99MyScript.sh
  4. 测试一下:)

警告 :

你需要小心,因为搞砸了可能会破坏恢复。如果系统崩溃或冻结,你可以删除脚本或修复它,但你必须进行硬性电源循环才能让系统恢复。

例子 :

查看 /usr/lib/pm-utils/sleep.d 中的现有脚本。名为 95led 的脚本非常简单,可以作为入门的良好模型。95led 提供了休眠/挂起和解冻/恢复的案例,如果您只想要恢复,您可以像这样编写脚本:

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac

答案4

这实际上不是一个独立的答案,但由于我无法发表评论(由于声誉限制),我只想为 mfisch 的答案添加一个重要的补充,这对我也有作用。

请注意,和HOMEPATH以及很可能是其他环境变量)可能与您的常规 shell 环境不同。我遇到过 mfisch 解决方案似乎不适用于我需要在恢复时执行的脚本的问题,但事实证明这是我的脚本的问题,因为它们期望HOME设置为我的用户目录(我是系统上的单个用户)并且要PATH包括/usr/local/bin和 在恢复时,这两者都无法保证(在 的情况下HOME,可能不建议这样做)。因此,您可能必须调整您的脚本/程序以不依赖那些环境变量...

相关内容