在唤醒时运行脚本?
当计算机“唤醒”(从睡眠状态)时,有没有办法运行脚本? 我知道它可以在启动时完成,显然,但在这种情况下的问题是我的笔记本电脑的背光似乎每次从睡眠状态唤醒时都会重置,我理想的是要让脚本处理它降低到合理的水平,而不是每次都要手动输入。
pm-utils提供了一系列在睡眠/恢复时运行的脚本,你可以在那里添加你的脚本,但是你需要小心,因为搞砸可能会破坏简历。 查看/usr/lib/pm-utils/sleep.d
,这就是脚本的位置,您可以查看名为95led
的脚本,因为它非常简单,并且将是一个很好的模型。
95led提供了hibernate/暂停和解冻/恢复的案例,如果你只想要简历,你可以像这样写你的脚本:
#!/bin/sh case "$1" in resume) echo "hey I just got resumed!" run_some_command esac
您的脚本可能应该运行到最后,因此请确保它在目录中显示在最后,可能将其命名为99ZZZ_myscript或其他内容。 再说一遍,如果你不确定你在这里做什么,我就不会搞砸了。 你可能最终打破暂停/恢复。 如果发生这种情况,您可以删除脚本或修复它,但是您必须执行一个硬启动周期才能恢复系统。
可能还有一种更简单的方法,但我知道这种方法可行。
在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
- 测试:)
警告 :
你需要小心,因为搞砸可能会破坏简历。 如果系统崩溃或冻结,您可以删除脚本或修复它,但您必须进行硬重启才能恢复系统。
示例:
查看/usr/lib/pm-utils/sleep.d中的现有scripti。 名为95led的脚本非常简单,从一开始就是一个很好的模型。 95led提供了hibernate/暂停和解冻/恢复的案例,如果你只想要简历,你可以像这样写你的脚本:
#!/bin/sh case "$1" in resume) echo "hey I just got resumed!" run_some_command esac
这不是一个单独的独立答案,但由于我无法评论(由于声誉限制),我只想添加一个重要的补充mfisch的答案,这对我也有用。
请注意, HOME
和PATH
(很可能是其他环境变量)可能与常规shell环境不同。 我有问题mfisch的解决方案似乎不适用于我需要在恢复时执行的脚本,但事实certificate这是我的脚本有问题,因为他们期望将HOME
设置为我的用户目录(我是一个单独的用户我的系统)和PATH
包括/usr/local/bin
,并且在恢复时,这两者都不能得到保证(在HOME
的情况下,可能是不可取的)。 所以你可能不得不调整你的脚本/程序而不依赖于这些环境……