Linux 获取键盘鼠标触控板活动

问题描述 投票:0回答:1

我正在寻找一种方法来检测 Linux 上的键盘、鼠标和触控板活动。这可能是一个内核模块。我不关心输入的细节,只关心发生了什么事。我不希望它依赖于 X。从内核头文件中我注意到有一个键盘输入的回调方法,所以这看起来不是太大的问题。

我查看了内核头文件和 libevdev,但没有找到与鼠标和触控板输入类似的内容。在我尝试过的 evdev 示例程序中,它需要 /dev/input 中的设备名称,其中大部分名称为 event(n)。它不适用于 /dev/input/mice。另外,我不确定打开文件并保持打开状态等待事件是否是一个好主意?

linux keyboard mouse trackpad
1个回答
0
投票

由于您在评论中说您只是在查看控制键盘背光的活动(如果您有足够的声誉,请更新您的问题;我的编辑队列已满),我会从用户空间处理此问题。我看到两个选项,都基于

/dev/input/by-id/
中的文件。我没有触摸板,但这里有键盘和鼠标的条目,因此触摸板也可能会显示在该目录中。

我假设任何活动灯都会亮,超时后灯就会熄灭。第一个选项是打开所有文件并将它们放入

select()
循环中。如果您不熟悉,命令
man 2 select
将向您展示一个示例程序,演示如何使用此界面。如果您不那么衰老,现在首选
poll()
界面 - 而且它是事件驱动的;它实际上并不进行轮询。请阅读
man 2 poll
了解更多详细信息并查看示例。

这些接口的好处是它们会超时,因此在您的程序中您可以测试是否触发了超时,如果是,您只需关闭背光即可。

另一种选择是使用

inotify()
函数。如果您正在监视的文件发生更改,此函数将返回。这应该更有效,因为您不必从文件本身读取数据。更多信息请参阅
man 7 inotify

您可以通过安装

inotify-tools
软件包来了解此功能的工作原理(这是 Debian/Ubuntu 名称,其他发行版软件包名称可能有所不同)。例如,命令:

sudo inotifywait -m /dev/input/by-id/usb-*

将监视我的所有 USB 输入设备并在它们发生变化时进行报告。在编写任何代码之前,您可以使用它来测试接口。您甚至可以用 shell 脚本或 python 这种方式编写守护进程,但我假设您已经使用 C 来控制背光。命令行

inotifywait
甚至带有自己的
-t <timeout>
参数...

© www.soinside.com 2019 - 2024. All rights reserved.