Проблема с dbus и systemd / user


8

Я настроил systemd так, чтобы использование systemctl start user@meзапускало мои пользовательские сервисы так, как я ожидал, но мой dbus просто не пошел (что мне нужно для PulseAudio).

Есть ли способ проверить dbus или systemd, чтобы выяснить, что я делаю не так?

На данный момент у меня нет идей для вещей, чтобы попробовать. Пожалуйста, дайте мне знать, если есть что-то еще, что я могу предоставить, что может иметь отношение.


Дополнительная информация / попытка разрешения

Я использую Arch Linux, systemd 204-1 и dbus 1.6.10-1

Запуск пользователя через systemd # systemctl start user@meдает мне это:

├─systemd─┬─(sd-pam)
│         ├─mpd───5*[{mpd}]
│         └─pulseaudio─┬─gconf-helper
│                      └─2*[{pulseaudio}]

Начиная systemd --user &вручную, как мой пользователь производит:

├─bash─┬─pstree
│      └─systemd─┬─2*[dbus-daemon]
│                ├─dbus-launch <<< X only
│                ├─gconfd-2    <<< X only
│                ├─mpd───5*[{mpd}]
│                └─pulseaudio─┬─gconf-helper
│                             └─2*[{pulseaudio}]

И выдает следующую ошибку, если я не в X, несмотря на то, что я включил мой пользователь dbus.service:

Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

Ссылки по теме:

  1. /superuser/476379/how-do-i-setup-a-systemd-service-to-be-started-by-a-non-root-user-as-a-user-daem
  2. https://github.com/sofar/user-session-units
  3. https://github.com/grawity/systemd-user-units

Первые два упоминают проблему с dbus, но в ссылке 2 говорится, что проблема исправлена ​​в dbus-1.6.9, поэтому я думаю, что проблема связана с моей реализацией, а не с этой ошибкой.

Я использовал пример пользовательских сервисов по ссылкам 2 и 3.

Ответы:


2

Если DBUS_SESSION_BUS_ADDRESSне установлено для процесса, который пытается использовать D-Bus, по умолчанию этот процесс будет пытаться вызвать dbus-launch с --autolaunchвозможностью запуска новой шины сеанса или найти существующий адрес шины на дисплее X или в файле. в ~/.dbus/session-bus/.

Когда dbus не используется с Xorg, так же, как $ DISPLAY работает на другом сервере, вы можете установить эту переменную среды, чтобы указать dbus, какой сеанс шины использовать:

export DBUS_SESSION_BUS_ADDRESS=""

Для получения дополнительной информации читайте http://dbus.freedesktop.org/doc/dbus-launch.1.html


1

Если не использовать X с dbus,

Вы можете установить эту переменную среды, чтобы указать dbus, какой сеанс шины использовать:

export DBUS_SESSION_BUS_ADDRESS=

0

Вы пытались использовать user-session@.serviceвместо user@.service. У меня были проблемы user@.serviceв начале, (не знаю, какие именно), и после переключения это сработало.

Это во втором репо вы связали. Этот блок устанавливает DISPLAYпеременную в :0. Он не будет работать с несколькими дисплеями, но у меня нормально работает с одним.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.