Problemas com dbus e systemd / user


8

Eu configurei o systemd para que o uso systemctl start user@meinicie meus serviços do usuário conforme o esperado, mas o meu dbus não funcionará (o que eu preciso para o PulseAudio).

Existe alguma maneira de verificar o dbus ou systemd para descobrir o que estou fazendo de errado?

Neste ponto, estou sem idéias para o que tentar. Informe-me se houver outra coisa que eu possa fornecer que possa ser relevante.


Informações adicionais / tentativa de resolução

Estou usando o Arch Linux, systemd 204-1 e dbus 1.6.10-1

Iniciar o systemd do usuário # systemctl start user@meme fornece o seguinte:

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

Iniciando systemd --user &manualmente conforme meu usuário produz:

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

E cospe o seguinte erro se eu não estiver no X, apesar de habilitar meu usuário 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

Links Relacionados:

  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

Os dois primeiros mencionam um problema com o dbus, mas no link 2 ele diz que o problema foi corrigido no dbus-1.6.9, então acho que o problema está na minha implementação e não no bug.

Usei serviços de exemplo de usuário dos links 2 e 3.

Respostas:


2

Se DBUS_SESSION_BUS_ADDRESSnão estiver definido para um processo que tenta usar o D-Bus, por padrão, esse processo tentará chamar o dbus-launch com a --autolaunchopção de iniciar um novo barramento de sessão ou encontrar o endereço do barramento existente no visor X ou em um arquivo no ~/.dbus/session-bus/.

Quando o dbus não está sendo usado com o Xorg, da mesma maneira que $ DISPLAY trabalha para usar um servidor diferente, você pode definir essa variável de ambiente para informar ao dbus qual sessão de barramento usar:

export DBUS_SESSION_BUS_ADDRESS=""

Para mais informações, leia http://dbus.freedesktop.org/doc/dbus-launch.1.html


1

Se não estiver usando X com dbus,

Você pode definir esta variável de ambiente para informar ao dbus qual sessão de barramento usar:

export DBUS_SESSION_BUS_ADDRESS=

0

Você já tentou usar em user-session@.servicevez de user@.service. Eu tive problemas com user@.serviceno começo (não sei mais exatamente qual) e depois de mudar, funcionou.

É no segundo repo que você vinculou. Esta unidade define a DISPLAYvariável para :0. Não funciona com vários monitores, mas funciona bem para mim com um.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.