GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser Notify-send avec Cron ?

J'utilise Arch Linux avec KDE/Awesome WM. J'essaie d'obtenir
notify-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.

En relation :Comment générer des enregistrements SSHFP ?
Linux
  1. Utiliser les tâches CRON pour visiter l'url ?

  2. Cron avec notification-envoi

  3. Utilisation de sed pour diviser une chaîne avec un délimiteur

  4. Utiliser SDL2 sous Linux avec g++ ?

  5. Utilisation d'une liste d'utilisateurs autorisés avec VSFTPD

Planifier des tâches Cron avec Crontab

Planification avec cron &At

Comprendre Crontab sous Linux avec des exemples

Planifier des travaux sous Linux avec la commande 'at'

Supprimer les fichiers journaux à l'aide de la tâche cron

Comment remplir un fichier avec FF en utilisant dd ?