唤醒时运行脚本?

Eva*_*Eva 52 scripts sleep wakeup

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

Spm*_*pmP 53

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

/lib/systemd/system-sleep/
Run Code Online (Sandbox Code Playgroud)

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

#!/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
Run Code Online (Sandbox Code Playgroud)

不要忘记使您的脚本可执行!

sudo chmod a+x /lib/systemd/system-sleep/your-script
Run Code Online (Sandbox Code Playgroud)

有关man systemd-sleep更多详细信息,请参阅。

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

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

  • 感谢您 - 花了很长时间试图弄清楚为什么我在`/etc/pm/sleep.d` 中的脚本没有在 15.10 上运行。 (4认同)

mfi*_*sch 39

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
Run Code Online (Sandbox Code Playgroud)

您的脚本可能应该最后运行,因此请确保它显示在目录的最后,也许将其命名为 99ZZZ_myscript 或其他名称。再说一次,如果你不确定你在这里做什么,我不会惹它。您最终可能会中断暂停/恢复。如果发生这种情况,您可以删除脚本或修复它,但您必须执行硬重启才能使系统恢复原状。

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

  • 从 15.04 开始,这不适用于 `systemd`,请参阅下面的答案。非常类似于上面的,简单如8) (4认同)

san*_*rys 12

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

解决方案 :

pm-utils提供了一堆在睡眠/恢复时运行的脚本。

你需要的是:

  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
Run Code Online (Sandbox Code Playgroud)


jam*_*gni 7

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

请注意HOMEPATH(很可能还有其他环境变量)可能与您的常规 shell 环境不同。我遇到了 mfisch 的解决方案似乎不适用于我需要在恢复时执行的脚本的问题,但结果是我的脚本有问题,因为它们希望HOME被设置为我的用户目录(我是我的单个用户) system) 并PATH包含/usr/local/bin,并且在恢复时,这两者都不能保证(并且在 的情况下HOME,可能是不可取的)。所以你可能需要调整你的脚本/程序来不依赖于那些 env-vars ......

  • 如果您认为您的贡献是对另一个答案的有价值的改进,请使用下面的 [edit] 链接提出修改建议。 (2认同)