Verwenden Sie in Cron entweder notify-send oder Zenity

4871
quack quixote

Ich versuche, cron dazu zu bringen, einen Bildschirmalarm bereitzustellen, wenn eine bestimmte Situation erkannt wird. Ich weiß, dass das Skript jede Minute ausgeführt wird, aber nicht auf dem Bildschirm angezeigt wird.

Skript ausgeführt wird:

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

Gnome von der Mandriva-Distribution ausführen.

Irgendwelche Ideen?

5
Eine andere Möglichkeit, dies zu tun http://unix.stackexchange.com/questions/28463/run-a-dbus-program-in-crontab-how-to-know-about-the-session-id akond vor 12 Jahren 0

2 Antworten auf die Frage

5
dubiousjim

Ist dies das Crontab Ihres Benutzers, nicht das Crontab von Root?

Ich würde vorschlagen, dass Sie, zumindest zum Debuggen, ein Skript erstellen, wie es von John T beschrieben wird:

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

So könnte das Skript aussehen:

#!/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 

Beachten Sie, dass vor DISPLAY kein ":" steht, wie Sie es in Ihrer Frage zu haben scheinen. Stellen Sie sicher, dass dieses Skript ausführbar ist ( chmod +x /path/to/script.sh), und lassen Sie es von cron einige Male ausführen. Untersuchen Sie dann, was in die Protokolldatei geschrieben wurde.

3

Sie müssen eine Verbindung zum DBUS-Benutzersitzungsbus herstellen können. Dies muss der Sitzungsbus sein, nicht der Systembus. Sie können das finden, indem Sie ein

set | grep DBUS_SESSION_BUS_ADDRESS

dann müssen Sie in Ihrem Skript haben

export DBUS_SESSION_BUS_ADDRESS =

dann senden sie ihr notify-send

Da sich der Sitzungsbus bei jeder Anmeldung ändert, möchten Sie möglicherweise etwas zu Ihren Anmeldeskripts hinzufügen, um DBUS_SESSION_BUS_ADDRESS in eine Datei zu schreiben, damit Ihr Skript das lesen und exportieren kann.

Es wurde möglicherweise bereits in einer Datei gespeichert. Versuchen Sie es am Anfang Ihres Skripts: if [[-z "$ DBUS_SESSION_BUS_ADDRESS"]]; dann Quelle "$ HOME / .dbus / session-bus" / * - 0 && exportieren DBUS_SESSION_BUS_ADDRESS; fi dubiousjim vor 14 Jahren 2