為什麼單個 Yubico 顯示為多個設備,hid-generic 和 input 有什麼區別?
當我插入我的 Yubikey 時,它顯示為,
usb 1-1: new full-speed USB device number 46 using xhci_hcd usb 1-1: New USB device found, idVendor=1050, idProduct=0407, bcdDevice= 5.12 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 usb 1-1: Product: YubiKey OTP+FIDO+CCID usb 1-1: Manufacturer: Yubico input: Yubico YubiKey OTP+FIDO+CCID as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1050:0407.006A/input/input93 hid-generic 0003:1050:0407.006A: input,hidraw0: USB HID v1.10 Keyboard [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input0 hid-generic 0003:1050:0407.006B: hiddev0,hidraw1: USB HID v1.10 Device [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input1
為什麼 Yubikey 有三個輸入設備?
/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1050:0407.006A/input/input93 usb-0000:00:14.0-1/input0 usb-0000:00:14.0-1/input1
hid-generic
和有什麼區別input
?以及如何hidraw
發揮作用?
部分答案:
input
核心層是所有可能的輸入設備的抽象,通過所有可能的傳輸技術。PS/2 鍵盤、串列滑鼠、USB 鍵盤、USB 相機按鈕等最終都顯示為輸入設備。這些設備上的事件可通過 獲得/dev/input/event*
,您可以使用它evtest
來顯示它們。在其上層(如 X viaevdev
或 Wayland vialibinput
)然後拾取這些事件並使它們可用於(圖形應用程序)。在層次結構的另一端,這些設備中的大多數還具有與特定傳輸關聯的設備文件。一個重要的類是 HID(= 人機介面設備),這些設備(通常是 USB)帶有用於設備功能的標準化描述符(“HID 描述符”)。所以設備本身告訴核心它是鍵盤、滑鼠、操縱桿等;它生成哪些鍵或移動事件,在某種程度上如何配置它,等等。
HID 設備也總是會得到一個
/dev/hidraw*
文件,人們可以在其中讀取原始 HID 事件(如有必要)。通常,如果核心能夠理解 HID 描述符,這些事件就會由核心處理,然後作為輸入層事件提供。所以你需要像這樣閱讀系統日誌條目:
input: Yubico YubiKey OTP+FIDO+CCID as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1050:0407.006A/input/input93 hid-generic 0003:1050:0407.006A: input,hidraw0: USB HID v1.10 Keyboard [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input0
“有一個類鍵盤的USB HID介面。核心理解這個類,它會得到一個
hidraw0
設備文件和一個/dev/input/eventX
(可能X=93)設備文件。hid-generic
核心模組檢測到這一點,並呼叫input
核心層。”hid-generic 0003:1050:0407.006B: hiddev0,hidraw1: USB HID v1.10 Device [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input
“有一個 USB HID 介面,其類不被核心理解。由於無法轉發到輸入層,它將獲取
hiddev0
通用 HID 事件的設備文件,並且還將獲取hidraw1
原始設備文件HID 事件。hid-generic
模組檢測到這一點。”所以看你怎麼算,不是三個,而是兩個HID介面,每個都有兩個關聯的設備文件,一共四個設備文件,其中只有輸入層設備文件是自動使用的。
至於Yubikey為什麼會這樣,只有 Yubikey 知道。一個合理的猜測是,它們提供了一個可以被任何作業系統(鍵盤 HID)拾取的通用介面和一個用於 Yubikey 特殊配置的介面,只有 Yubikey 特定的軟體才能理解。