有没有办法在计算机“唤醒”(从睡眠状态)时运行脚本?我知道这显然可以在启动时完成,但在这种情况下的问题是,我的笔记本电脑的背光似乎每次从睡眠状态唤醒时都会重置,理想情况下,我希望有一个脚本负责将其调低到合理的水平,而不是每次都必须手动输入。
答案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-实用程序提供了一组在睡眠/恢复时运行的脚本。
您需要的是:
- 创建一个名为99MyScript.sh(99 允许在其他脚本之后运行它)
- 添加脚本/usr/lib/pm-utils/sleep.d
- 分配执行权:sudo chmod +x /usr/lib/pm-utils/sleep.d/99MyScript.sh
- 测试一下:)
警告 :
你需要小心,因为搞砸了可能会破坏恢复。如果系统崩溃或冻结,你可以删除脚本或修复它,但你必须进行硬性电源循环才能让系统恢复。
例子 :
查看 /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 的答案添加一个重要的补充,这对我也有作用。
请注意,和HOME
(PATH
以及很可能是其他环境变量)可能与您的常规 shell 环境不同。我遇到过 mfisch 解决方案似乎不适用于我需要在恢复时执行的脚本的问题,但事实证明这是我的脚本的问题,因为它们期望HOME
设置为我的用户目录(我是系统上的单个用户)并且要PATH
包括/usr/local/bin
和 在恢复时,这两者都无法保证(在 的情况下HOME
,可能不建议这样做)。因此,您可能必须调整您的脚本/程序以不依赖那些环境变量...