【问题标题】:Generating mouse,key...etc events in linux在linux中生成鼠标,键...等事件
【发布时间】:2011-10-11 22:01:12
【问题描述】:

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

【问题讨论】:

    标签: c linux events


    【解决方案1】:

    我能想到的基本上有两种选择:

    • X11:使用 XTest 扩展(XTestFakeDeviceKeyEventXTestFakeRelativeMotionEvent 等)
    • 模块 uinput。

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

    第二个是允许用户应用程序创建输入设备和发送输入事件的内核模块。你只需打开/dev/uinput设备,发送几个ioctls来配置它,然后直接write输入事件。

    当然,您还可以编写输入内核驱动程序!

    【讨论】:

    • 选择 uinput,除非你在一个有 X 但没有 uinput(BSD 内核?)的系统中。这并不难(可能需要更多的输入,但 API 更直观,请参阅示例:thiemonge.org/getting-started-with-uinput)并且不依赖于 X。
    • @ribamar 我同意 uinpit 更容易。但是有(过去不是)Linux 发行版默认不启用 uinput。此外,它通常需要 root 访问权限,这对某些项目来说可能是个问题。
    【解决方案2】:

    当我需要在 Windows 上做同样的事情时,我查看了 VNC Server 的源代码以获取想法,并找到了我需要知道的一切。 Linux 版本应该有你需要的东西,或者至少可以为你指明正确的方向。在 Linux 上,有两种 VNC 服务器,一种在虚拟显示器上工作,另一种在真实显示器上工作。你想看一个在真实显示器上工作的,比如this one

    【讨论】:

    • 你为此付出了多少时间和精力?
    • 在我自己的项目中还是在向 VNC 学习?查看 VNC 代码并不困难,只需找到插入键盘/鼠标事件的部分以及他们为此所做的调用。我的项目需要使用 Wiimote 控制应用程序(在 Windows 上),事件部分一点也不难,但我很难找到一种可靠的方式来通过蓝牙读取 Wiimote!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多