锁定屏幕并在合上盖子时暂停的最直接方法是什么?我正在使用事件挂钩/etc/systemd/logind.conf
并在关闭盖子时成功挂起。然而,当涉及到锁定部分时,我迷失了 - 我是否应该启用一些屏幕保护程序服务以及如何同时触发两个事件logind.conf
?
答案1
中有几个例子拱门维基。
基本上,它涉及为屏幕锁定器创建一个服务文件并确保它挂接到suspend
,hibernate
或sleep
目标。
如果您使用简单的屏幕锁,例如锁,/etc/systemd/system/lock.service
看起来像这样:
[Unit]
Description=Lock the screen on resume from suspend
[Service]
User=jason
Environment=DISPLAY=:0
ExecStart=/usr/bin/slock
[Install]
WantedBy=suspend.target
wiki 上的其他示例有更复杂的选项,包括关闭和启动其他服务等。
答案2
虽然 jasonwryan 的答复是正确的,但它并不完整。为了在挂起之后(而不是之前)安全地锁定 - 非 root 进程可能会阻止内核挂起,您必须添加一个之前=强制的实例系统等待执行启动拨电至锁在暂停之前启动。使用睡眠目标涵盖挂起、休眠和混合睡眠。
[Unit]
Description=Lock
+Before=sleep.target
[Service]
User=mustapha
Environment=DISPLAY=:0
ExecStart=/usr/local/bin/slock
[Install]
-WantedBy=suspend.target
+WantedBy=sleep.target
答案3
如果您使用openrc
with ,elogind
是否有替代解决方案(不依赖于 systemd):
#!/bin/sh
#
# /lib/elogind/system-sleep/lock.sh
# Lock before suspend integration with elogind
username=lerax
userhome=/home/$username
export XAUTHORITY="$userhome/.Xauthority"
export DISPLAY=":0.0"
case "${1}" in
pre)
su $username -c "/usr/bin/slock" &
sleep 1s;
;;
esac
参考:https://gist.github.com/ryukinix/bd0c1ddcbbafdb4149ae70e41b7c822b
我发布此内容是因为很难找到它的正确工作方式,并且该线程出现在谷歌关于“挂起后锁定”或其他内容的第一个结果中。
答案4
这里提出的所有答案都有一个根本缺陷:它们分别设置 DISPLAY 变量,无论哪个席位/会话处于活动状态。它们涉及编写您自己的 systemd 服务文件。
因此,我建议使用 logind (我相信是 systemd 的一部分)在挂起之前发送 DBUS 通知这一事实。如果您订阅这些消息,您可以从桌面环境中启动屏幕锁定器并真正锁定正确的屏幕/会话。
此外,还有诸如https://github.com/swaywm/swayidle已经实现了这个。例如,我的窗口管理器配置中有这样的内容:
exec swayidle -w \
timeout 300 'swaylock -i $wallpaper' \
timeout 600 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"' \
before-sleep 'swaylock -i $wallpaper' \
lock 'swaylock -i $wallpaper'
一段时间后、挂起之前以及每当请求屏幕锁定时自动锁定屏幕。我已HandleLidSwitch=lock
在 /etc/systemd/logind.conf 中设置为在关闭笔记本电脑时将其锁定。
编辑:您还需要启用 DBUS 支持您的桌面会话。我直接从控制台启动窗口管理器(sway),所以我的电话变成了
exec dbus-run-session sway
同样,您可能(我没有正确测试这部分)启动您的 X 窗口管理器,示例中的 i3 使用以下行~/.xinitrc
exec dbus-launch i3 > /dev/null
编辑:请注意,给出了这个答案很多之后。我不知道在给出这些答案时这是否已经可能,并且不想抹黑任何其他作者。