Réutiliser les sessions D-Bus sur les sessions de connexion

20

J'accède à une machine via plusieurs sessions de connexion. Les durées de vie des sessions peuvent ou non se chevaucher. Dans mon cas, ces sessions de connexion sont actuellement toujours via SSH, mais je préférerais également gérer les sessions locales.

J'ai parfois besoin de D-Bus dans ces sessions, et je souhaite partager la même session D-Bus entre ces sessions de connexion, afin d'utiliser GVFS .

Quelle est la manière recommandée de procéder? Je ne veux casser aucune utilisation de D-Bus que je ne connaisse pas. J'ai envisagé d'utiliser

export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))

mais (depuis Ubuntu 12.04) cela ne semble pas correct:

  • cela nécessite une session X, mais mes sessions SSH peuvent ou non transmettre un affichage X, et même celles qui ne sont pas identiques $DISPLAY;
  • si aucun affichage X n'est disponible, se dbus-launchplaint que "Erreur de lancement automatique: l'initialisation X11 a échoué." et ne démarre pas un démon;
  • la dbus-launchpage de manuel indique que «l' --autolaunchoption est considérée comme un détail d'implémentation interne (…). Il n'y a de toute façon aucune raison de l'utiliser en dehors de l'implémentation de libdbus. »

Est dbus-launch-ce qu'un autre outil de la suite D-Bus prend en charge la détection automatique d'une exécution dbus-daemonet la connexion à celle-ci? Les informations nécessaires sont disponibles ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}si D-Bus est démarré avec une connexion X, mais ne semble stocké nulle part si aucune connexion X n'est disponible.

Dois-je bricoler mon propre fichier de session D-Bus? Si je le fais, dois-je utiliser un fichier dans le ~/.dbus/session-busrépertoire? Le chemin est-il /var/lib/dbus/machine-idfiable et portable?

Gilles 'SO- arrête d'être méchant'
la source
1
Cette réponse pourrait faire partie d'une solution pour vous: serverfault.com/questions/405518/…
sdive
1
Je jouais avec DBus il y a 2 ans et tout ce qui me reste de lecture, y compris les sources, était: DBus pourrait être cool, mais il est tellement adapté pour être exécuté une fois en tant qu'instance système et exactement encore une fois pour chaque session utilisateur locale que c'est juste stupide au lieu de cool. Je suppose que vous devez tout faire vous-même. Je l'ai fait, mais j'ai toujours des sessions X, donc c'était un peu plus facile pour moi. Bonne chance.
Bananguin
J'ai vu de belles informations sur la configuration dbus dans le livre BLFS ( Beyond Linux From Scratch ).
Fiisch

Réponses:

6

DBus rend le partage des paramètres du démon dbus un peu délicat.

Pour ma configuration, les paramètres de dbus-launch --sh-syntaxsont enregistrés dans un fichier source par le .bash_rc. L'inconvénient est que, après chaque redémarrage, ce processus est effectué manuellement.

Cependant, il devrait être très simple de rechercher un démon DBus existant. Supposons que le fichier de paramètres se trouve dans $ HOME / .dbus_settings:

need_start=1

if [ -r "$HOME/.dbus_settings" ]
then
    . "$HOME/.dbus_settings"
fi

if [ -n "$DBUS_SESSION_BUS_PID" ]
then
    if kill -0 "$DBUS_SESSION_BUS_PID" 2>/dev/null
    then
        need_start=0  # Found one
    fi
fi

if [ "$need_start" -ne 0 ]
then
    dbus-launch --sh-syntax >"$HOME/.dbus_settings"
    . "$HOME/.dbus_settings"
fi

Sans l' --autolaunchoption, je ne pense pas qu'une connexion X Windows soit nécessaire.

cendre
la source