Como fazer o trabalho de notificação-envio em /etc/init.d/a_script

1

quando eu escrevo notify-send 'test' em /etc/init.d/a_script, não consigo ver nenhuma notificação. veja o seguinte código:

#!/bin/bash

### BEGIN INIT INFO
# Provides:    someone
# Required-Start:  $remote_fs $syslog
# Required-Stop:  $remote_fs $syslog
# Default-Start:  2 3 4 5
# Default-Stop:   0 6
# Short-Description:  OpenBSD Secure Shell sv
### END INIT INFO
## Fill in name of program here.

case "$1" in
start)
notify-send 'test'
exit 0
;;

stop)
exit 0
;;
reload|restart|force-reload)
exit 0
;;
restart_for_debug)
exit 0
;;
**)
echo "usg: $0 {start|stop|restart|restart_for_debug}" 1>&2
exit 1
;;
esac

minha pergunta é: como fazer o código acima ser notificado com sudo service this_script start

    
por zizhuo64062kw 08.11.2014 / 04:44

1 resposta

0

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

    
por 08.11.2014 / 09:42