จากแหล่งข้อมูลต่าง ๆ ที่ฉันได้เรียนด้วยกัน~/.config/systemd/user/screenlock.service
:
[Unit]
Description=Lock X session
Before=sleep.target
[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xautolock -locknow
[Install]
WantedBy=sleep.target
systemctl --user enable screenlock.service
ผมได้เปิดใช้งานได้โดยใช้ แต่หลังจากรีบูตเครื่องเข้าสู่ระบบระงับและดำเนินการต่อ (ทดสอบทั้งกับsystemctl suspend
และโดยการปิดฝา) หน้าจอจะไม่ถูกล็อคและไม่มีอะไรjournalctl --user-unit screenlock.service
มา ผมทำอะไรผิดหรือเปล่า?
กำลังDISPLAY=:0 /usr/bin/xautolock -locknow
ล็อคหน้าจอตามที่คาดไว้
$ systemctl --version
systemd 215
+PAM -AUDIT -SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ +SECCOMP -APPARMOR
$ awesome --version
awesome v3.5.5 (Kansas City Shuffle)
• Build: Apr 11 2014 09:36:33 for x86_64 by gcc version 4.8.2 (nobody@)
• Compiled against Lua 5.2.3 (running with Lua 5.2)
• D-Bus support: ✔
$ slim -v
slim version 1.3.6
หากฉันรันsystemctl --user start screenlock.service
การล็อกหน้าจอทันทีและฉันได้รับข้อความบันทึกjournalctl --user-unit screenlock.service
ดังนั้นExecStart
ชัดเจนว่าถูกต้อง
xautolock -locker slock &
การสร้างบริการระบบโดยใช้ไฟล์เดียวกันทำงาน (นั่นslock
คือใช้งานได้เมื่อทำงานต่อ):
# ln -s "${HOME}/.config/systemd/user/screenlock.service" /usr/lib/systemd/system/screenlock.service
# systemctl enable screenlock.service
$ systemctl suspend
แต่ฉันไม่ต้องการเพิ่มไฟล์เฉพาะผู้ใช้ภายนอก$HOME
ด้วยเหตุผลหลายประการ:
- บริการผู้ใช้ควรแยกออกจากบริการระบบอย่างชัดเจน
- บริการผู้ใช้ควรได้รับการควบคุมโดยไม่ต้องใช้สิทธิ์ superuser
- การกำหนดค่าควรเป็นเวอร์ชั่นที่ควบคุมได้ง่าย
systemd-user
ยังเป็นขุยมาก ทำให้การทำงานเป็นส่วนหนึ่งของเซสชั่นผ่านวิธีการที่ฉันระบุไว้จะช่วยให้ปัญหาแคบลง นั่นคือทั้งหมดที่ฉันสามารถแนะนำ
/etc/systemd/system/
หรือ$HOME/.local/systemd/system
เพื่อหลีกเลี่ยงการใส่อะไรลงไป/usr
ด้วยตนเอง ตามที่ @ jasonwryan พูดถึงเซสชันของผู้ใช้ยังไม่ถือว่าเป็นคุณภาพการผลิต แต่พวกเขาใกล้ชิดกันมากขึ้น