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に3つの入力デバイスがあるのはなぜですか?
/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
?
答え1
部分的な答え:
カーネルinput
層は、すべての可能なトランスポート技術によって可能なすべての入力デバイスを抽象化します。 PS / 2キーボード、シリアルマウス、USBキーボード、USBカメラボタンなどがすべて入力デバイスとして表示されます。これらのデバイスのイベントはを通じて利用でき、を使用して表示できます/dev/input/event*
。evtest
その上にレイヤーを追加し(Xevdev
や Wayland などlibinput
)、イベントを選択して(グラフィックアプリケーションで)使用できるようにします。
階層の反対側には、ほとんどのデバイスにも特定の転送に関連付けられたデバイスファイルがあります。重要なカテゴリは、デバイス機能の標準化された記述子(「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
hidraw0
「キーボードなどのUSB HIDインターフェースがあります。カーネルはこのクラスを理解し、デバイスファイルと/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インターフェースがあります。入力層に渡すことができないため、通常のHIDイベントのデバイスファイルを取得し、rawデバイスファイルHIDイベントもインポートします。hiddev0
」hidraw1
hid-generic
したがって、計算方法に応じて3つではなく2つのHIDインターフェイスがあり、各インターフェイスには2つの関連デバイスファイルがあるため、合計4つのデバイスファイルがあり、そのうち入力層デバイスファイルのみが自動的に使用されます。
についてはなぜYubikeyがこれをするということは、Yubikeyだけが知っています。合理的な推測は、すべてのオペレーティングシステム(キーボードHID)から選択できる一般的なインターフェースと、Yubikey固有のソフトウェアでのみ理解できるYubikey固有の構成用のインターフェースを提供することです。