当我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 规则