1

Когда я пишу 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 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .