我已經購買了USB數字鍵盤,它看起來與普通USB鍵盤的功能完全相同,但只有數字鍵盤鍵和指示燈。它在Linux下正常工作,我可以用它鍵入數字,也可以用我的實際鍵盤輸入數字。我想寫一個應用程序,它可以直接連接到應用程序(響應按鍵和控制LED),而不必有窗口,並防止其他應用程序響應它。我該怎麼做呢?Linux:直接與USB鍵盤連接
回答
那麼,伊格納西奧的評論確實有助於指引我朝正確的方向發展。我需要從gdk_display_get_default()獲取顯示,然後使用gdk_display_get_device_manager(),使用gdk_device_manager_list_devices()找到設備,最後使用gdk_device_grab()獲取設備。 (或者,如果我真的想要,我可以直接使用X API ...)這讓我可以將鍵盤的事件指向我的窗口,而不管焦點如何。
我遇到的一個問題是窗口必須「可見」才能接收事件 - 不是隱藏,最小化或在不同的工作空間上。我可以做的最好的辦法是隱藏它,使其1x1像素未修飾,並將其粘貼到屏幕外某處(儘管有些WM不會讓它實際上脫離屏幕,因此尺寸也很小)。
查看事件設備接口/dev/input
。
一個很好的Python接口是http://pythonhosted.org/evdev/
更多信息:
使用輸入子系統,第二部分
Linux雜誌,問題#107,2003年3月
http://www.linuxjournal.com/article/6429
我在一個類似的工作項目,並可能會使用evdev來捕獲鍵盤事件,但XTest(在Xlib層)會生成虛擬鍵盤事件。
由於/dev/input
低於X,因此不需要重點顯示窗口。
UPDATE(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
- 1. 修改的USB鍵盤驅動程序未接收按鍵(Linux)
- 2. 如何在Linux上通過USB連接時從HID識別鍵盤
- 3. Linux的USB連接/斷開事件
- 4. 檢測iPad鍵盤隱藏與外部鍵盤連接?
- 5. 聽USB鍵盤與Python
- 6. 將多個鍵盤連接到USB端口時發送消息到指定的USB鍵盤
- 7. Java直接從鍵盤讀取輸入
- 8. USB設備連接
- 9. Android的USB連接
- 10. 連接PC C++與通過WiFi直接
- 11. 無法從通過USB連接與WAMP
- 12. HTC Desire usb連接問題與Ubuntu 10.04
- 13. Qt直接連接
- 14. 直接P2P連接
- 15. USB鍵盤協議
- 16. moveToThread()是否重寫與排隊連接的直接連接?
- 17. 即使連接了硬件鍵盤,也顯示軟鍵盤
- 18. 如何在物理鍵盤連接時顯示虛擬鍵盤
- 19. 強制屏幕鍵盤顯示當藍牙鍵盤連接
- 20. 區分窗口上連接的鍵盤?
- 21. 連接無線/無線鍵盤到Android
- 22. Guacamole SSH斷開連接,沒有鍵盤
- 23. 連接USB條形碼掃描器時屏幕鍵盤不工作
- 24. 當建立FTDI USB串口連接時,鍵盤和藍牙死機
- 25. 如何連接鍵與值?
- 26. AOA USB連接問題
- 27. USB-zigbee連接和編程
- 28. Arduino到Ubuntu USB連接
- 29. 遠程USB連接C
- 30. Libfreenect2 USB連接失敗
http://www.x.org/wiki/XI2 – 2013-02-11 04:02:29
做到這一點......不告訴我很多東西。我想我應該使用XGrabDevice?但我在哪裏可以看到這個顯示? – Rena 2013-02-12 05:08:59