notify-send
se comunica com o D-Bus, então é necessário um endereço D-Bus para funcionar. O endereço não é preservado quando você chama scripts de inicialização usando service
. Os seguintes comandos recuperam o endereço da sessão do usuário selecionado:
user=username
dbusaddr1="$(
grep -z DBUS_SESSION_BUS_ADDRESS= "/proc/$(pgrep -u "$user" gnome-session | head -n1)/environ" |
sed -e 's/DBUS_SESSION_BUS_ADDRESS=//' )"
Então você pode chamar notify-send
com o endereço. Você precisa alterar o usuário porque ele não funciona em root
:
su "$user" -c "DBUS_SESSION_BUS_ADDRESS=\"$dbusaddr1\" notify-send 'test'"
Você pode encontrar algumas informações adicionais neste artigo: Como escrever regras do udev