会话锁定

出自 ArchWiki

有许多实用程序可以锁定会话屏幕。但重要的是要注意,要使用的实用程序高度依赖于您所处的环境,无论是虚拟控制台还是特定的显示服务器(Xorg 或 Wayland)。

参见应用程序列表/安全#屏幕锁

按环境

本文或章节是与应用程序列表/安全#屏幕锁合并的候选对象。

注意:目的相同,只是拆分为类别。(在Talk:Session lock中讨论)

虚拟控制台

您可以使用 vlockphyslock 来锁定虚拟控制台。

Xorg

有很多方法可以在 Xorg 下锁定会话,因此本节可能不完整。然而,一些方法包括

大多数桌面环境都带有一些锁定会话的方法。

Wayland

您可以使用以下方法之一锁定会话

触发锁定

您可以使用不同的方法锁定会话

最后一点(从事件触发锁定)是最棘手的,因为您可以通过以下两种方式之一进行操作

  • 获取操作触发器以执行您的锁定,然后执行初始操作。
  • 从事件触发器,将锁定添加到事件链。到目前为止,这只能使用 systemd 完成。

Shell 触发器

Zsh

要在终端不活动后执行命令,您可以使用 TMOUT 环境变量。

您可以将其与 ALARM 信号上的陷阱结合使用以执行锁定。如果没有陷阱,它只会终止 shell。

您可能想要检测您是否在图形环境中,否则您的 GUI 终端可能会在您不明白原因的情况下开始消失。

Xorg 触发器

xss-lock

xss-lock 由以下两种情况之一触发

这样做的好处是,您可以控制手动发出的锁定、不活动以及在同一位置发出的挂起命令。

要在这些事件之一上执行操作

$ xss-lock locker-utility
systemd 事件

默认情况下,xss-lock 订阅 suspendhibernatelock-sessionunlock-session,并执行适当的操作(运行锁定器并等待用户解锁或杀死锁定器)。

您可以使用 --ignore-sleep 阻止 xss-lock 被 suspendhibernate 触发。

您可以使用 loginctl lock-session 触发手动锁定,或使用 loginctl lock-sessions 锁定所有当前会话。

DPMS

要配置 DPMS 信号超时

# Trigger screensaver after 10 minutes of inactivity
xset s on
xset s 600

DPMS 信号也可以在 /etc/X11/xorg.conf.d/Monitor 部分中配置。

使用 DPMS 信号,您可以设置第二个计时器,例如通知用户或调暗屏幕。例如(来自 xss-lock(1)

# Dim the screen after three minutes of inactivity, lock the screen two minutes later using i3lock:
xset s 180 120
xss-lock -n dim-screen.sh -- i3lock -n

可以在 /usr/share/doc/xss-lock 中找到一个示例 dim-screen.sh 脚本。

注意: 当将 xss-lock 与 DPMS 一起使用时,您将必须自己关闭屏幕。在观看视频时不会触发它。

xautolock

安装 xautolock 软件包。

$ xautolock -time 12 -locker "systemctl suspend" -detectsleep
注意: xautolock 具有限制性的计时器限制
  • time 为 1 分钟到 1 小时
  • killtime 为 10 分钟到 2 小时
可能需要添加 -detectsleep 以防止 xautolock 在恢复后锁定会话。xautolock 的一个不错的特性是 corners

Wayland 触发器

swayidle

swayidle 监听来自 Wayland 合成器的空闲活动以及 systemd 事件,并相应地执行命令。参见 Sway#空闲

hypridle

hypridle Hyprland 的空闲守护程序。有关配置,请参见 上游

D-Bus 通知

使用 loginctl lock-sessionlogind.conf(5) 中的 lock 操作,您可以通过 DBUS 通知系统您想要锁定。然后可以处理此通知,例如通过 xss-lock。

不活动

logind.conf(5) 中,您可以将 IdleAction 配置为 lock。这将触发 DBUS 通知,该通知将必须被处理(例如通过 xsslock)以锁定会话。

请注意,这是针对全局系统的(因此对于多用户环境来说并不理想)。

另请注意,“这要求用户会话正确地向系统报告空闲状态”。

单元

挂起或休眠前

您可以使用睡眠挂钩

[Unit]
Description=Lock the screen
Before=sleep.target

[Service]
User=%I
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/i3lock -c 000000

[Install]
WantedBy=sleep.target

要为特定用户启用它,启用 sleep@Username.service

盖子关闭

您可以使用 lock 操作,使用相关的 ACPI 事件

参见