David Z 提出的问题值得回答;我们只能推测您的最终目标,或截屏的原因。但除此之外,以下是一种可能有助于实现既定目标的方法。(这种方法很粗糙;我想如果我对 xscreensaver 有更多的了解,可以提出更好的解决方案。)
首先,安装并设置xscreensaver(如果使用屏幕保护程序符合您的习惯;如果不是,请参阅下一个答案)。
如 xscreensaver手册页xscreensaver-command -watch
中所述,将read
循环添加到您的屏幕截图脚本中。每当 aLOCK
或BLANK
发生时,保存自上一个屏幕截图以来经过的时间 T 并停止计时器。发生时UNBLANK
,将计时器重置为 15-T,或者截屏并将计时器设置为 15。
如果屏幕空白,您可能会放弃当前的屏幕截图,并让您的 15 分钟计时器定期运行。您可以使用xscreensaver-command -time
来了解自上一个屏幕截图以来是否发生了状态更改。
下面显示了一种让您的脚本找出屏幕是否空白的更简单方法。
xset -q | grep Monitor
Monitor is Off
如果屏幕空白,将产生,否则Monitor is On
。假设您的屏幕保护程序关闭延迟为 K 分钟,而您的脚本唤醒间隔为 L 分钟。令 W1、W2 表示两个连续的脚本唤醒。假设在 W1 xset 表示监视器打开,而在 W2 表示它关闭。然后在 W2 中,您知道在最后 K 分钟内没有任何键盘活动。但是,空闲时间间隔可能长达 K+L 分钟。如果您想收紧界限,请减小 K 和 L,或使用计数器。这是一个说明使用计数器的脚本。要查看运行中的脚本,请将 3m 替换为 1 并运行它。然后将 1 改回 3m 并将您的屏幕截图程序代替echo
in 函数 ss。
#!/bin/bash
ss() {
echo Taking snapshot at $(date)
}
busy=0
while true; do
xset -q | grep -q "Monitor is On" && ((++busy > 4)) && busy=0 && ss
sleep 3m
done