Как настроить сервис 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-)
Другие вопросы по тегам