ใช้เซสชัน D-Bus ซ้ำระหว่างเซสชันการเข้าสู่ระบบ


20

ฉันเข้าถึงเครื่องผ่านการเข้าสู่ระบบหลายครั้ง อายุการใช้งานของเซสชันอาจหรือไม่ทับซ้อนกัน ในกรณีของฉันเซสชันการลงชื่อเข้าใช้เหล่านี้มักจะผ่าน SSH เสมอ แต่ฉันต้องการจัดการเซสชันในท้องถิ่นด้วย

บางครั้งผมต้อง D-Bus ในการประชุมเหล่านี้และฉันต้องการแบ่งปันเซสชั่น D-Bus เดียวกันในการประชุมเข้าสู่ระบบเหล่านี้เพื่อใช้ GVFS

วิธีที่แนะนำให้ทำคืออะไร? ฉันไม่ต้องการทำลายการใช้งาน D-Bus ใด ๆ ที่ฉันอาจไม่ทราบ ฉันถือว่าใช้แล้ว

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

แต่ (ตั้งแต่ Ubuntu 12.04) สิ่งนี้ดูไม่ถูกต้อง:

  • นี้ต้องเซสชั่น X แต่การประชุม SSH ของฉันอาจจะหรืออาจไม่ได้รับการส่งต่อการแสดงผล X, และแม้กระทั่งคนที่ไม่ได้มีเหมือนกัน$DISPLAY;
  • หากไม่มีจอแสดงผล X ให้ใช้งานdbus-launchบ่นว่า“ ข้อผิดพลาดอัตโนมัติ: การเริ่มต้น X11 ล้มเหลว” และไม่เริ่มดีมอน
  • dbus-launchรัฐหน้าคนว่า“ --autolaunchตัวเลือกที่มีการพิจารณารายละเอียดการดำเนินงานภายใน ( ... ) ไม่มีเหตุผลจริงที่จะใช้นอกเหนือจากการใช้งาน libdbus แต่อย่างใด”

ไม่dbus-launchหรือเครื่องมืออื่นในการสนับสนุนชุด D-Bus โดยอัตโนมัติการตรวจสอบการทำงานdbus-daemonและการเชื่อมต่อไปได้หรือไม่ ข้อมูลที่จำเป็นอยู่ในนั้น~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}หาก D-Bus เริ่มต้นด้วยการเชื่อมต่อ X แต่ดูเหมือนจะไม่ถูกจัดเก็บไว้ที่ใด ๆ หากไม่มีการเชื่อมต่อ X

ฉันควร cobble ไฟล์เซสชั่น D-Bus ของตัวเอง? ถ้าเป็นเช่นนั้นฉันควรใช้ไฟล์ใน~/.dbus/session-busไดเรกทอรีหรือไม่? เส้นทางนั้น/var/lib/dbus/machine-idเชื่อถือได้และพกพาได้หรือไม่?


1
คำตอบนี้อาจเป็นส่วนหนึ่งของโซลูชันสำหรับคุณ: serverfault.com/questions/405518/…
sdive

1
ฉันเล่นซอกับ DBus มากเมื่อ 2 ปีที่แล้วและสิ่งที่เหลืออยู่ในความทรงจำของฉันจากการอ่านหนังสือมากมายรวมถึงแหล่งที่มาคือ: DBus อาจจะเท่ สำหรับแต่ละเซสชั่นผู้ใช้ในท้องถิ่นว่ามันเป็นเพียงความโง่แทนความเท่ห์ ฉันเดาว่าคุณต้องทำทุกอย่างด้วยตัวเอง ฉันทำ แต่ฉันมีช่วงเวลา X เสมอดังนั้นมันจึงง่ายขึ้นเล็กน้อยสำหรับฉัน โชคดี.
Bananguin

ฉันเห็นข้อมูลที่ดีเกี่ยวกับการกำหนดค่า dbusในหนังสือ BLFS ( นอกเหนือจาก Linux ตั้งแต่เริ่มต้น )
Fiisch

คำตอบ:


6

DBus ทำให้การแบ่งปันการตั้งค่าสำหรับ dbus daemon นั้นยุ่งยากเล็กน้อย

สำหรับการตั้งค่าของฉัน, การตั้งค่าจากจะถูกบันทึกไว้ในแฟ้มที่เป็นแหล่งที่มาโดยที่dbus-launch --sh-syntax .bash_rcข้อเสียของการทำเช่นนี้คือหลังจากดำเนินการรีบูตทุกครั้งด้วยตนเอง

อย่างไรก็ตามควรง่ายมากที่จะตรวจสอบ DBus daemon ที่มีอยู่ สมมติว่าไฟล์การตั้งค่าอยู่ที่ $ 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

หากไม่มี--autolaunchตัวเลือกฉันไม่เชื่อว่าจำเป็นต้องมีการเชื่อมต่อ X windows

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.