如何使通知发送在 /etc/init.d/a_script 上工作

如何使通知发送在 /etc/init.d/a_script 上工作

当我notify-send 'test'在 /etc/init.d/a_script 中写入时,我看不到任何通知。请参阅以下代码:

#!/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

我的问题是:如何使上述代码简短通知sudo service this_script start

答案1

notify-send通过 D-Bus 进行通信,因此需要 D-Bus 地址才能工作。使用 调用启动脚本时不会保留该地址service。以下命令检索所选用户会话的地址:

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=//' )"

然后您就可以notify-send使用该地址进行呼叫。您必须更改用户,因为它在以下情况下不起作用root

su "$user" -c "DBUS_SESSION_BUS_ADDRESS=\"$dbusaddr1\" notify-send 'test'"

您可以在本文中找到一些其他信息:如何编写 udev 规则

相关内容