Quản lý các đơn vị systemd của người dùng khác


10

Một người dùng, hoặc có thể root, có thể kiểm soát các dịch vụ systemd cấp người dùng khác của người dùng không?

Tôi đã thử sudo -u <some user> systemctl --user restart <some service>, nhưng nó phàn nàn về dbus : Failed to get D-Bus connection: Connection refused.

Câu trả lời:


4

Tôi gặp vấn đề tương tự khi tôi đăng nhập từ xa vào hộp gentoo của mình qua ssh. Trong trường hợp của tôi, điều này là do các biến XDG_RUNTIME_DIRDBUS_SESSION_BUS_ADDRESSmôi trường bị thiếu. Chạy các lệnh sau và thử lại:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

Nếu điều này có ích, bạn có thể đặt các lệnh đó vào .bashrc. Tôi đoán phải có một giải pháp tao nhã hơn .bashrc nhưng điều đó phụ thuộc vào bản phân phối của bạn.

Đây là nơi tôi tìm thấy giải pháp đó.

Biên tập:

đăng nhập với quyền root, tôi quản lý để chạy thành công systemctl --usernhư một người dùng khác bằng cách sử dụng sunhư sau:

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

hoặc sử dụng sudo(lưu ý, tôi phải thêm rõ ràng người dùng UID (1000) tương ứng vào đường dẫn '/ run / user /', nhưng nếu bạn đang chạy nó từ tập lệnh bash, bạn có thể sử dụng $ SUDO_UID thay thế):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

1
Tôi có chính xác điều đó trong /etc/profile.d/dbus.sh. Tôi đoán sudocần những danh sách trắng, bởi vì nó mặc định xóa môi trường. Tôi không chắc chắn nếu nó sẽ chỉ chuyển dir thời gian chạy hiện tại của người dùng.
mkaito
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.