Reutilice las sesiones de D-Bus en las sesiones de inicio de sesión

20

Accedo a una máquina a través de múltiples sesiones de inicio de sesión. Las vidas de las sesiones pueden superponerse o no. En mi caso, estas sesiones de inicio de sesión siempre se realizan a través de SSH, pero también preferiría manejar sesiones locales.

A veces necesito D-Bus en estas sesiones, y quiero compartir la misma sesión de D-Bus en estas sesiones de inicio de sesión, para poder usar GVFS .

cual es la manera recomendada para hacer esto? No quiero interrumpir el uso de D-Bus que no conozco. He considerado usar

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

pero (a partir de Ubuntu 12.04) esto no parece correcto:

  • esto requiere una sesión X, pero mis sesiones SSH pueden o no reenviar una pantalla X, e incluso las que no tienen la misma $DISPLAY;
  • si no hay una pantalla X disponible, se dbus-launchqueja de "Error de inicio automático: error de inicialización X11" y no inicia un demonio;
  • la dbus-launchpágina del manual dice que "La --autolaunchopción se considera un detalle de implementación interna (...). De todos modos, no hay ninguna razón real para usarlo fuera de la implementación de libdbus ".

¿Es dbus-launchcompatible alguna otra herramienta de la suite D-Bus para detectar automáticamente un funcionamiento dbus-daemony conectarse a él? La información necesaria se encuentra ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}si D-Bus se inicia con una conexión X, pero no parece almacenarse en ningún lado si no hay una conexión X disponible.

¿Debo improvisar mi propio archivo de sesión de D-Bus? Si lo hago, ¿debo usar un archivo en el ~/.dbus/session-busdirectorio? ¿Es el camino /var/lib/dbus/machine-idconfiable y portátil?

Gilles 'SO- deja de ser malvado'
fuente
1
Esta respuesta podría ser parte de una solución para usted: serverfault.com/questions/405518/…
sdive
1
Estuve jugando con DBus mucho hace 2 años y todo lo que queda en mi memoria después de leer mucho, incluidas las fuentes era: DBus podría ser genial, pero está diseñado para ejecutarse una vez como una instancia del sistema y exactamente una vez más para cada sesión de usuario local es simplemente estúpido en lugar de genial. Supongo que tienes que hacer todo tú mismo. Lo hice, pero siempre tengo X sesiones, así que fue un poco más fácil para mí. Buena suerte.
Bananguin
He visto buena información sobre la configuración de dbus en el libro BLFS ( Beyond Linux From Scratch ).
Fiisch

Respuestas:

6

DBus hace que compartir la configuración del dbus daemon sea un poco complicado.

Para mi configuración, la configuración de dbus-launch --sh-syntaxse guarda en un archivo que es fuente de .bash_rc. La desventaja de esto es que, después de cada reinicio, ese proceso se realiza manualmente.

Sin embargo, debería ser muy simple verificar si hay un demonio DBus existente. Digamos que el archivo de configuración está en $ 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

Sin la --autolaunchopción, no creo que se necesite una conexión X Windows.

ceniza
fuente