如何調試來自輸入設備的輸入 (/dev/input/event*)
我有一個使用 imo 驅動程序的 IR 接收器,我想讓它與核心一起工作。現在遙控器上的一半鍵(圖像)可以工作,但是像數字鍵一樣重要的想法卻不行!
奇怪的想法是核心鍵盤映射模組(rc-imon-pad)似乎是正確的,但它似乎並沒有真正使用,因為完全沒有該模組,相同的鍵正在工作。
當我載入 imon 時,似乎 rc-imon-pad 模組總是被載入,然後我懷疑鍵碼被記憶體了,所以如果我解除安裝 rc-imon-pad 並沒有什麼區別
現在我迷路了,如果我這樣做
cat /dev/input/event5
或者ir-keytable -t
無論我按什麼鍵都有數據,所以驅動程序註冊了按鈕,但似乎它們被翻譯成錯誤的鍵碼。我的核心是來自 Natty 的 ubuntu 庫存核心(Linux xbmc 2.6.37-11-generic #25-Ubuntu SMP Tue Dec 21 23:42:56 UTC 2010 x86_64 GNU/Linux)
我有相同的遙控器,我讓它向我的 2.6.38-gentoo-r3 核心發送正確的鍵碼。我沒有將鍵碼編譯為模組,因為他們可能還沒有時間來選擇單個鍵映射。要麼全有,要麼全無,我不喜歡無數無用的模組把我弄得亂七八糟。相反,我讓 v4l-utils 用 udev 處理它。
我學到了幾件事:
- 檢查 ir-keytable -r 的輸出,它應該列出適用於您的遙控器的所有鍵碼。
- 手動載入密鑰表:ir-keytable -c -w bleh/keymaps/imon_pad,之後 ir-keytable -r 應該將表格返回給您
- 您實際上可能有一個錯誤的接收器,您沒有提及歷史。我記得在lirc-list上至少看到一條消息,其中有人說將案子退回並獲得一個新案子解決了他的問題。
讓我們知道進展如何。
您可能會發現有用
xinput list
的和xinput test <device>
.例如,
$ xinput 列表 ⎡ 虛核指針id=2【主指針(3)】 ⎜ ↳ 虛核XTEST指針id=4[從指針(2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [從指針 (2)] ⎣ 虛擬核心鍵盤id=3 [主鍵盤(2)] ↳ Virtual core XTEST keyboard id=5 [從鍵盤(3)] ↳ Power Button id=6 [從屬鍵盤 (3)] ↳ Video Bus id=7 [從鍵盤 (3)] ↳ Sleep Button id=8 [從屬鍵盤 (3)] ↳ Asus 筆記型電腦額外按鈕 id=9 [從鍵盤 (3)] ↳ AT Translated Set 2 keyboard id=10 [從鍵盤(3)]
我可以監視我的鍵盤 (
xinput test 10
) 或觸摸板 (xinput test 11
, 甚至**xinput test "SynPS/2 Synaptics TouchPad"
**) 的各種輸入事件,它們可以很好地列印到控制台,參數也可以提取和列印。這不會解決您的問題,但至少會通過破譯例如
cat /dev/input/event1
產生的混亂來有所幫助。編輯(來自評論中的@alphanum):
我在 10 年前的回答中並不是很準確……抱歉。享受這個快速圖表:
┌─────────────────────┐ ┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ HID events │ │ xinput events │ │ │ │ │ HID/input device ├───────────►│ Device-specific ├──────────────►│ the kernel ├───►│ Userspace (apps) │ │ (e.g. USB keyboard) │ ▲ │ driver │ ▲ │ │ │ │ └─────────────────────┘ │ └─────────────────┘ │ └──────────────┘ └──────────────────┘ │ │ evtest /dev/input/XX xinput test <xinput id>
它顯示了2點:
- 你得到的結果
xinput test
是“xinput-unified”;即由設備驅動程序處理。這些更類似於使用者空間應用程序所看到的。- 您從中獲得的結果
evtest /dev/input/XX
更加“原始”,尚未翻譯成 xinput 格式。這些更類似於您的 HID 設備將看到的內容。與您是否建構物理 HID 設備或應用程序相關,您可以選擇使用
evtest
或xinput test
進行調試。比較兩者也可能有助於解決設備驅動程序問題。