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

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

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

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

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

答案1

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

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

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

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

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

当前版本的脚本仅适用于 GNOME 屏幕保护程序。不过,只要 KDE 或其他屏幕锁定程序提供适当的 DBus 信号和方法,那么将其适配到这些程序应该不会太难。

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

相关内容