在桌面系统上给定空闲时间后通知用户活动的非轮询方法

在桌面系统上给定空闲时间后通知用户活动的非轮询方法

已经有很多与此类似的问题,但我能找到的所有问题都有建议投票方法的答案(1,2)或者看起来像极端黑客(3),所以我想问同样的问题,但附加警告,解决方案不得使用轮询:

我正在寻找的是 Linux 桌面系统上常用(或易于安装)的某种 API,它可以让您监听这两个事件:

  1. 用户已经“空闲”了N几秒钟(没有移动鼠标、没有在键盘上打字等)(您可以在其中指定N)。
  2. 在之前触发 (1) 后(并且只有在那时!),用户现在已经执行了一些活动,不应再被视为空闲。在此事件之后,可以重新触发 (1),从而重复该循环。

对于 (1),它在没有轮询的情况下发生对我来说并不是很重要,因为在我的用例中,对第一种类型的事件做出反应时的延迟容忍度足够高,我可以每 10 秒轮询一次。但对于事件 (2),反应应该是即时的,因此使用轮询方法时,我必须每隔 0.1 秒左右轮询一次,这对 CPU 时间来说是一种不可接受的浪费。1

因此,我认为(1)通过建议使用类似xprintidle轮询方式的方式“解决”了,但由于(2)的定义依赖于(1),我觉得无论如何都应该在这里列出它。

对于实现 (2) 的 API 有什么想法吗?屏保等是如何做到的?


1 要了解这里的动机,请比较如果dpms在 10 分 10 秒(而不是您配置的 10 分钟)后关闭屏幕,与检测到后延迟 10 秒再次打开屏幕,您的感觉如何活动...在我看来,大多数用例都意味着对“空闲检测”比“非空闲检测”有更大的容忍度。

相关内容