Wykorzystuj ponownie sesje D-Bus podczas sesji logowania


20

Uzyskuję dostęp do komputera poprzez wiele sesji logowania. Czas życia sesji może się pokrywać lub nie. W moim przypadku te sesje logowania są obecnie zawsze realizowane przez SSH, ale wolałbym również obsługiwać sesje lokalne.

Czasami potrzebuję D-Bus w tych sesjach i chcę udostępniać tę samą sesję D-Bus w tych sesjach logowania, aby móc korzystać z GVFS .

Jaki jest zalecany sposób to zrobić? Nie chcę przerywać korzystania z D-Bus, o którym być może nie wiem. Zastanawiałem się nad użyciem

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

ale (od Ubuntu 12.04) wydaje się to niewłaściwe:

  • wymaga to sesji X, ale moje sesje SSH mogą, ale nie muszą, przekazywać ekran X, a nawet te, które go nie mają $DISPLAY;
  • jeśli ekran X nie jest dostępny, dbus-launchskarży się, że „Błąd automatycznego uruchamiania: X11 nie powiodło się.” i nie uruchamia demona;
  • dbus-launchstrona podręcznika stwierdza, że ​​„ --autolaunchOpcja jest uważana za wewnętrzny szczegół implementacji (…). W każdym razie nie ma żadnego powodu, aby używać go poza implementacją libdbus. ”

Czy dbus-launchczy inne narzędzie w pakiecie D-Bus obsługuje automatyczne wykrywanie uruchomionego urządzenia dbus-daemoni łączenie się z nim? Niezbędne informacje są dostępne, ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}jeśli D-Bus jest uruchamiany z połączeniem X, ale wydaje się, że nie jest nigdzie zapisany, jeśli nie jest dostępne połączenie X.

Czy powinienem utworzyć własny plik sesji D-Bus? Jeśli tak, czy powinienem użyć pliku w ~/.dbus/session-buskatalogu? Czy ścieżka jest /var/lib/dbus/machine-idniezawodna i przenośna?


1
Ta odpowiedź może stanowić część rozwiązania dla Ciebie: serverfault.com/questions/405518/…
sdive,

1
Dużo majstrowałem przy DBusie 2 lata temu i wszystko, co pozostało mi w pamięci po częstym czytaniu, w tym źródła: DBus może być fajny, ale jest tak dostosowany, że można go uruchomić raz jako instancję systemu i dokładnie jeszcze raz dla każdej lokalnej sesji użytkownika jest to po prostu głupie, a nie fajne. Domyślam się, że musisz zrobić wszystko sam. Tak, ale zawsze mam sesje X, więc było mi trochę łatwiej. Powodzenia.
Bananguin,

Widziałem kilka fajnych informacji na temat konfiguracji dbus w książce BLFS ( Beyond Linux From Scratch ).
Fiisch

Odpowiedzi:


6

DBus sprawia, że ​​udostępnianie ustawień dla demona dbus jest trochę trudne.

Dla mojej konfiguracji ustawienia z dbus-launch --sh-syntaxsą zapisywane w pliku źródłowym .bash_rc. Wadą tego jest to, że po każdym ponownym uruchomieniu proces ten jest wykonywany ręcznie.

Jednak sprawdzenie, czy istnieje demon DBus, powinno być bardzo proste. Załóżmy, że plik ustawień znajduje się w $ 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

Bez tej --autolaunchopcji nie sądzę, aby połączenie z X-Window było potrzebne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.