crontab 経由で X11 アプリケーション (Firefox) を起動する

crontab 経由で X11 アプリケーション (Firefox) を起動する

Firefox を 1 分ごとに開く crontab を書きたいのですが (テストのためなので、意味がないことはわかっています)。問題は、crontab がアクティブであっても何も起こらないことです。私の crontab は次のようになります。

SHELL=/bin/bash
PATH=~/bin:/usr/bin:bin
* * * * * export DISPLAY=:0.0 xhost localuser /usr/bin/firefox

なぜ動作しないのか、理由が分かりますか?

答え1

export DISPLAY=:0.0 xhost localuser /usr/bin/firefox

上記のcronコマンドを見ただけで、なぜ動作しないのかがわかります。exportコマンドの使い方は次のとおりです。

export name[=word]...

POSIXシェルでは、その後に続く残りの単語は、export DISPLAY=:0.0実行されるコマンドではなく、環境にエクスポートされるべき他のシェル変数として扱われます。POSIX(2018年版第7版)では、名前すべきである

ポータブル文字セットのアンダースコア、数字、アルファベットのみで構成される単語。

つまり、シェル変数名には などの文字を含めることはできないので、エクスポートする変数名のリストに/を含めようとすると、やなどのメッセージとともにエラーがスローされます。/usr/bin/firefoxnot a valid identifierbad variable name


また、xhostコマンドの使い方が間違っています。xhost単独で実行して、ユーザー アカウントを許可されたユーザーとして追加する必要があるかどうかを確認します。これは 1 回だけ実行すればよく、cron でスケジュールする必要はありません。


プログラムが X ディスプレイ サーバーに接続するのを妨げる他のメカニズムがない限り、上記の行は次のように置き換えることができます。

DISPLAY=:0.0
* * * * * /usr/bin/firefox

これにより、1 分ごとに新しい Firefox ウィンドウが起動します。環境変数を指定する必要もありませんSHELL。また、実行可能ファイルのフル パスを指定しているためfirefox、変数を設定する必要もありませんPATH


参照:POSIX仕様export

関連情報