cronを使って自動でスクリーンショットを撮る
Ubuntu上で一定時間ごとにスクリーンショットを撮る必要に迫られ、試行錯誤した結果を載せます。
shutterのインストールと使い方
スクリーンショットを撮るツールとしてはgnome-screenshotやscrotなどがありますが、今回はファイル名の指定やウィンドウの指定などの細かな設定が行えるshutterを使用します。 以下のコマンドでshutterをインストールします。
$ sudo apt install shutter
$ shutter
とすると下のようなウィンドウが表示されます。ここからGUI操作でスクリーンショットを撮ることもできます。
今回はCLIでの撮影を行うため
$ shutter -f
と入力します。デフォルトの設定では~/Pictures/
にスクリーンショットが保存されます。
例えば
$ shutter -e -n --disable_systray --window=.*Chrome* -o '%y-%m-%d_%T.png'
とするとウィンドウ名にChromeという名前が入っているウィンドウを探して、そのウィンドウのスクリーンショットを撮ることができます。コマンドライン引数の詳しい内容についてはman shutter
で確認できます。
cronでX-Windowを使うコマンドを使う際の注意
cronを使うと指定時刻にコマンドを実行させることができます。cronについては以下の記事が詳しいです。 qiita.com
スクリーンショットの撮影やブラウザなどGUIを使っているソフトの多くはX-Windowを使用しています。X-Windowを使用しているコマンドをcronから使用するには環境変数を教えてやる必要があります。まず普通のターミナルから以下のようなコマンドを打ちます。
$ export |grep DISPLAY declare -x DISPLAY=":1"
私の環境ではDISPLAY変数は:1なので実行させたいシェルスクリプトにしたのように環境変数を追加してから実行したい処理を書きます。
#!/bin/bash export DISPLAY=:1 ###実行したい処理### shutter -e -n --disable_systray --window=.*Chrome* -o '%y-%m-%d_%T.png'
これをshutter.sh
として保存したら、下のようにしてシェルスクリプトに実行権限を与えます。
$ chmod 755 shutter.sh
最期にcronに登録します。
$ crontab -e
#1番下に以下を追加
* * * * * bash /home/username/pathtoscripts/shutter.sh
以上により毎分自動でスクリーンショットを撮ることができます。
参考サイト
linux - wmctrl not working in crontab - Stack Overflow Take periodic screenshots in Ubuntu with scrot and cron | existence, refactored クーロン(cron)をさわってみるお