Sử dụng lại các phiên D-Bus qua các phiên đăng nhập


20

Tôi truy cập vào một máy thông qua nhiều phiên đăng nhập. Thời gian sống của các phiên có thể hoặc không thể trùng nhau. Trong trường hợp của tôi, các phiên đăng nhập này hiện luôn luôn qua SSH, nhưng tôi cũng muốn xử lý các phiên cục bộ.

Đôi khi tôi cần D-Bus trong các phiên này và tôi muốn chia sẻ cùng một phiên D-Bus qua các phiên đăng nhập này, để sử dụng GVFS .

Cách được đề nghị để làm điều này là gì? Tôi không muốn phá vỡ bất kỳ việc sử dụng D-Bus nào mà tôi có thể không biết. Tôi đã cân nhắc sử dụng

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

nhưng (kể từ Ubuntu 12.04) điều này có vẻ không đúng:

  • điều này đòi hỏi một phiên X, nhưng các phiên SSH của tôi có thể hoặc không thể chuyển tiếp màn hình X và ngay cả những phiên không giống nhau $DISPLAY;
  • nếu không có màn hình X nào thì dbus-launchphàn nàn rằng lỗi Autolaunch: Khởi tạo X11 không thành công. Rằng và không khởi động trình nền;
  • các dbus-launchtiểu bang trang người đàn ông rằng “Các --autolaunchtùy chọn được coi là một chi tiết thực hiện nội bộ (...). Dù sao đi nữa, không có lý do thực sự để sử dụng nó ngoài việc triển khai libdbus.

dbus-launchhay một công cụ khác trong bộ D-Bus hỗ trợ tự động phát hiện hoạt động dbus-daemonvà kết nối với nó không? Thông tin cần thiết là ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}nếu D-Bus được khởi động với kết nối X, nhưng dường như không được lưu trữ ở bất cứ đâu nếu không có kết nối X.

Tôi có nên tự lắp đặt tệp phiên D-Bus của mình không? Nếu tôi làm, tôi có nên sử dụng một tập tin trong ~/.dbus/session-busthư mục? Là con đường /var/lib/dbus/machine-idđáng tin cậy và di động?


1
Câu trả lời này có thể là một phần của giải pháp dành cho bạn: serverfault.com/questions
405518 / Khăn

1
Tôi đã nghịch ngợm với DBus cách đây 2 năm và tất cả những gì còn lại trong trí nhớ của tôi khi đọc rất nhiều, bao gồm cả các nguồn là: DBus có thể rất tuyệt, nhưng rất phù hợp để được chạy một lần như một ví dụ hệ thống và chính xác một lần nữa đối với mỗi phiên người dùng cục bộ, điều đó thật ngu ngốc thay vì tuyệt vời. Tôi đoán là bạn phải tự làm mọi thứ. Tôi đã làm, nhưng tôi luôn có các phiên X nên nó dễ dàng hơn một chút. Chúc may mắn.
Bananguin

Tôi đã thấy một số thông tin hay về cấu hình dbus trong sách BLFS ( Beyond Linux From Scratch ).
Fiisch

Câu trả lời:


6

DBus làm cho việc chia sẻ các cài đặt cho trình nền dbus hơi khó khăn.

Đối với thiết lập của tôi, các cài đặt từ dbus-launch --sh-syntaxđược lưu trong một tệp được nguồn bởi .bash_rc. Nhược điểm của điều này là, sau mỗi lần khởi động lại, quá trình đó được thực hiện thủ công.

Tuy nhiên, sẽ rất đơn giản để kiểm tra một daemon DBus hiện có. Giả sử tập tin cài đặt ở mức $ HOME / .dbus_sinstall:

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

Không có --autolaunchtùy chọn, tôi không tin rằng cần có kết nối cửa sổ X.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.