如何暂停|休眠一段时间

如何暂停|休眠一段时间

我尝试按照以下规则为笔记本电脑的合上盖子提供一种行为:

当盖子关闭时:

  1. 1m后应锁屏;
  2. 10m后应暂停;
  3. 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 在某个时间退出挂起状态,然后将系统状态保存到磁盘并关闭电源除非之前手动唤醒过。

相关内容