问题描述
有没有办法在计算机”wakes up”(从睡眠时)运行脚本?我知道它可以在启动时完成,显然,但在这种情况下的问题是我的笔记本电脑的背光似乎每次从睡眠状态唤醒时都会重置,我理想的是要让脚本负责转动它降低到合理的水平,而不是每次都要手动输入。
最佳解决办法
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或其他内容。再说一遍,如果你不确定你在这里做什么,我就不会搞砸了。你可能最终打破暂停/恢复。如果发生这种情况,您可以删除脚本或修复它,但您必须执行一个硬power-cycle才能恢复系统。
可能还有一种更简单的方法,但我知道这种方法可行。
次佳解决办法
在15.04,Vivid,您需要将脚本放在:
/lib/systemd/system-sleep/
基于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
别忘了让你的脚本可执行!
sudo chmod a+x /lib/systemd/system-sleep/your-script
有关详细信息,请参阅man systemd-sleep
。
不需要sudo
,因为您的脚本将以root身份运行。
注意:主题上的Arch wiki链接(systemd sleep hooks)声明(错误地为15.04)您应该将脚本放在/usr/lib/systemd/system-sleep/
中,但这在Ubuntu 15.04中不起作用。如果您运行的是15.04,则将脚本放在/lib/systemd/system-sleep/
中。
第三种解决办法
由于我没有足够的声誉来撰写评论,我将在mfisch中重写解决方案,为Lindh-E添加答案:
解决方案
pm-utils提供了一系列在睡眠/恢复时运行的脚本。
你需要的是:
-
创建一个名为99MyScript.sh的脚本(99允许在其他脚本之后运行它)
-
在/usr/lib/pm-utils/sleep.d中添加脚本
-
分配执行权:sudo chmod + x /usr/lib/pm-utils/sleep.d/99MyScript.sh
-
测试:)
警告 :
你需要小心,因为搞砸可能会破坏简历。如果系统崩溃或冻结,您可以删除脚本或修复它,但您必须执行一个硬power-cycle才能恢复系统。
示例:
查看/usr/lib/pm-utils/sleep.d中的现有脚本。名为95led的脚本非常简单,将是一个很好的模型。 95led提供了休眠/暂停和解冻/恢复的案例,如果你只想要简历,你可以像这样写你的脚本:
#!/bin/sh
case "$1" in
resume)
echo "hey I just got resumed!"
run_some_command
esac
第四种办法
这不是一个单独的独立答案,但由于我无法评论(由于声誉限制),我只想添加一个重要的补充mfisch的答案,这对我也有用。
请注意,HOME
和PATH
(很可能是其他环境变量)可能与常规shell环境不同。我有问题mfisch的解决方案似乎不适用于我需要在恢复时执行的脚本,但事实证明这是我的脚本有问题,因为他们期望将HOME
设置为我的用户目录(我是单个用户我的系统)和PATH
包括/usr/local/bin
,并且在恢复时,这两者都没有保证(在HOME
的情况下,可能是不可取的)。所以你可能不得不调整你的脚本/程序而不依赖于那些env-vars ……