การจัดการหน่วย systemd ของผู้ใช้รายอื่น


10

ผู้ใช้รายหนึ่งหรืออาจรูทควบคุมการบริการ systemd ระดับผู้ใช้ของผู้ใช้คนอื่นได้หรือไม่?

ฉันได้พยายามsudo -u <some user> systemctl --user restart <some service>แต่ก็บ่นเรื่อง Failed to get D-Bus connection: Connection refuseddbus:

คำตอบ:


4

ฉันมีปัญหาเดียวกันเมื่อฉันลงชื่อเข้าใช้กล่อง Gentoo จากระยะไกลผ่านทาง ssh ในกรณีของฉันนี้เป็นเพราะตัวแปรXDG_RUNTIME_DIRและDBUS_SESSION_BUS_ADDRESSสภาพแวดล้อมหายไป เรียกใช้คำสั่งต่อไปนี้แล้วลองอีกครั้ง:

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

หากสิ่งนี้ช่วยได้คุณสามารถใส่คำสั่งเหล่านั้นลงใน. bashrc ของคุณ ฉันเดาว่าต้องมีวิธีแก้ปัญหาที่หรูหรากว่า. bashrc แต่ขึ้นอยู่กับ distro ของคุณ

ที่นี่ฉันพบวิธีแก้ปัญหาที่

แก้ไข:

เข้าสู่ระบบในฐานะ root ฉันจัดการเพื่อเรียกใช้systemctl --userในฐานะผู้ใช้อื่นโดยใช้suดังนี้:

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

หรือการใช้sudo(โปรดทราบฉันต้องเพิ่มผู้ใช้ UID (1000) ให้กับพา ธ '/ run / user /' อย่างชัดเจน แต่ถ้าคุณเรียกใช้จากสคริปต์ทุบตีคุณสามารถใช้ $ SUDO_UID แทน):

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

1
/etc/profile.d/dbus.shฉันมีตรงที่ใน ฉันเดาว่าsudoต้องมีรายการที่อนุญาตพิเศษเพราะจะเป็นการล้างสภาพแวดล้อมตามค่าเริ่มต้น ฉันไม่แน่ใจว่ามันจะถ่ายโอน dir รันไทม์ของผู้ใช้ปัจจุบันหรือไม่
mkaito
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.