/dev/input - これは一体何ですか?

/dev/input - これは一体何ですか?

ハードウェアがオペレーティングシステムとどのようにやり取りするのか疑問に思い、次の記事を見つけました。キーボード入力とテキスト出力はどのように機能しますか?

/dev/input ディレクトリで多くの魔法が起こっているようです。私は私のオペレーティングシステム(Ubuntu 16.10)を見て、何が見つかるのかを調べることにしました。これらのファイルはすべて0バイトとしてリストされています。これを実行すると、sudo cat mouse0 | hexdump -C次の16進データが表示されます。

00000000  b3 82 8a 58 00 00 00 00  53 74 09 00 00 00 00 00  |...X....St......|
00000010  01 00 1c 00 00 00 00 00  b3 82 8a 58 00 00 00 00  |...........X....|
00000020  53 74 09 00 00 00 00 00  00 00 00 00 00 00 00 00  |St..............|
00000030  b6 82 8a 58 00 00 00 00  06 56 0e 00 00 00 00 00  |...X.....V......|
00000040  01 00 10 00 01 00 00 00  b6 82 8a 58 00 00 00 00  |...........X....|
00000050  06 56 0e 00 00 00 00 00  00 00 00 00 00 00 00 00  |.V..............|

だからいくつかの質問があります。

  1. このファイルの目的は何ですか?私が見ると、これらのデバイスファイルはスキャンコードをカーネルからXサーバーに転送するブローカーとしてのみ使用されているようです。カーネルからXサーバーに直接送信したらどうでしょうか?

  2. なぜそんなにたくさんあるのですか? 20以上の別々のイベントファイルがありますが、キーボードとマウスは1つだけです。

ベストアンサー1

この質問に逆順で答えます。

  1. なぜそんなにたくさんあるのですか?

これらのデバイスは、システム内のほとんどの入力を表します。で管理されていないマイクなどの他のデバイスもあります/dev/input。 1つのキーボードと1つのマウスを組み合わせると、デバイスが2つになるという仮定とは異なり、最も単純なキーボードとマウスはまだ6つのデバイスになります。

なぜ6ですか? Xorgは起動時にテスト入力キーボードとテスト入力マウス(両方とも仮想)を生成するためです。また、実際のキーボードとテストキーボードを基本仮想デバイスに統合します。つまり、入力の多重化を実行します。テストマウスと実際のマウスでも同じ現象が発生します。

また、一般的なコンピュータ(デスクトップまたはラップトップ)には、キーボードに加えて電源ボタン、スリープボタンなどの他のボタンがあります。

デバイスには、eventNXorgが作成するデバイスとコンピュータが持つデバイスがあります。NのIDに似た連続IDからxinput。たとえば、マイコンピュータには次のものがあります。

[~]# ls -l /dev/input/
total 0
drwxr-xr-x 2 root root     100 Jan 26 16:01 by-id
drwxr-xr-x 2 root root     140 Jan 26 16:01 by-path
crw-rw---- 1 root input 13, 64 Jan 26 16:01 event0
crw-rw---- 1 root input 13, 65 Jan 26 16:01 event1
crw-rw---- 1 root input 13, 74 Jan 26 16:01 event10
crw-rw---- 1 root input 13, 75 Jan 26 16:01 event11
crw-rw---- 1 root input 13, 76 Jan 26 16:01 event12
crw-rw---- 1 root input 13, 77 Jan 26 16:01 event13
crw-rw---- 1 root input 13, 66 Jan 26 16:01 event2
crw-rw---- 1 root input 13, 67 Jan 26 16:01 event3
crw-rw---- 1 root input 13, 68 Jan 26 16:01 event4
crw-rw---- 1 root input 13, 69 Jan 26 16:01 event5
crw-rw---- 1 root input 13, 70 Jan 26 16:01 event6
crw-rw---- 1 root input 13, 71 Jan 26 16:01 event7
crw-rw---- 1 root input 13, 72 Jan 26 16:01 event8
crw-rw---- 1 root input 13, 73 Jan 26 16:01 event9
crw-rw---- 1 root input 13, 63 Jan 26 16:01 mice
crw-rw---- 1 root input 13, 32 Jan 26 16:01 mouse0
crw-rw---- 1 root input 13, 33 Jan 26 16:01 mouse1

そしてxinput私に次のIDを与えました。

[~]$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Optical Mouse                id=10   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ USB 2.0 Camera                            id=11   [slave  keyboard (3)]
    ↳ Asus Laptop extra buttons                 id=12   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]

eventN該当する項目を参照id=N

Xorgなし

1.1この文書の目的は何ですか?

すべてのランダム入力(私のUSBカメラを含む!)はXorgの仮想キーボードの一部として扱われます。これにより、入力の多重化と逆多重化が可能になります。たとえば、USBマウスまたはトラックパッドを介してマウスを動かすことができ、アプリケーションはその違いを知る必要はありません。

(実際のUSBカメラは、オンとオフを切り替えることができるボタンがあるため、仮想キーボードの一部です。ボタンはキーボードサブシステムの一部になります。実際のビデオ入力はで処理されます。/sys/class/video4linux

つまり、アプリケーションには実際には1つのキーボードと1つのマウスしかありません。ただし、Xorgとカーネルの両方がこれらの違いを知る必要があります。最後の部分につながります。

1.2 カーネルからXサーバに直接送ってはならないのはなぜですか?

Xorgは違いを知る必要があるからです。

状況によっては便利です。 Xorgのキーを各スレーブ入力デバイスに異なる方法で再マッピングできます。たとえば、レーシングゲームに使用されるときに各ペダルに出力とa出力bを提供するペダルを備えたゲーム機器があります。cただし、プログラミング時にキーボード自体のキーを再マップせずに、このキーをEsc, , に再マップします。CtrlAlt

また、システムがXorgを実行する必要はありません。たとえば、ヘッドレスサーバーでは、次のような出力を取得できます。

[~]$ ls -l /dev/input/
total 0
drwxr-xr-x 2 root root      80 Nov  8 02:36 by-path
crw-rw---- 1 root input 13, 64 Nov  8 02:36 event0
crw-rw---- 1 root input 13, 65 Nov  8 02:36 event1
crw-rw---- 1 root input 13, 66 Nov  8 02:36 event2

入力デバイスは、キーボードやマウスではなくシリアルポート(特にこの場合)に対応します。

おすすめ記事