Linux:直接与USB键盘连接

时间:2013-02-11 03:48:52

标签: linux keyboard usb

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

2 个答案:

答案 0 :(得分:1)

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

我遇到的一个障碍是窗口必须“可见”才能接收事件 - 不隐藏,最小化或在不同的工作区。我能做的最好的隐藏就是让它1x1像素未装饰并将其粘贴在某处(尽管有些WM不会让它实际上离屏,因此尺寸也很小)。

答案 1 :(得分:0)

查看事件设备界面/dev/input

一个不错的Python界面是http://pythonhosted.org/evdev/

更多信息:
使用输入子系统,第II部分 Linux Journal,第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