基于各种资料,我凑齐了~/.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
由于某些原因,我不想在外部添加用户特定的文件:
- 用户服务应与系统服务明确分开
- 应该在不使用超级用户特权的情况下控制用户服务
- 配置应易于版本控制
systemd-user
还是很酥脆的。通过我概述的方法使其成为会议的一部分,将有助于缩小问题的范围;这就是我所建议的。
/etc/systemd/system/
或$HOME/.local/systemd/system
避免/usr
手动放置任何内容。正如@jasonwryan所提到的,用户会话仍然不被认为是生产质量的;但是他们越来越近了。