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