J'utilise Arch Linux avec KDE/Awesome WM. J'essaie d'obtenirnotify-send
travailler avec cron
.
J'ai essayé de régler DISPLAY
/XAUTHORITY
variables et en exécutant notify-send
avec "sudo -u", le tout sans résultat.
Je peux appeler notify-send de manière interactive à partir de la session et recevoir des notifications.
FWIW, le travail cron fonctionne correctement, ce que j'ai vérifié en faisant écho à un fichier temporaire. C'est juste le "notifier-envoyer" qui ne fonctionne pas.
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] ~]$
Comme vous pouvez le voir, l'écho avant et après l'envoi de notification a fonctionné.
J'ai également essayé de définir DISPLAY=:0.0
MISE À JOUR :
J'ai cherché un peu plus et j'ai trouvé que DBUS_SESSION_BUS_ADDRESS doit être défini. Et après avoir codé en dur cela en utilisant la valeur que j'ai obtenue de ma session interactive, le tout petit message "bonjour" a commencé à apparaître à l'écran toutes les minutes !
Mais le hic, c'est que cette variable n'est pas permanente selon ce message, donc je vais devoir essayer la solution de canal nommé suggérée ici.
[[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
Depuis cron
ne semble pas prendre en charge la notification d'envoi (du moins pas directement) existe-t-il un autre système de notification qui est plus cron
amical que je peux utiliser ?
Réponse acceptée :
Vous devez définir le DBUS_SESSION_BUS_ADDRESS
variable. Par défaut, cron n'a
pas accès à la variable. Pour remédier à cela, placez le script suivant
quelque part et appelez-le lorsque l'utilisateur se connecte, par exemple en utilisant awesome et
le run_once
fonction mentionnée sur le wiki. N'importe quelle méthode fera l'affaire, car elle
ne nuit pas si la fonction est appelée plus souvent que nécessaire.
#!/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
Cela crée un fichier contenant la variable d'environnement Dbus requise. Puis dans
le script appelé par cron vous importez la variable en sourçant le script :
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
Voici une réponse qui utilise le même
mécanisme.