![如何暂停|休眠一段时间](https://linux22.com/image/202875/%E5%A6%82%E4%BD%95%E6%9A%82%E5%81%9C%7C%E4%BC%91%E7%9C%A0%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4.png)
我尝试按照以下规则为笔记本电脑的合上盖子提供一种行为:
当盖子关闭时:
- 1m后应锁屏;
- 10m后应暂停;
- 15m后应停机。
所以,我编写了以下脚本:
#!/bin/bash
USER=fauve
sleep 1m
# set screensaver
su -c "$HOME/.local/bin/screenlock" - $USER
# hibernate
sleep 9m
systemctl suspend
sleep 5m
# shutdown
shutdown 0
但正如您所看到的,shutdown
当笔记本电脑处于暂停状态时,就会发生这种情况,因此它永远不会关闭。
那么如何编写暂停或关闭 5 分钟的程序,然后使脚本继续完全关闭计算机呢?
答案1
简而言之:你不能。至少在软件方面不是这样。当您将计算机置于挂起状态时,它就会挂起。像这样的软件sleep
(或更准确地说,告诉内核在给定时间后唤醒任务的系统棒或计时器)根本不会运行。
所以,这里唯一的问题就是硬件解决方案。您的笔记本电脑需要有一些闹钟才能唤醒并退出挂起状态!
幸运的是,这是相当标准的。
echo 0 > /sys/class/rtc/rtc0/wakealarm
echo `date '+%s' -d "+ 5 minutes"` > /sys/class/rtc/rtc0/wakealarm
systemctl suspend
systemctl shutdown
会那样做的。如果你的笔记本电脑支持的话。
请注意,我怀疑这句话的意义。你编写脚本的方式,你的笔记本电脑总是5分钟或更长时间退出暂停后直接关闭。我想你想要别的东西。我的猜测是您想要检查 5 分钟是否真的过去了,如果还没有过去,则假设笔记本电脑已手动退出暂停状态,并且不是关掉它。在这种情况下,您需要保存暂停前的时间,并将其与暂停后的时间进行比较。
也许你想要systemctl suspend-then-hibernate
?这似乎是一件可能的事情。在底层,它执行相同的操作:依靠 RTC 在某个时间退出挂起状态,然后将系统状态保存到磁盘并关闭电源除非之前手动唤醒过。