In Ubuntu 14.04 l'esportazione del display non ha funzionato per me. Di seguito è riportato uno script cron che sto utilizzando per spegnere una macchina virtuale quando lo stato della batteria di un laptop diventa troppo basso. L'impostazione della riga DBUS_SESSION_BUS_ADDRESS è la modifica che finalmente ha fatto funzionare correttamente gli avvisi.
#!/bin/bash
# if virtual machine is running, monitor power consumption
if pgrep -x vmware-vmx; then
bat_path="/sys/class/power_supply/BAT0/"
if [ -e "$bat_path" ]; then
bat_status=$(cat $bat_path/status)
if [ "$bat_status" == "Discharging" ]; then
bat_current=$(cat $bat_path/capacity)
# halt vm if critical; notify if low
if [ "$bat_current" -lt 10 ]; then
/path/to/vm/shutdown/script
echo "$( date +%Y.%m.%d_%T )" >> "/home/user/Desktop/VM Halt Low Battery"
elif [ "$bat_current" -lt 15 ]; then
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
notify-send -i "/usr/share/icons/ubuntu-mono-light/status/24/battery-caution.svg" "Virtual machine will halt when battery falls below 10% charge."
fi
fi
fi
fi
exit 0
La riga pertinente è qui:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
Ho trovato la soluzione qui:https://askubuntu.com/a/346580/255814
Solo questo funziona per me (Xubuntu)
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME xfce4-session)/environ)"; notify-send "hello world"
Se sei in ambiente gnome, devi cambiare xfce4-session
a gnome-session
riferimento:https://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab
Ho trovato la risposta:
$ crontab -l
# m h dom mon dow command
* * * * * export DISPLAY=:0.0 && export XAUTHORITY=/home/ravi/.Xauthority && sudo -u ravi /usr/bin/notify-send Hey "How are you"
Uso i3 su Ubuntu 18.04. Il mio modo per risolverlo è:
* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"
Modifica 2020:lo uso ancora su Ubuntu 20.04.