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

Bash 仅在用户输入期间运行的计时器,bash,input,timer,Bash,Input,Timer,运行ArchLinux 我有一个脚本在运行,每十五分钟截图一次,调整大小,然后放在我的dropbox文件夹中。这是一种痛苦,当我离开我的电脑一段时间,并最终与多个相同的东西截图 我想做的是在每15分钟使用一次之后,而不是每15分钟拍摄一次屏幕截图。我想将使用定义为在按键后30秒内-如果我坐着打字15分钟,那就算数了。如果我每天每小时检查一次东西,它只计算我实际打字的时间 我该怎么做?我愿意接受任何语言的任何解决方案,使用任何现有程序等,只要它按照上述方式工作(或关闭)。David Z提出的问题值

运行ArchLinux

我有一个脚本在运行,每十五分钟截图一次,调整大小,然后放在我的dropbox文件夹中。这是一种痛苦,当我离开我的电脑一段时间,并最终与多个相同的东西截图

我想做的是在每15分钟使用一次之后,而不是每15分钟拍摄一次屏幕截图。我想将使用定义为在按键后30秒内-如果我坐着打字15分钟,那就算数了。如果我每天每小时检查一次东西,它只计算我实际打字的时间


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

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

启动、安装和设置(如果使用屏幕保护程序与您的习惯兼容;如果不兼容,请参阅下一个答案)

如xscreensaver中所述,在
read
循环中将
xscreensaver命令-watch
添加到屏幕截图脚本中。每当出现
锁定
空白
时,保存自上一个屏幕截图以来经过的时间T并停止计时器。当
解除锁定时
将计时器重置为15-T,或者截图并将计时器设置为15

如果屏幕被遮住了,你可以放弃当前的屏幕截图,让你的15分钟计时器按照正常的时间表运行。您可以使用
xscreensaver命令-time
查找自上一个屏幕截图以来是否发生了状态更改

下面显示了一种更简单的方法,让您的脚本可以确定屏幕是否为空白

    xset -q | grep Monitor
如果屏幕被遮住,将产生
监视器关闭
,否则
监视器打开
。假设屏幕保护程序监视器关闭延迟为K分钟,脚本唤醒间隔为L分钟。让W1、W2表示两个连续的脚本唤醒。假设在W1,xset表示监视器打开,在W2表示监视器关闭。然后在W2,您知道在最后K分钟内没有键盘活动。但是,空闲时间间隔可能长达K+L分钟。如果要收紧边界,请减小K和L,或使用计数器。下面是一个说明如何使用计数器的脚本。要查看正在运行的脚本,请将3m替换为1并运行它。然后将1改回3m,并将屏幕截图程序替换为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

更大的背景是什么?例如,你为什么要这样做?我只是有一种感觉,在这种情况下,你可以通过查看更大的图片来获得更好的解决方案,可能甚至不需要检测按键。你可以拍摄每个屏幕截图,然后将其与之前的屏幕截图进行比较,如果匹配就将其删除吗?更大的图片是,我正在将屏幕截图上传到dropbox,然后IFTTT把它们放到facebook上(稍后我可以切换到tumblr)。这是我正在开发的一种自愿监控功能,它可以帮助我限制花在电脑上的时间,并鼓励我在使用电脑时提高效率。此外,就计时器而言,我目前有一个“睡眠15m”作为while循环的一部分,所以我不知道如何进行重置。显然,我需要一个更好的计时器设置。