いろいろやる課、書く係

いろいろなことを、たんたんと記録するブログ

Ubuntuでgnome-screenshotをcronで動かしたいんだが動かない

前回までのお話

sakimika.hateblo.jp

 

結論はいちばん最後にあります。displayオプションつければOK。

 

試行錯誤編

0 14 * * * gnome-screenshot --window --delay=5

crontabでこれを設定してみましたよ~

14時まで待つことしばし…

……起動してないな……

このコマンドでログを見てみましょう~

$ less /var/log/syslog | grep CRON

…あっUbuntuの時刻がまだアメリカ時間だった……

てことでcrontab再編集……

10 * * * * gnome-screenshot --window --delay=5

毎時10分に起動するようにしたが……起動はしたっぽいがスクショは取れておらず

No MTA installed, discarding output

ってログに出ている……なんのエラーかしら

teratail.com

メールサーバーの設定が出来ていないので、エラーをメールで通知できなかったと言う事です。メール通知が不要なら放置で良いです。

あ、そうなの……ううーん、とりあえず放置で。

でもエラー内容が知りたいぞということで……

0 * * * * gnome-screenshot >> /share/test.log 2>&1

ファイルに出力してみよう。(スクショのオプションは外した)

なお、2>&1ってなんだろね……はこちら…(素人)

qiita.com

すると……「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

とりあえず頭に足してみる。あと毎分起動にした。

/bin/sh: 1: export: gnome-screenshot: bad variable name

怒られた。ダメだった。

えっもう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だけど、こちらのコマンドで確認できる。

みたいな説明は、下記参照。

stackoverflow.com

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.

んー。エラーなの??スクショ取れてるしいっかな……

bugs.launchpad.net

スクショ取れてるんならクリティカルなメッセージではないで。って言ってる人いるから大丈夫かな。「Warning」じゃなくて「Message」だもんな。

ちなみに運用は1日1回(12時かな?)に起動させたいので、

0 12 * * * bash /home/user_name/sc.sh

になりますかねー。あと実行ファイル内も

#!/bin/bash
export DISPLAY=:0
gnome-screenshot

で、ファイル出力はなしでいいかな。

 

ただ、スクショ取るときに画面がピカって光るのがちょっとな……ほかの試してみようかな。

 

なお、cronについてはこちらがいちばんよかったかな。

qiita.com

 

待って!これだけでよかった編

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使ってみようの回。

sakimika.hateblo.jp