在Linux中生成鼠标、键盘等事件

3

我正在一个项目中,需要编写一个简单的驱动程序,接收来自USB设备的输入并根据接收到的消息在GUI上执行操作(类似于编写USB鼠标驱动程序,但使用自己的协议)。 我正在寻找这种可能性,并发现像LDTP这样的软件测试自动化工具已经可以生成鼠标点击和键盘敲击等操作。 是否有其他可用的API?如果我的团队对C语言有很好的了解,但没有Linux经验,需要多长时间才能完成?

2个回答

5

你基本上有两个选择:

  • X11:使用XTest扩展 (XTestFakeDeviceKeyEvent, XTestFakeRelativeMotionEvent等)
  • 模块uinput。

第一个选项利用了在大多数(所有?)X服务器中存在的虚拟输入设备(在shell中尝试运行xinput list)。每次调用XTestFake*函数都会生成一个X输入消息。

第二个选项是一个内核模块,它允许用户应用程序创建输入设备并发送输入事件。简单地打开/dev/uinput设备,发送一些ioctl来配置它,然后直接write输入事件。

当然,你也可以编写一个输入内核驱动程序!


除非您在没有uinput的系统(如BSD内核)中,否则请使用uinput。这并不更加困难(可能需要更多的打字,但API更直观,参见:http://thiemonge.org/getting-started-with-uinput),而且不依赖于X。 - ribamar
@ribamar 我同意使用uinput更容易。但是有一些(或曾经)的Linux发行版默认情况下不启用uinput。此外,通常需要根访问权限,这可能对某些项目造成问题。 - rodrigo

2
当我需要在Windows上完成同样的事情时,我查看了VNC服务器的源代码以获取思路,并找到了我需要了解的一切。Linux版本应该有您需要的内容,或者至少可以指引您正确的方向。在Linux上有两种VNC服务器,一种适用于虚拟显示器,另一种适用于真实显示器。您需要查看适用于真实显示器的服务器,例如这个。请注意保留HTML标签。

你花了多少时间和精力在那上面? - Ahmed
在我的项目中还是从VNC学习?看VNC代码并不困难,只需找到插入键盘/鼠标事件的部分以及它们所调用的函数即可。我的项目需要使用Wiimote控制Windows上的应用程序,事件部分并不难,但我在通过蓝牙读取Wiimote时遇到了很多麻烦! - Miguel Grinberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接