Sto usando Arch Linux con KDE/Awesome WM. Sto cercando di ottenerenotify-send
per lavorare con cron
.
Ho provato a impostare DISPLAY
/XAUTHORITY
variabili ed eseguendo notify-send
con “sudo -u”, tutto senza risultato.
Sono in grado di chiamare notifica-invia in modo interattivo dalla sessione e ricevere notifiche.
FWIW, il lavoro cron sta funzionando correttamente, cosa che ho verificato facendo eco a un file temporaneo. È solo la "notifica-invio" che non funziona.
Codice:
[[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] ~]$
Come puoi vedere, l'eco prima e dopo l'invio della notifica ha funzionato.
Inoltre ho provato a impostare DISPLAY=:0.0
AGGIORNAMENTO:
Ho cercato un po' di più e ho scoperto che DBUS_SESSION_BUS_ADDRESS deve essere impostato. E dopo averlo codificato usando il valore che ho ottenuto dalla mia sessione interattiva, il minuscolo messaggio di "ciao" ha iniziato a comparire sullo schermo ogni minuto!
Ma il problema è che questa variabile non è permanente per quel post, quindi proverò la soluzione della named pipe suggerita lì.
[[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
Da cron
non sembra supportare l'invio di notifiche (almeno non direttamente) c'è qualche altro sistema di notifica che è più cron
amichevole che posso usare?
Risposta accettata:
Devi impostare il DBUS_SESSION_BUS_ADDRESS
variabile. Per impostazione predefinita, cron
non ha accesso alla variabile. Per rimediare, metti il seguente script
da qualche parte e chiamalo quando l'utente effettua il login, ad esempio usando awesome e
il run_once
funzione menzionata sul wiki. Qualsiasi metodo andrà bene, poiché
non danneggia se la funzione viene chiamata più spesso del necessario.
#!/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
Questo crea un file contenente la variabile di ambiente Dbus richiesta. Quindi in
lo script chiamato da cron importi la variabile cercando lo script:
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
Ecco una risposta che utilizza lo stesso meccanismo
.