如何延迟(但不禁用)挂起/合盖时的屏幕锁定?

Rya*_*son 8 suspend lock-screen 21.10

我希望我的屏幕在合上盖子时自动锁定(或以其他方式触发暂停),但前提是我将其关闭一定时间(例如 5 分钟)。也就是说,如果我合上盖子,1 分钟后再打开,我希望屏幕不被锁定,但如果我 10 分钟后打开盖子,屏幕应该被锁定。有没有办法在 Ubuntu (GNOME) 中进行设置?

我看到了几个类似的问题,但没有一个问题能够描述我正在寻找的内容。我仍然希望笔记本电脑在盖子关闭时立即挂起,我只是不希望它锁定,除非盖子保持关闭状态一段时间。(理想情况下,它会遵循盖子打开时使用的相同“自动屏幕锁定延迟”设置。)

我可以想象实现这一点的一种方法是在挂起和唤醒时运行脚本。挂起脚本只会记录挂起的时间戳,唤醒脚本将检查时间戳有多旧,并根据该时间戳决定是锁定还是解锁屏幕。但是,我假设我必须将这些脚本设置为以我的用户(即不是 root)身份运行,并且它们需要能够访问我现有的登录会话(大概通过一些环境变量?),所以我不这是可以实施的。

Rya*_*son 1

我想出了如何做到这一点。我编写了一个 Python 脚本,用于监听指示挂起和锁定屏幕的 DBus 信号。当两个信号在短时间内同时发生时,脚本假定这是触发屏幕锁定事件的挂起事件。然后它等待指示恢复的信号。如果自挂起事件以来经过的时间少于 5 分钟,则会强制屏幕保护程序解锁而无需密码。此外,如果发送挂起信号时盖子关闭,它只会解锁屏幕(因此可能表明盖子关闭触发了挂起),因此从菜单手动挂起不会触发脚本。这样可以保证屏幕在被用户手动锁定后不会解锁。

您可以在这里找到该脚本:https://gist.github.com/DarwinAwardWinner/77e8acea2f14ed9ea66d7222d7ace500

我将脚本保存在 中~/.local/bin/,使其可执行,并将脚本设置为在使用启动应用程序配置程序登录时在后台运行,如下所示:

Shortsleep-unlock.py 的启动应用程序入口

如果脚本因任何原因崩溃,我还使用包run-one-constantly中的内容自动重新启动脚本。run-one运行此脚本后,我得到了我想要的行为:如果我合上盖子,然后一分钟后打开它,屏幕就会解锁,而无需输入密码。但是,如果我将盖子关闭超过 5 分钟,或者如果我在没有关闭盖子的情况下暂停笔记本电脑,则在打开盖子时需要输入密码。您可以通过编辑脚本来配置时间限制和盖子要求(查看第 100 行)。

在当前形式下,该脚本仅适用于 GNOME 屏幕保护程序。然而,使其适应 KDE 或其他屏幕锁定程序应该不会太困难,只要它们提供适当的 DBus 信号和方法即可。

重要的安全说明:我已尽力处理我能想到的所有边缘情况,但即使在时间限制到期后,我也始终有可能未能预见到某种触发解锁的方式。因此,如果您担心安全性,请不要使用此脚本,除非您花时间亲自审核它。