【问题标题】:Linux: Interfacing directly with a USB keyboardLinux:直接与 USB 键盘连接
【发布时间】:2013-01-26 04:04:09
【问题描述】:

我购买了一个 USB 数字键盘,它的功能似乎与普通 USB 键盘相同,但只有数字键盘键和 LED。它在 Linux 下正常工作,我可以用它和我的实际键盘输入数字。我想编写一个可以直接与它交互的应用程序(响应击键并控制 LED),而不必有一个窗口,并防止其他应用程序响应它。我该怎么做?

【问题讨论】:

  • 那...并没有告诉我很多事情。我想我应该使用 XGrabDevice?但是我从哪里得到这个显示?

标签: linux keyboard usb


【解决方案1】:

嗯,Ignacio 的评论确实帮助我指出了正确的方向。我需要从 gdk_display_get_default() 获取显示,然后使用 gdk_display_get_device_manager(),使用 gdk_device_manager_list_devices() 找到设备,最后使用 gdk_device_grab() 抓取它。 (或者,如果我真的想要,我可以直接使用 X API...)这让我可以将键盘的事件定向到我的窗口,而不管焦点如何。

我遇到的一个问题是窗口必须是“可见的”才能接收事件——而不是隐藏、最小化或在不同的工作区。我能做的最好的隐藏它是让它 1x1 像素未装饰并将其粘贴到屏幕外的某个地方(尽管有些 WM 不会让它真正离开屏幕,因此尺寸也很小)。

【讨论】:

    【解决方案2】:

    查看事件设备接口/dev/input

    一个不错的 Python 接口是http://pythonhosted.org/evdev/

    更多信息:
    使用输入子系统,第二部分
    Linux 杂志,第 107 期,2003 年 3 月
    http://www.linuxjournal.com/article/6429

    我正在做一个类似的项目,可能会使用 evdev 来捕获键盘事件,但 XTest(在 Xlib 层)生成虚拟键盘事件。

    由于/dev/input 低于X,因此不需要聚焦/显示窗口。

    更新(2014 年 1 月 17 日):

    这是一种完全不同的方法,通过命令行。

    1) 使用xinput --list 列出可用的输入设备(及其 ID)。

    2) 使用xinput --float <device_id>“浮动”目标输入设备。浮动设备后,它生成的输入事件将不再被任何正在运行的应用程序听到。因此,在测试/开发期间,您可能希望插入两个键盘(和/或鼠标),一个浮动,另一个连接。 (您可以使用xinput --reattach <device_id> <master_id> 重新附加浮动设备。)

    3) 设备浮动后,您可以通过运行xinput --test <device_id>“查看”它生成的事件。

    您可以查看 xinput 的源代码,了解这是如何在 C 中完成的。
    http://anonscm.debian.org/gitweb/?p=pkg-xorg/app/xinput.git;a=tree

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2014-03-02
      • 2022-11-02
      • 1970-01-01
      相关资源
      最近更新 更多