Ubuntuでgnome-screenshotをcronで動かしたいんだが動かない
前回までのお話
結論はいちばん最後にあります。displayオプションつければOK。
試行錯誤編
0 14 * * * gnome-screenshot --window --delay=5
crontabでこれを設定してみましたよ~
14時まで待つことしばし…
……起動してないな……
このコマンドでログを見てみましょう~
$ less /var/log/syslog | grep CRON
てことでcrontab再編集……
10 * * * * gnome-screenshot --window --delay=5
毎時10分に起動するようにしたが……起動はしたっぽいがスクショは取れておらず
No MTA installed, discarding output
ってログに出ている……なんのエラーかしら
メールサーバーの設定が出来ていないので、エラーをメールで通知できなかったと言う事です。メール通知が不要なら放置で良いです。
あ、そうなの……ううーん、とりあえず放置で。
でもエラー内容が知りたいぞということで……
0 * * * * gnome-screenshot >> /share/test.log 2>&1
ファイルに出力してみよう。(スクショのオプションは外した)
なお、2>&1ってなんだろね……はこちら…(素人)
すると……「No MTA installed, discarding output」のエラーは出なくなり。
Unable to init server: Could not connect: 接続を拒否されました
(gnome-screenshot:5660): Gtk-WARNING **: 15:00:01.528: cannot open display:
がファイルに出力されていました。へー。どゆこと?
cron経由だとできない雰囲気は理解した。
gokuraku104robot.hatenablog.com
おっ、gnome-screenshotじゃない、別のでやってる人が。
スクリーンショットの撮影やブラウザなどGUIを使っているソフトの多くはX-Windowを使用しています。X-Windowを使用しているコマンドをcronから使用するには環境変数を教えてやる必要があります。
ほう……わからん。crontabに直接コマンド打つのではなく、実行ファイルつくんないとダメかなー。
* * * * * export DISPLAY=:0 gnome-screenshot >> /share/test.log 2>&1
とりあえず頭に足してみる。あと毎分起動にした。
怒られた。ダメだった。
えっもうsudoしちゃう??(sudo万能だと思ってる節)
$ sudo crontab -e
で
* * * * * gnome-screenshot >> /share/test.log 2>&1
はい怒られました。
Unable to init server: Could not connect: 接続を拒否されました
(gnome-screenshot:5926): Gtk-WARNING **: 15:44:01.597: cannot open display:
ファイルつくるか……
おおむね解決編
gokuraku104robot.hatenablog.com
こちらの記事でほぼ解決。
スクリーンショットを取るにはDISPLAY環境変数という環境変数が必要なんだが、cronからはそれが読み取れない。ゆえにDISPLAY環境変数を教えてやる必要がある。
DISPLAY環境変数はモニタがひとつならたいてい:0だけど、こちらのコマンドで確認できる。
みたいな説明は、下記参照。
DISPLAY環境変数の確認はこちらが便利。
$ export |grep DISPLAY
で、実行ファイルをホーム直下に、sc.shとして作成。
$ vi /home/user_name/sc.sh
中身は以下。
#!/bin/bash
export DISPLAY=:0
gnome-screenshot >> /share/test.log 2>&1
アクセス権限も変更。
$ chmod 755 sc.sh
で、cronを編集~
$ crontab -e
1番下に以下を追加
* * * * * bash /home/user_name/sc.sh
で、取れました~~~わー!
なのですが、何やらログが……
** Message: 16:25:01.571: Unable to use GNOME Shell's builtin screenshot interface, resorting to fallback X11.
んー。エラーなの??スクショ取れてるしいっかな……
スクショ取れてるんならクリティカルなメッセージではないで。って言ってる人いるから大丈夫かな。「Warning」じゃなくて「Message」だもんな。
ちなみに運用は1日1回(12時かな?)に起動させたいので、
0 12 * * * bash /home/user_name/sc.sh
になりますかねー。あと実行ファイル内も
で、ファイル出力はなしでいいかな。
ただ、スクショ取るときに画面がピカって光るのがちょっとな……ほかの試してみようかな。
なお、cronについてはこちらがいちばんよかったかな。
待って!これだけでよかった編
gnome-screenshot、スクショ取るときにぴかっと光るの消せないの?と思って
$ man gnome-screenshot
したんですよ。そしたら、--displayオプションがあってですね……
まさか……
*/2 * * * * gnome-screenshot --display=:0 >> /share/test.log 2>&1
これでcron行けたわぁ……
displayオプションが何かは、この記事にどこかにありますが、たいてい上記でオーケーかと。じゃなければ「--display=:1」か。
ちなみにログ。
(gnome-screenshot:10675): GLib-GIO-CRITICAL **: 18:04:01.548: g_dbus_proxy_new_sync: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
(gnome-screenshot:10675): GLib-GIO-CRITICAL **: 18:04:01.549: g_dbus_connection_call_sync_internal: assertion 'G_IS_DBUS_CONNECTION (connection)' failed
** Message: 18:04:01.549: Unable to use GNOME Shell's builtin screenshot interface, resorting to fallback X11.(gnome-screenshot:10675): GLib-GObject-CRITICAL **: 18:04:01.679: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
んー。CRITICALだのfailedだの不穏ですが……でもスクショは取れてるよ。
それはそれとして、ぴかっと光るの消す方法が見つからないので、gnome-screenshotは使わないかもです。
次回は、shutter使ってみようの回。