D-Bus-Sitzungen über Anmeldesitzungen hinweg wiederverwenden

20

Ich greife über mehrere Anmeldesitzungen auf einen Computer zu. Die Lebensdauern der Sitzungen können sich überschneiden oder nicht. In meinem Fall sind diese Anmeldesitzungen derzeit immer über SSH, aber ich würde es vorziehen, auch lokale Sitzungen abzuwickeln.

In diesen Sitzungen wird manchmal D-Bus benötigt, und ich möchte dieselbe D-Bus-Sitzung für alle Anmeldesitzungen freigeben , um GVFS zu verwenden .

Was ist der empfohlene Weg, um dies zu tun? Ich möchte keine Verwendung von D-Bus unterbrechen, die mir möglicherweise nicht bekannt ist. Ich habe darüber nachgedacht

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

aber (ab Ubuntu 12.04) scheint das nicht richtig zu sein:

  • Dies erfordert eine X-Sitzung, aber meine SSH-Sitzungen leiten möglicherweise eine X-Anzeige weiter oder nicht, und selbst diejenigen, die nicht dieselbe haben $DISPLAY.
  • Wenn keine X-Anzeige verfügbar ist dbus-launch, wird "Autolaunch-Fehler: X11-Initialisierung fehlgeschlagen" angezeigt und kein Dämon gestartet.
  • Auf der dbus-launchManpage heißt es: „Die --autolaunchOption wird als internes Implementierungsdetail betrachtet (…). Es gibt keinen wirklichen Grund, es außerhalb der libdbus-Implementierung zu verwenden. “

Does dbus-launchoder ein anderes Werkzeug in der D-Bus - Suite Unterstützung Erfassen automatisch einen Lauf dbus-daemonund eine Verbindung zu ihm? Die erforderlichen Informationen werden angezeigt, ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}wenn D-Bus mit einer X-Verbindung gestartet wird. Sie werden jedoch anscheinend nirgends gespeichert, wenn keine X-Verbindung verfügbar ist.

Soll ich meine eigene D-Bus-Sitzungsdatei erstellen? Sollte ich in diesem Fall eine Datei im ~/.dbus/session-busVerzeichnis verwenden? Ist der Pfad /var/lib/dbus/machine-idzuverlässig und portabel?

Gilles 'SO - hör auf böse zu sein'
quelle
1
Diese Antwort ist möglicherweise Teil einer Lösung für Sie: serverfault.com/questions/405518/…
sdive
1
Ich habe vor 2 Jahren viel mit DBus herumgespielt, und alles, was mir beim Lesen in Erinnerung geblieben ist, einschließlich der Quellen, war: DBus könnte cool sein, ist aber so sehr darauf zugeschnitten, einmal als Systeminstanz und genau noch einmal ausgeführt zu werden für jede lokale Benutzersitzung ist es einfach nur dumm statt cool. Ich vermute, Sie müssen alles selbst machen. Ich habe es getan, aber ich habe immer X-Sitzungen, daher war es für mich ein bisschen einfacher. Viel Glück.
Bananguin
Ich habe im BLFS-Buch ( Beyond Linux From Scratch ) einige nette Informationen zur Dbus-Konfiguration gesehen .
Fiisch

Antworten:

6

DBus macht das Teilen der Einstellungen für den dbus-Daemon etwas schwierig.

Für mein Setup werden die Einstellungen von dbus-launch --sh-syntaxin einer Datei gespeichert, die von der Quelle stammt .bash_rc. Der Nachteil dabei ist, dass dieser Prozess nach jedem Neustart manuell ausgeführt wird.

Es sollte jedoch sehr einfach sein, nach einem vorhandenen DBus-Dämon zu suchen. Angenommen, die Einstellungsdatei befindet sich unter $ 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

Ohne die --autolaunchOption glaube ich nicht, dass eine X-Windows-Verbindung benötigt wird.

Asche
quelle