仅在用户输入期间运行的计时器

时间:2012-09-24 00:24:32

标签: bash input timer

运行Arch Linux

我有一个运行的脚本,每15分钟拍摄一次屏幕截图,调整大小,并将其放入我的Dropbox文件夹中。当我单独离开计算机一段时间并最终获得相同内容的多个屏幕截图时,这会很痛苦。

我想做的是每十五分钟使用一次屏幕截图,而不是每十五分钟一次。我想在按键的30秒内将USE定义为 - 如果我坐下并键入十五分钟,那就很重要了。如果我整天一小时检查一次,那只会计算我实际输入的时间。

我该怎么做?我愿意接受任何语言的任何解决方案,使用任何现有的程序等,只要它如上所述(或关闭)。

1 个答案:

答案 0 :(得分:1)

David Z问的问题值得回答;我们只能推测你的最终目标,或者拍摄屏幕截图的理由。但除此之外,以下是一种可能有助于实现既定目标的方法。 (这种方法很粗糙;我想如果我对xscreensaver有更多了解,可以提出更好的解决方案。)

开始,安装和设置xscreensaver(如果使用屏幕保护程序与您的习惯兼容;如果没有,请参阅下一个答案)。

如xscreensaver man page中所述,在xscreensaver-command -watch循环中将read添加到屏幕截图脚本中。每当LOCKBLANK出现时,请保存自上次屏幕截图以来经过的时间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更改回3米并将屏幕截图程序替换为函数ss中的echo

#!/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