有没有办法安装某种钩子来确保xlock
或在我的笔记本电脑进入睡眠状态之前调用类似的程序,而不管请求的来源(pm-suspend
从脚本调用,或者只是关闭盖子等)和我当前正在使用的窗口管理器?
(我目前正在使用 Debian Linux,但我想会有一个与发行版无关的解决方案。)
答案1
不,因为内核在冻结所有进程之前不提供任何类型的“进入睡眠”信号,所以没有与分布无关的方法来检测它。
话虽如此,几乎全部暂停请求(包括 lid-close)往往会经过几个用户空间 API:最终,它们要么Suspend()
通过 D-Bus 调用 systemd-logind 函数,要么生成pm-suspend
命令。两者都有各种可用于此目的的“钩子”。
(请注意,无论您做什么,直接操作echo mem > /sys/power/state
对于用户空间来说几乎是不可见的,只需观察突然的时钟跳跃......)
因此,如果你使用systemd作为初始化:
安装
xss-lock
并使您的桌面环境在登录时启动它(通过~/.xinitrc
、通过~/.config/autostart/
或通过其他方式):xss-lock xlock &
这将处理 systemd 的预暂停通知,以及
loginctl lock-sessions
您需要的手动调用。在以下位置创建 pm-utils 钩子脚本
/etc/pm/sleep.d/50lock
:/bin/sh #!/bin/sh 复制代码 loginctl 锁定会话
(不要忘记
chmod +x
。)您不需要此功能来进行常规的 systemd 暂停,但每当您手动运行时,它都会向 xss-lock 发送通知pm-suspend
。
如果你正在使用其他 init 系统:
如果你正在使用pm-suspend
,我想你可以运行xlock
直接地来自 pm/sleep.d 钩子脚本。这需要您直接设置DISPLAY
环境XAUTHORITY
变量,这有点糟糕,因为它们在每次启动时可能会有所不同(尽管有些人:0
在那里进行硬编码...)
总的来说,在这种情况下,特定于桌面环境的方法可能会更好。