【问题标题】:Detecting if computer is idle based on mouse and keyboard interactions基于鼠标和键盘交互检测计算机是否空闲
【发布时间】:2010-12-22 20:44:43
【问题描述】:

我正在用 C++ 编写一个软件,用于控制我的 MacBook Pro 上的键盘背光,它运行 Arch Linux 作为主操作系统,而 Debian 则用于娱乐。该程序作为守护程序运行,并且现在能够打开键盘背光。下一步是让它密切关注计算机何时空闲(基于鼠标和键盘交互),当它空闲一段时间后,关闭背光,一旦注册了与键盘或鼠标的交互,再次打开背光。

我在 Google 上四处搜索,但没有找到任何可以检查的内容,以检查上次鼠标和/或键盘交互的注册时间。

知道如何实现这一目标吗? 我相信任何 Linux 操作系统(可能是 X?)的某些部分已经存在这样的功能,因此使用它比从头开始编写更好。

问候,...

【问题讨论】:

  • 等等,cracked.com 的 Chris Bucholz?

标签: c++ linux


【解决方案1】:

X 服务器中的 XScreensaver 扩展跟踪键盘和鼠标空闲时间。如果您将源代码下载到Psi,他们的源代码树有一个文件idle_x11.cpp,其中包含查询空闲时间的逻辑。以此为例。

基本思路是使用XScreenSaverQueryInfo读取屏保状态信息。

【讨论】:

  • 谢谢你 - 似乎是正确的选择 - 谷歌搜索显示,这是这个案例的最推荐。关于 Psi 源和 idle_X11.cpp - 我找不到该文件。我刚刚克隆了他们的 git repo,所以我想我找对地方了。你能告诉我它的确切来源吗?
  • @Chris Buchholz 他们重构了源代码,所以idle_x11.cpp 现在位于libpsi 存储库中。使用 Psi git checkout,执行git submodule init,然后执行git submodule update,文件位于src/libpsi/tools/idle
【解决方案2】:

对于独立于 X 服务器的解决方案,您可以观察设备节点是否有任何鼠标和键盘的事件并使用计时器。

/dev/input/event* 节点提供了一个通用接口——您必须观察其中任何一个与鼠标或键盘相对应的节点。您需要 evdev 内核模块才能使用它。

/dev/input/mice 节点提供了一个聚合所有鼠标事件的接口。不过,如果您为 /dev/input/event* 节点编写代码,您也可以将其用于鼠标。

请记住,某些 X-server 驱动程序会获取其设备节点并阻止所有其他应用程序获取事件,因此您可能必须更改它们的选项或同时使用基于 X 的接口。

编辑:

如果您想使用/dev/input/event* 设备节点,/usr/include/linux/input.h 头文件包含您需要了解的有关编程接口的大部分内容。根据我的经验,它非常简单易用。在您的情况下更是如此,因为您并不真正关心按下了 什么 键 - 只是那个键。

【讨论】:

  • 感谢您的意见!我一直在研究您的方法,当我需要对键盘背光向上/向下按钮的按下做出反应时,这可能会派上用场。
猜你喜欢
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 2011-10-19
  • 2011-05-03
相关资源
最近更新 更多