Gunakan kembali sesi D-Bus di seluruh sesi login


20

Saya mengakses mesin melalui beberapa sesi login. Masa hidup sesi mungkin atau mungkin tidak tumpang tindih. Dalam kasus saya, sesi login ini saat ini selalu melebihi SSH, tetapi saya lebih suka menangani sesi lokal juga.

Saya kadang-kadang membutuhkan D-Bus dalam sesi ini, dan saya ingin berbagi sesi D-Bus yang sama di seluruh sesi login ini, untuk menggunakan GVFS .

Apa cara yang disarankan untuk melakukan ini? Saya tidak ingin menghentikan penggunaan D-Bus yang mungkin tidak saya sadari. Saya sudah mempertimbangkan menggunakan

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

tetapi (pada Ubuntu 12.04) ini sepertinya tidak benar:

  • ini memerlukan sesi X, tetapi sesi SSH saya mungkin atau mungkin tidak meneruskan tampilan X, dan bahkan yang tidak memiliki yang sama $DISPLAY;
  • jika tidak ada tampilan X yang tersedia, dbus-launchkomplain bahwa “Kesalahan pelepasan otomatis: inisialisasi X11 gagal.” dan tidak memulai daemon;
  • yang dbus-launchmenyatakan halaman manual bahwa” --autolaunchpilihan dianggap sebagai detail implementasi internal yang (...). Tidak ada alasan nyata untuk menggunakannya di luar implementasi libdbus. ”

Apakah dbus-launchatau alat lain dalam D-Bus suite mendukung secara otomatis mendeteksi running dbus-daemondan menghubungkannya? Informasi yang diperlukan adalah ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}jika D-Bus dimulai dengan koneksi X, tetapi tampaknya tidak disimpan di mana pun jika tidak ada koneksi X tersedia.

Haruskah saya membuat file sesi D-Bus saya sendiri? Jika saya melakukannya, haruskah saya menggunakan file di ~/.dbus/session-busdirektori? Apakah jalurnya /var/lib/dbus/machine-iddapat diandalkan dan portabel?


1
Jawaban ini mungkin menjadi bagian dari solusi untuk Anda: serverfault.com/questions/405518/…
sdive

1
Saya mengutak-atik DBus banyak 2 tahun yang lalu dan semua yang tersisa dalam ingatan saya dari membaca banyak, termasuk sumber-sumbernya adalah: DBus bisa menjadi keren, tetapi sangat disesuaikan untuk dijalankan sekali sebagai contoh sistem dan tepat sekali lagi untuk setiap sesi pengguna lokal itu hanya bodoh, bukan keren. Dugaan saya adalah Anda harus melakukan semuanya sendiri. Saya melakukannya, tetapi saya selalu memiliki sesi X sehingga sedikit lebih mudah bagi saya. Semoga berhasil.
Bananguin

Saya telah melihat beberapa info bagus tentang konfigurasi dbus di buku BLFS ( Beyond Linux From Scratch ).
Fiisch

Jawaban:


6

DBus membuat berbagi pengaturan untuk dabus dbus sedikit rumit.

Untuk pengaturan saya, pengaturan dari dbus-launch --sh-syntaxdisimpan dalam file yang sumbernya oleh .bash_rc. Kelemahan dari ini adalah, setelah setiap reboot, proses itu dilakukan secara manual.

Namun, harus sangat sederhana untuk memeriksa daemon DBus yang ada. Katakanlah file pengaturan adalah di $ 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

Tanpa --autolaunchopsi, saya tidak percaya koneksi X windows diperlukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.