无效 linux 和挂起时锁定屏幕

无效 linux 和挂起时锁定屏幕

我在使用 void linux 时遇到了一些问题。我尝试将 slock 作为脚本添加到 zzz:/etc/zzz.d/suspend/slock

#!/bin/sh
slock

它以一种奇怪的方式工作:如果我调用zzz,它会调出 slock 并且不会挂起,直到我输入密码并解锁。我将脚本移至/etc/zzz.d/resume/slock,现在在恢复时它会闪烁解锁屏幕一秒钟,然后锁定屏幕,这不是很好,但还可以。

但还有另一个问题:合上盖子会暂停笔记本电脑,但根本不会锁定屏幕。我想这可能与 有关acpid。当我禁用 时acpid,合上盖子不会暂停笔记本电脑,因此acpid肯定要对此负责。我尝试修补/etc/acpi/handler.sh,现在看起来像这样:

                close)
                        # suspend-to-ram
                        logger "LID closed, suspending..."
                        slock
                        zzz
                        ;;
                open)   logger "LID opened" ;;
                *) logger "ACPI action undefined (LID): $2";;

并且slock无论如何都不会被执行。我尝试zzz从 中删除handler.sh,然后关闭盖子不会执行任何操作,这意味着它实际上zzz在存在时执行,但zzz由于某种原因不执行 的用户脚本。我也尝试在两者中替换slock为(例如 voidi3lockhandler.sh维基百科建议)zzz.d/resume但它是相同的。我做错了什么还是有其他原因导致这种行为?

答案1

像这样修补这个问题:

/etc/zzz.d/suspend/01

#!/bin/sh
doas -u ds xsecurelock &
sleep 2

/etc/doas.conf

permit persist :wheel
permit nopass root as ds cmd xsecurelock
permit nopass :wheel as root cmd zzz
permit nopass :wheel as root cmd ZZZ
permit nopass keepenv root as root

您可以尝试在挂起脚本中为root用户定义$DISPLAY,但我太愚蠢了,无法解决这个问题。

答案2

您最初的解决方案不起作用,因为 shell 会等待 slock 进程停止然后再继续。最简单(但不是最好)的解决方案是创建slock &允许进程继续运行的命令。但是,这并不能保证 slock 在设备挂起之前完成运行。

执行此操作的“正确”方法是使用xss-lock调用 slock,并使用xset命令锁定屏幕。这两个都可以在 Void 的存储库中找到。xss-lock slock将设置 xss-lock 以使用 slock 进行锁定。

应该无需任何额外的脚本即可工作,因为 xss-lock 应该在正常挂起时起作用。然而,基于挂起的事件始终存在错误,因此通过 xset 进行额外激活并不是一个坏主意。

一个例子/etc/zzz.d/suspend/slock

#!/bin/sh
xset s activate

可以将类似的脚本放置在相应的“恢复”文件中,但在锁定屏幕之前出现的解锁屏幕的问题仍然会出现。

相关内容