ฉันเพิ่งเสร็จสิ้นกระบวนการติดตั้งและตั้งค่าของ systemd บนระบบ arch-linux ของฉัน (2012.09.07) ฉันถอนการติดตั้งinitscripts
(และลบไฟล์กำหนดค่า)
สิ่งที่ฉันต้องการจะทำคือสร้างบริการที่สามารถเริ่มและหยุดโดยผู้ใช้ที่ไม่ใช่รูท บริการคือการเริ่มเซสชันหน้าจอเดี่ยวที่รัน rtorrent อย่างไรก็ตามฉันต้องการให้ผู้ใช้ทุกคนในระบบที่ได้ตั้งค่าบริการนี้เพื่อเริ่ม (เปิดใช้งาน) ให้มีการเริ่มต้นอินสแตนซ์เฉพาะสำหรับพวกเขาโดยเฉพาะ เราจะทำสิ่งนี้ได้อย่างไร?
ฉันจำได้ว่าการอ่านว่า systemd รองรับอินสแตนซ์ของผู้ใช้บริการอย่างไรก็ตามฉันไม่สามารถค้นหาข้อมูลใด ๆ เกี่ยวกับวิธีการตั้งค่านี้หรือเกี่ยวข้องกับสิ่งที่ฉันกำลังค้นหา
ไฟล์บริการที่ฉันใช้สำหรับระบบ:
[Unit]
Description=rTorrent
[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent
อัปเดต # 1 :
หลังจากอ่านหน้า man ที่นี่และที่นี่ฉันเข้าใจว่า systemd ทำงานได้ดีขึ้นเล็กน้อย โดยเฉพาะอย่างยิ่งการใช้User=
และWorkingDirectory=
ตัวเลือกอนุญาตให้เริ่มบริการในเซสชันของผู้ใช้ แต่ปัญหายังคงอยู่ที่การใช้งานของตัวเองไม่ได้start
, stop
, enable
หรือdisable
บริการ เข้าถึงถูกปฏิเสธsystemctl
ข้อผิดพลาดจะได้รับจาก
อัปเดต # 2 :
ก่อนอื่นเพื่อความง่ายและเพื่อการใช้งานเซสชันผู้ใช้ของ systemd ที่ดีขึ้น (ยังค่อนข้างไม่สมบูรณ์) ฉันใช้เซสชันผู้ใช้ของ sofarและปฏิบัติตามคำแนะนำการตั้งค่าของเขา
ดูเหมือนว่ามีข้อผิดพลาดใน DBus เวอร์ชันปัจจุบัน (1.6.4-1) ซึ่งไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมDBUS_SESSION_BUS_ADDRESS
หมายถึงการใช้systemctl --user
ข้อผิดพลาดคำสั่งด้วย:
Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
ตัวแปรควรมีลักษณะดังนี้:
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"
โดยที่USERUIDต้องเป็น UID ของผู้ใช้ที่กำหนด
sudo
สำหรับผู้ใช้และมีพวกเขาตามที่ระบุไว้ในความคิดเห็นของฉันข้างต้นควบคุมไฟล์บริการของตนเอง แต่วิธีนี้จะช่วยให้ผู้ใช้สามารถควบคุมการให้บริการอื่น ๆ มากที่สุดเช่นกัน ...
sudo
เอกสาร - sudoers (5)มีตัวอย่างมากมายในการ จำกัด อาร์กิวเมนต์ของคำสั่ง