Riutilizzare le sessioni D-Bus tra le sessioni di accesso


20

Accedo a una macchina attraverso più sessioni di accesso. La durata delle sessioni potrebbe sovrapporsi o meno. Nel mio caso, queste sessioni di accesso sono attualmente sempre su SSH, ma preferirei gestire anche le sessioni locali.

A volte ho bisogno di D-Bus in queste sessioni e voglio condividere la stessa sessione D-Bus attraverso queste sessioni di accesso, al fine di utilizzare GVFS .

Qual è il modo consigliato per farlo? Non voglio interrompere alcun uso di D-Bus di cui potrei non essere a conoscenza. Ho considerato l'utilizzo

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

ma (a partire da Ubuntu 12.04) questo non sembra giusto:

  • ciò richiede una sessione X, ma le mie sessioni SSH potrebbero o meno inoltrare un display X e anche quelle che non hanno lo stesso $DISPLAY;
  • se non è disponibile alcuna visualizzazione X, si dbus-launchlamenta che "Errore di avvio automatico: inizializzazione X11 non riuscita." e non avvia un demone;
  • la dbus-launchpagina man afferma che “L' --autolaunchopzione è considerata un dettaglio di implementazione interno (...). Non c'è alcun motivo reale per usarlo al di fuori dell'implementazione di libdbus ”.

Fa dbus-launcho un altro strumento nella suite supportano D-Bus rilevare automaticamente una corsa dbus-daemone il collegamento ad esso? Le informazioni necessarie sono disponibili ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}se D-Bus viene avviato con una connessione X, ma non sembra essere memorizzato da nessuna parte se non è disponibile alcuna connessione X.

Devo inserire il mio file di sessione D-Bus? Se lo faccio, dovrei usare un file nella ~/.dbus/session-busdirectory? Il percorso è /var/lib/dbus/machine-idaffidabile e portatile?


1
Questa risposta potrebbe far parte di una soluzione per te: serverfault.com/questions/405518/…
sdive

1
Stavo armeggiando con DBus 2 anni fa e tutto ciò che mi è rimasto nella memoria dalla lettura di molti, comprese le fonti era: DBus potrebbe essere bello, ma è così su misura per essere eseguito una volta come istanza di sistema e esattamente ancora una volta per ogni sessione utente locale è solo stupido invece che figo. Suppongo che tu debba fare tutto da solo. L'ho fatto, ma ho sempre avuto sessioni X, quindi è stato un po 'più facile per me. In bocca al lupo.
Bananguin,

Ho visto alcune belle informazioni sulla configurazione di dbus nel libro BLFS ( Beyond Linux From Scratch ).
Fiisch

Risposte:


6

DBus rende la condivisione delle impostazioni per il demone dbus un po 'complicata.

Per la mia configurazione, le impostazioni da dbus-launch --sh-syntaxvengono salvate in un file che è sorgente da .bash_rc. L'aspetto negativo di questo è che, dopo ogni riavvio, quel processo viene eseguito manualmente.

Tuttavia, dovrebbe essere molto semplice controllare un demone DBus esistente. Supponiamo che il file delle impostazioni sia su $ 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

Senza l' --autolaunchopzione, non credo che sia necessaria una connessione X Windows.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.