David Z の質問には、答える価値があります。あなたの最終目標、またはスクリーンショットを撮る理由について推測することしかできません。しかし、それはさておき、以下は、述べられた目標に役立つ可能性のある方法です。(この方法は大雑把です。xscreensaver について詳しく知っていれば、より良い解決策を提案できると思います。)
開始するには、 xscreensaverをインストールしてセットアップします (スクリーンセーバーの使用があなたの習慣に適合している場合。そうでない場合は、次の回答を参照してください)。
xscreensaver のman ページで説明されているように、スクリーンショット スクリプトにループを追加xscreensaver-command -watch
します。またはが発生するread
たびに、前のスクリーンショットから経過した時間 T を保存し、タイマーを停止します。発生したら、タイマーを 15-T にリセットするか、スクリーンショットを撮ってタイマーを 15 に設定します。LOCK
BLANK
UNBLANK
代わりに、画面が空白になっている場合は現在のスクリーンショットを見送るだけで、15 分のタイマーを定期的に実行し続けることができます。xscreensaver-command -time
前のスクリーンショット以降に状態が変化したかどうかを確認するために使用できます。
画面が空白になっているかどうかをスクリプトで確認する簡単な方法を以下に示します。
xset -q | grep Monitor
Monitor is Off
画面が空白の場合は生成され、そうでない場合は生成されますMonitor is On
。スクリーン セーバーのモニター オフの遅延が K 分で、スクリプトのウェイクアップ間隔が L 分であるとします。W1、W2 が 2 つの連続するスクリプト ウェイクアップを表すとします。W1 xset でモニターがオンで、W2 でオフであるとします。次に、W2 では、最後の K 分間、キーボード アクティビティがなかったことがわかります。ただし、アイドル間隔は K+L 分ほど長くなる可能性があります。境界を狭めたい場合は、K と L を減らすか、カウンターを使用します。以下は、カウンターの使用を示すスクリプトです。スクリプトの動作を確認するには、3m を 1 に置き換えて実行します。次に、1 を 3m に戻し、スクリーン ショット手順をecho
in function 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