Hyprland:锁屏、空闲与配套服务

本页目录

完整桌面需要在用户离开时锁定会话,在适当时候关闭显示输出,并在唤醒后恢复。锁屏、熄屏和系统休眠是三个不同动作,应分别验证,不能用“屏幕黑了”判断会话已经安全锁定。

先确定策略由谁管理

动作作用不代表什么
锁屏通过认证界面限制交互显示器不一定关闭
DPMS off关闭显示输出会话不一定锁定,进程继续运行
系统休眠进入系统级低功耗状态不保证锁屏已完成

当前实例由 Caelestia 处理空闲与锁屏;早期组合使用 hypridle 和 hyprlock。两套策略不应同时运行,否则可能重复锁屏、反复切换 DPMS 或使用不同超时。

当前实例的空闲策略

Caelestia v2.4.0 的 shell.json 中,相关设置位于 general.idle。下面是这一字段的片段,应合并到完整 JSON 中:

{
  "lockBeforeSleep": true,
  "inhibitWhenAudio": true,
  "inhibitWhenCharging": false,
  "timeouts": [
    {
      "timeout": 3600,
      "idleAction": "lock",
      "respectInhibitors": true
    },
    {
      "timeout": 3900,
      "idleAction": "dpms off",
      "returnAction": "dpms on",
      "respectInhibitors": false
    }
  ]
}

这表达两个不同策略:锁屏动作尊重抑制条件,较晚的熄屏动作不尊重它们;有活动返回时恢复显示。超时从各自的空闲判定计算,不能简单解释成“锁屏完成后再等 300 秒”。若锁屏被抑制而 DPMS 没有被抑制,就可能发生熄屏时仍未锁定的情况。

因此,实际选择超时和抑制规则时,要先明确是否允许这种状态。需要“熄屏前必须锁定”时,应设计并验证动作顺序,而不是只调整两个数字。Caelestia 配置

抑制器为什么影响行为

播放器或浏览器可以表达“当前播放不希望进入空闲”的请求。不同程序可能通过 Wayland idle inhibit、D-Bus 或 systemd/logind 机制表达,这些不是一张完全相同的清单。

下面可以查看 logind 抑制锁:

systemd-inhibit --list

没有条目不能证明不存在 Wayland 层抑制。应结合外壳日志、播放器状态和对应协议观察,避免仅凭“浏览器打开着”就断定是某种 D-Bus 锁不断重置计时器。

如何验证锁屏与熄屏

先保存工作,保留可恢复的输入与登录方式。按顺序测试:

  1. 手动锁屏,确认确实要求认证后才能进入桌面。
  2. 解锁后检查键盘布局、输入法和多屏显示是否正常。
  3. 在无播放、无抑制的情况下测试空闲超时。
  4. 分别播放音频和视频,观察哪些动作被抑制。
  5. 测试 DPMS 关闭与输入返回,确认显示恢复且锁定状态符合预期。
  6. 最后测试系统休眠与唤醒,核对锁屏是否在进入休眠前完成。

调试时可临时缩短超时,但测试结束要还原,并记录每个事件的时间。只测黑屏不测认证与恢复,会遗漏重要状态。

hypridle / hyprlock 的替代方案

不使用外壳内置空闲管理时,可以由 hypridle 监听空闲并调用 hyprlock。其配置需要明确锁屏命令、休眠前动作、显示恢复和抑制策略,具体字段以所用版本的 hypridle 文档为准。

早期配置为了区分锁屏与熄屏的抑制策略,启动两个 hypridle 实例。这个历史方案不应直接移植到当前 Caelestia 环境;现代版本的逐 listener 或外壳策略可能已经足够。选择方案后验证实际进程数量和策略归属。

loginctl lock-session 是锁定请求,需要会话中有组件响应;它与直接启动某个锁屏程序的路径不同。查询对应日志并验证认证界面确实出现,不能只看命令退出码。

其他配套组件的分工

启动器负责查应用与执行动作,剪贴板历史负责保存与选择文本,输入法负责预编辑与候选,壁纸组件负责各屏输出。完整外壳可能已经包含其中部分功能。

功能独立组件示例接入时检查
启动与选择Fuzzel、Walker是否与外壳启动器重复,命令是否可找到
剪贴板历史cliphist、wl-clipboard是否已启动监听,文本/图片是否符合预期
输入法Fcitx5GTK、Qt、Wayland/XWayland 应用分别测试
壁纸hyprpaper 或外壳内置背景是否存在两个组件同时写同一屏幕
电源菜单wlogout 或外壳会话菜单每个按钮实际调用的动作

颜色接入见 Matugen,输入法与编辑器切换见 Neovim 输入,服务启动问题见会话排障。