web-dev-qa-db-ja.com

Cronでnotify-sendまたはzenityのいずれかを使用する

特定の状況を見つけたときに画面アラートを提供するようにcronを取得しようとしています。スクリプトが毎分実行されることは知っていますが、画面に表示されません。

実行されるスクリプトは次のとおりです。

DISPLAY=:0.0 /usr/bin/notify-send -t 1000 Test "This is a test"

MandrivaディストリビューションからGnomeを実行しています。

何か案は?

5
user28987

これは、rootのcrontabではなく、ユーザーのcrontabですか?

少なくともデバッグについては、JohnTが説明するようにスクリプトを作成することをお勧めします。

* * * * * /path/to/script.sh

スクリプトは次のようになります。

#!/bin/bash
{
    echo "trying to notify at $(date)"
    DISPLAY=:0.0 /usr/bin/notify-send -t 1000 Test "This is a test"
    echo "finished notify at $(date)"
} > /path/to/your-notify-debug.log 2>&1

質問にあるように、DISPLAYの前に「:」がないことに注意してください。このスクリプトは必ず実行可能にしてください(chmod +x /path/to/script.sh)そしてcronにそれを数回実行させてください。次に、ログファイルに何が書き込まれたかを調べます。

5
dubiousjim

DBUSユーザーセッションバスに接続できる必要があります。これは、システムバスではなくセッションバスである必要があります。あなたはそれをすることによってそれを見つけることができます

セット| grep DBUS_SESSION_BUS_ADDRESS

次に、スクリプトで次のことを行う必要があります

export DBUS_SESSION_BUS_ADDRESS = {それが何であれ}

次に、通知送信を行います

ログインするたびにセッションバスが変化するため、ログインスクリプトに何かを追加して、DBUS_SESSION_BUS_ADDRESSをファイルに書き込み、スクリプトがそれを読み込んでエクスポートできるようにすることをお勧めします。

3
Andrew