Rắc rối với dbus và systemd / user


8

Tôi đã thiết lập systemd để việc sử dụng systemctl start user@mesẽ khởi động các dịch vụ người dùng của tôi như tôi mong đợi, nhưng dbus của tôi sẽ không hoạt động (mà tôi cần cho PulseAudio).

Có một số cách tôi có thể kiểm tra dbus hoặc systemd để tìm ra những gì tôi đang làm sai?

Tại thời điểm này tôi không có ý tưởng cho những thứ để thử. Xin vui lòng cho tôi biết nếu có bất cứ điều gì khác tôi có thể cung cấp có thể có liên quan.


Thông tin bổ sung / Cố gắng giải quyết

Tôi đang sử dụng Arch Linux, systemd 204-1 và dbus 1.6.10-1

Bắt đầu sử dụng systemd thông qua # systemctl start user@mecho tôi điều này:

├─systemd─┬─(sd-pam)
│         ├─mpd───5*[{mpd}]
│         └─pulseaudio─┬─gconf-helper
│                      └─2*[{pulseaudio}]

Bắt đầu systemd --user &thủ công khi người dùng của tôi sản xuất:

├─bash─┬─pstree
│      └─systemd─┬─2*[dbus-daemon]
│                ├─dbus-launch <<< X only
│                ├─gconfd-2    <<< X only
│                ├─mpd───5*[{mpd}]
│                └─pulseaudio─┬─gconf-helper
│                             └─2*[{pulseaudio}]

Và phát sinh lỗi sau nếu tôi không ở X, mặc dù thực tế là tôi đã kích hoạt người dùng của mình dbus.service:

Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

Liên kết liên quan:

  1. /superuser/476379/how-do-i-setup-a-systemd-service-to-be-started-by-a-non-root-user-as-a-user-daem
  2. https://github.com/sofar/user-session-units
  3. https://github.com/grawity/systemd-user-units

Hai cái đầu tiên đề cập đến một vấn đề với dbus, nhưng tại liên kết 2 nó nói rằng vấn đề đã được khắc phục trong dbus-1.6.9, vì vậy tôi nghĩ vấn đề là do việc triển khai của tôi chứ không phải lỗi này.

Tôi đã sử dụng dịch vụ người dùng mẫu từ các liên kết 2 & 3.

Câu trả lời:


2

Nếu DBUS_SESSION_BUS_ADDRESSkhông được đặt cho một quy trình cố gắng sử dụng D-Bus, theo mặc định, quy trình đó sẽ cố gắng gọi dbus-launch với --autolaunchtùy chọn khởi động bus phiên mới hoặc tìm địa chỉ bus hiện có trên màn hình X hoặc trong tệp trong ~/.dbus/session-bus/.

Khi dbus không được sử dụng với Xorg, tương tự như $ HIỂN THỊ hoạt động để sử dụng một máy chủ khác, bạn có thể đặt biến môi trường này để báo cho dbus biết nên sử dụng phiên bus nào:

export DBUS_SESSION_BUS_ADDRESS=""

Để biết thêm thông tin, hãy đọc http://dbus.freedesktop.org/doc/dbus-launch.1.html


1

Nếu không sử dụng X với dbus,

Bạn có thể đặt biến môi trường này để báo cho dbus biết nên sử dụng phiên bus nào:

export DBUS_SESSION_BUS_ADDRESS=

0

Bạn đã thử sử dụng user-session@.servicethay vì user@.service. Tôi đã có vấn đề với user@.servicelúc đầu, (không biết chính xác nữa) và sau khi chuyển đổi nó hoạt động.

Đó là trong repo thứ hai bạn liên kết. Đơn vị này đặt DISPLAYbiến thành :0. Nó sẽ không hoạt động với nhiều màn hình, nhưng hoạt động tốt với tôi với một màn hình.

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.