GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden Sie Notify-Send mit Cron?

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.

Verwandte:Wie generiert man SSHFP-Einträge?
Linux
  1. Farben mit printf verwenden

  2. Verwendung von awk mit Spaltenwertbedingungen

  3. Cron mit Notify-Send

  4. Verwenden von sed zum Teilen einer Zeichenfolge mit einem Trennzeichen

  5. Protokolldateien mit Cron-Job entfernen

Planen von Cron-Jobs mit Crontab

Terminplanung mit cron &At

Crontab in Linux mit Beispielen verstehen

Planen Sie Jobs in Linux mit dem Befehl 'at'

Verwenden Sie CRON-Jobs, um die URL zu besuchen?

Wie fülle ich eine Datei mit FF mit dd auf?