ผู้ใช้รายหนึ่งหรืออาจรูทควบคุมการบริการ systemd ระดับผู้ใช้ของผู้ใช้คนอื่นได้หรือไม่?
ฉันได้พยายามsudo -u <some user> systemctl --user restart <some service>
แต่ก็บ่นเรื่อง Failed to get D-Bus connection: Connection refused
dbus:
ผู้ใช้รายหนึ่งหรืออาจรูทควบคุมการบริการ systemd ระดับผู้ใช้ของผู้ใช้คนอื่นได้หรือไม่?
ฉันได้พยายามsudo -u <some user> systemctl --user restart <some service>
แต่ก็บ่นเรื่อง Failed to get D-Bus connection: Connection refused
dbus:
คำตอบ:
ฉันมีปัญหาเดียวกันเมื่อฉันลงชื่อเข้าใช้กล่อง 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
/etc/profile.d/dbus.sh
ฉันมีตรงที่ใน ฉันเดาว่าsudo
ต้องมีรายการที่อนุญาตพิเศษเพราะจะเป็นการล้างสภาพแวดล้อมตามค่าเริ่มต้น ฉันไม่แน่ใจว่ามันจะถ่ายโอน dir รันไทม์ของผู้ใช้ปัจจุบันหรือไม่