Problème avec dbus et systemd / user


8

J'ai configuré systemd pour que l'utilisation systemctl start user@medémarre mes services utilisateur comme je m'y attendais, mais mon dbus ne fonctionnera pas (dont j'ai besoin pour PulseAudio).

Existe-t-il un moyen de vérifier dbus ou systemd pour comprendre ce que je fais mal?

À ce stade, je n'ai plus d'idées de choses à essayer. Veuillez me faire savoir s'il y a autre chose que je peux fournir qui pourrait être pertinent.


Informations supplémentaires / tentative de résolution

J'utilise Arch Linux, systemd 204-1 et dbus 1.6.10-1

Le démarrage de systemd par l'utilisateur # systemctl start user@meme donne ceci:

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

Démarrage systemd --user &manuel lorsque mon utilisateur produit:

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

Et crache l'erreur suivante si je ne suis pas dans X, malgré le fait que j'ai activé mon utilisateur 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

Liens connexes:

  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

Les deux premiers mentionnent un problème avec dbus, mais au lien 2, il est dit que le problème est résolu dans dbus-1.6.9, donc je pense que le problème vient de mon implémentation plutôt que de ce bogue.

J'ai utilisé des exemples de services utilisateur des liens 2 et 3.

Réponses:


2

Si DBUS_SESSION_BUS_ADDRESSn'est pas défini pour un processus qui essaie d'utiliser D-Bus, par défaut, ce processus tentera d'appeler dbus-launch avec l' --autolaunchoption de démarrer un nouveau bus de session ou de trouver l'adresse de bus existante sur l'affichage X ou dans un fichier dans ~/.dbus/session-bus/.

Lorsque dbus n'est pas utilisé avec Xorg, de la même manière que $ DISPLAY fonctionne pour utiliser un serveur différent, vous pouvez définir cette variable d'environnement afin de dire à dbus quelle session de bus utiliser:

export DBUS_SESSION_BUS_ADDRESS=""

Pour plus d'informations, consultez http://dbus.freedesktop.org/doc/dbus-launch.1.html


1

Si vous n'utilisez pas X avec dbus,

Vous pouvez définir cette variable d'environnement afin d'indiquer à dbus la session de bus à utiliser:

export DBUS_SESSION_BUS_ADDRESS=

0

Avez-vous essayé d'utiliser user-session@.serviceau lieu de user@.service. J'ai eu des problèmes user@.serviceau début, (je ne sais plus exactement) et après le changement, cela a fonctionné.

C'est dans le deuxième dépôt que vous avez lié. Cette unité définit la DISPLAYvariable sur :0. Cela ne fonctionnera pas avec plusieurs écrans, mais fonctionne bien pour moi avec un seul.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.