Как настроить сервис systemd, использующий D-Bus?
Я написал скрипт, который отправляет уведомления. Скрипт вызывает notify-send
сделать это, и notify-send
для работы требуется переменная окружения D-Bus: DBUS_SESSION_BUS_ADDRESS
,
Когда я запускаю свой скрипт из терминала, он прекрасно генерирует уведомления. Но я использую systemd для запуска моего скрипта всякий раз, когда я вхожу в систему, и когда systemd запускает скрипт, он больше не производит уведомлений. Это потому, что systemd запускает мой скрипт с чистой средой - и это означает, что переменная окружения D-Bus отсутствует.
В Arch Linux я смог добавить это в файл модуля скрипта:
[Install]
WantedBy=default.target
Requires=dbus-setenv.service
С этим конфигом systemd запустил мой скрипт, когда D-Bus был готов, и передал DBUS_SESSION_BUS_ADDRESS
Переменная к моему сценарию.
Сейчас я нахожусь на Ubuntu, но эта конфигурация, похоже, не работает. Мне интересно: каков рекомендуемый способ сделать это под Ubuntu?
1 ответ
Слишком долго для комментария... Я использую это в другом скрипте, чтобы изменить обои с cron
:
#!/bin/bash -e
user=$(whoami)
fl=$(find /proc -maxdepth 2 -user "$user" -name environ -print -quit)
for i in {1..5}
do
fl=$(find /proc -maxdepth 2 -user "$user" -name environ -newer "$fl" -print -quit)
done
export DBUS_SESSION_BUS_ADDRESS
DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS "$fl" | cut -d= -f2-)