2013-02-11 84 views
4

我已經購買了USB數字鍵盤,它看起來與普通USB鍵盤的功能完全相同,但只有數字鍵盤鍵和指示燈。它在Linux下正常工作,我可以用它鍵入數字,也可以用我的實際鍵盤輸入數字。我想寫一個應用程序,它可以直接連接到應用程序(響應按鍵和控制LED),而不必有窗口,並防止其他應用程序響應它。我該怎麼做呢?Linux:直接與USB鍵盤連接

+0

http://www.x.org/wiki/XI2 – 2013-02-11 04:02:29

+1

做到這一點......不告訴我很多東西。我想我應該使用XGrabDevice?但我在哪裏可以看到這個顯示? – Rena 2013-02-12 05:08:59

回答

1

那麼,伊格納西奧的評論確實有助於指引我朝正確的方向發展。我需要從gdk_display_get_default()獲取顯示,然後使用gdk_display_get_device_manager(),使用gdk_device_manager_list_devices()找到設備,最後使用gdk_device_grab()獲取設備。 (或者,如果我真的想要,我可以直接使用X API ...)這讓我可以將鍵盤的事件指向我的窗口,而不管焦點如何。

我遇到的一個問題是窗口必須「可見」才能接收事件 - 不是隱藏,最小化或在不同的工作空間上。我可以做的最好的辦法是隱藏它,使其1x1像素未修飾,並將其粘貼到屏幕外某處(儘管有些WM不會讓它實際上脫離屏幕,因此尺寸也很小)。

0

查看事件設備接口/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