/dev/input/by-pathにデバイスごとに2つのエントリがあるのはなぜですか?

/dev/input/by-pathにデバイスごとに2つのエントリがあるのはなぜですか?

出ると、/dev/input/by-path入力周辺機器を見ることができます。

キーボードとマウスがあり、私のプラットフォームでは、出力は次のようになります。

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse
pci-0000:05:00.0-usb-0:1.1:1.0-mouse
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd
  1. デバイスごとに2つのアイテムがあるのはなぜですか?
  2. 各項目の目的は何ですか?

ところで、open(<path_to_device>, O_RDONLY)入力を受け取る人はたった一人だけです(キーボードの場合はこの人ですusb-0:1.2:1.0)。

(私はUbuntuを実行しています。あなたは知りません!)

答え1

デバイスごとに2つのアイテムがあるのはなぜですか?

。デバイスごとに2つの項目がありません。はい、ペアリングする*-event-mouse*-mouse同じpci-0000:05:00.0-usb-0:1.1:1.0識別子を共有するため、同じデバイスであることを示します。一方、デバイス*-event-kbdは異なります。

各項目の目的は何ですか?

runの場合、ls -l /dev/input/by-path出力は次のようになります(はい)。

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd -> ../event5
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse -> ../event6
pci-0000:05:00.0-usb-0:1.1:1.0-mouse -> ../mouse0
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd -> ../event13

ご覧のとおり、デバイスevent*がありますmouse*このファイル違いを説明してください。

  • event*

    evdev汎用入力イベントインタフェースです。カーネルで生成されたイベントをタイムスタンプとともにプログラムに直接渡します。イベントコードはすべてのアーキテクチャで同じで、ハードウェアに依存しません。

    これは、ユーザースペースがユーザー入力と連携するのに好ましいインターフェースであり、すべてのクライアントがそれを使用することをお勧めします。

  • mouse*

    mousedevマウス入力を使ったレガシープログラムを正しく動作させる技術です。これはマウスまたはデジタイザ/タブレットからイベントを取得し、/dev/psauxユーザーがPS / 2スタイル(ala)マウスデバイスを使用できるようにします。

sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse別のコンソールで実行すると、sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-mouseどちらもマウスから読み取られますが、バイトストリームが異なることがわかります。

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbdあなたはキーボードがあなたのものであることを確認しました。残りのデバイス(pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd)は異なると思います。ls -l上記のようにどのイベントに該当するかを調べる必要があります。

$ # Example from my laptop
$ cat /sys/class/input/event13/device/name
Laptop_Integrated_Webcam_FHD: I

私のWebカメラには物理ボタンはありませんが、同じドライバがいくつかの物理ボタン(スナップボタンなど)を持つWebカメラをサポートしているようです。あなたの場合、残りのデバイスも通常のキーボードではないかもしれません。

関連情報