Ich verwende Arch Linux mit KDE/Awesome WM. Ich versuche, notify-send
zu erhalten um mit cron
zu arbeiten .
Ich habe versucht, DISPLAY
einzustellen /XAUTHORITY
Variablen und Ausführen von notify-send
mit „sudo -u“, alles ohne Ergebnis.
Ich kann aus der Sitzung heraus interaktiv "notify-send" aufrufen und Benachrichtigungen erhalten.
FWIW, der Cron-Job läuft gut, was ich überprüft habe, indem ich Sachen in eine temporäre Datei zurückgeschickt habe. Nur das „benachrichtigen-senden“ funktioniert nicht.
Code:
[[email protected] ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[[email protected] ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
[[email protected] ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[[email protected] ~]$
Wie Sie sehen können, hat das Echo vor und nach dem Benachrichtigen-Senden funktioniert.
Außerdem habe ich versucht, DISPLAY=:0.0
einzustellen
UPDATE:
Ich habe ein bisschen mehr gesucht und festgestellt, dass DBUS_SESSION_BUS_ADDRESS gesetzt werden muss. Und nachdem ich dies mit dem Wert, den ich aus meiner interaktiven Sitzung erhalten hatte, hartcodiert hatte, tauchte jede Minute die kleine „Hallo“-Nachricht auf dem Bildschirm auf!
Aber der Haken ist, dass diese Variable laut diesem Beitrag nicht permanent ist, also werde ich die dort vorgeschlagene Named-Pipe-Lösung ausprobieren.
[[email protected] ~]$ cat scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BouFPQKgqg,guid=64b483d7678f2196e780849752e67d3c
echo "testing cron" >/tmp/crontest
/usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
Seit cron
scheint Notification-Send nicht zu unterstützen (zumindest nicht direkt) gibt es ein anderes Benachrichtigungssystem, das mehr cron
ist freundlich, die ich verwenden kann?
Akzeptierte Antwort:
Sie müssen die DBUS_SESSION_BUS_ADDRESS
festlegen Variable. Standardmäßig hat cron
keinen Zugriff auf die Variable. Um dies zu beheben, platzieren Sie irgendwo das folgende Skript
und rufen Sie es auf, wenn sich der Benutzer anmeldet, zum Beispiel mit awesome und
der run_once
im Wiki erwähnte Funktion. Jede Methode geht, da es
nicht schadet, wenn die Funktion öfter als nötig aufgerufen wird.
#!/bin/sh
touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus
exit 0
Dadurch wird eine Datei erstellt, die die erforderliche Dbus-Umgebungsvariable enthält. Dann importieren Sie in
dem von cron aufgerufenen Skript die Variable, indem Sie das Skript beziehen:
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
Hier ist eine Antwort, die denselben
Mechanismus verwendet.