極楽とんぼのロボット製作記

情報工学系大学院生がロボットとその周辺技術や身の回りの出来事について紹介するブログ

cronを使って自動でスクリーンショットを撮る

Ubuntu上で一定時間ごとにスクリーンショットを撮る必要に迫られ、試行錯誤した結果を載せます。

shutterのインストールと使い方

スクリーンショットを撮るツールとしてはgnome-screenshotやscrotなどがありますが、今回はファイル名の指定やウィンドウの指定などの細かな設定が行えるshutterを使用します。 以下のコマンドでshutterをインストールします。

$ sudo apt install shutter

$ shutterとすると下のようなウィンドウが表示されます。ここからGUI操作でスクリーンショットを撮ることもできます。

f:id:gokuraku104robot:20180609072918p:plain:w500
shutter
今回は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)をさわってみるお