
答え1
入力レイヤーの非常に簡単な概要:
キーボードデバイスはUSBまたはPS / 2ポートなどを介してPCに接続されます。このメカニズムのカーネルドライバは、キーボードのキーを押すと通信を処理する方法を知っています。
USBキーボードには次の標準があります。高圧ガス放電管(ヒューマンインターフェースデバイス)が存在します。これはキーボードだけでなく、マウス、ジョイスティック、その他の入力デバイスにも当てはまります。したがって、記述子カーネルがエクスポートできる信号と、次のようなさまざまなキーストロークのコードを教えてくれます。静かな標準化されています。
ただし、一部のキーボードのキーは標準化されておらず(たとえば、Fn一部のキーボードのキー)、そのキーに信号を送信する方法は製造元によって異なります。
カーネルにはHIDデバイスを処理するための特別な層があります。この層は生のHID通信を可能にし、/dev/hidrawX
HIDイベントをカーネル入力イベントに変換します。
カーネル入力層は以下を使用します。スキャンコード(デバイス固有の物理キーに対応する数値)を次のように変換します。キーコード(すべてのデバイスにわたって標準化された論理キーに対応する数値)両方がイベントとして提供されます/dev/input/eventX
。変換テーブルを表示するには、などをevdev
使用してこれらのイベントを表示できます。showkey
dumpkeys
Xサーバー(またはWayland)はこれらすべてのイベントを読み取り、主なシンボル(例:、等a
またはá
特殊、例AudioMute
:)。 Xアプリケーションはこのシンボルを受け取り、それに応じて動作できます。アプリケーションビューを使用してこのレイヤーを表示しますxev
。xmodmap
xkbd
xorg.conf
対応するにはAudioMute
いくつかのアプリケーションが必要です。通常、これはウィンドウマネージャですが、ウィンドウマネージャがこれを行わない場合は、別のアプリケーションも機能します。
したがって、単一の「キーボードドライバ」はなく、はるかに複雑で、特に「自動」は必要ありません。
答え2
一般的に言えば、あなたの理解は正確です。キーを押すと、キーボードはデフォルトで各キーを識別する一連の番号であるスキャンコードを送信します。スキャンコードはキーコードにマッピングされます。各キーコードは、プログラムが特定のキー押下にどのように反応するかを定義する機能に対応します。 Xorgとコンソールは異なるキーコードセットを使用します。私はウェイランドについてはよくわかりませんが、独自のキーコードセットを使用することもできます。キーコードはキーシンボルにマップされます。キーシンボルを使用すると、開発者はより高い抽象化レベルでキーボードを操作できます。
showkey --scancode
コンソールで実行し、それぞれを実行してスキャンコードとキーコードを確認できますshowkey --keycode
。 Xorgではxev
後者を使用する必要があります。
これらの抽象化レベルを使用すると、Linux環境のさまざまな部分に影響を与える柔軟で複雑なマッピングスキームを作成できます。これArchWiki 記事描画技術に関する多くの情報が含まれています。もっと学びたいなら読んでください。
もっとあります記事インターネットでは、キーボードが内部でどのように機能するかを説明します。記事が1999年に書かれたのか、2010年に書かれたのかは関係ありません。それ以来、キーボードの面ではあまり変わりませんでしたが、USB HIDデバイスは「クラシック」PS / 2キーボードと同じように機能しないことに注意してください。