Linuxカーネルはキーボード入力/出力をどのように処理しますか?

Linuxカーネルはキーボード入力/出力をどのように処理しますか?

私は仮想端末デバイス(たとえば)を理解していませんが、ボタンを押すと/dev/tty1「切り替え」できることがわかります。tty1ctrl + alt + f1

カスタムキーボードレイアウトがありますが、/usr/share/X11/xkb/symbols/usXが実行されている場合にのみ「動作」します。

仮想端末とXはどちらも独自の方法でキーボード入力/出力を管理しているようですが、おそらくどちらも(Linux)カーネルと対話するので、キーボードハードウェアの抽象化を提供する必要があります。

Linuxカーネルはキーボード入力/出力をどのように処理しますか?すべてのスキャンコード/キーコード/keysims/などのリストと、Linuxが「キーボード」の全体的な概念を管理する方法に関する全体的なロジックを含むソースファイルはありますか?

(私はLubuntuを実行しています。)

答え1

バラよりキーボード入力とテキスト出力はどのように機能しますか?このトピックの概要を見てください。

より詳しく説明すると、Linuxではカーネルがハードウェアからスキャンコードを受け取り、キーコードに変換します。 (この用語は完全に標準ではありません。両方の用語で「スキャンコード」または「キーコード」を使用できます。)この変換がどのように機能するかは、キーボードドライバによって異なります。 PS/2 キーボードの場合は設定できます。setkeycodes。 USBキーボードの場合は設定できます。寄稿者: udev。また、見ることができますアーチウィキ。キーボード、マウスなど、すべてのユーザー入力デバイスはイベントデバイスを介して公開されます/dev/input/event*

Linuxコンソールでは、キーコードはコンソールキーマップに従ってエスケープシーケンスにマップされます。コンソールはテキスト端末であるため、アプリケーションは自分自身を表す印刷可能文字と制御文字またはエスケープシーケンスを使用して、エンコードされたファンクションキーを含むバイトを表示します。次のコマンドを使用してマッピングを変更できます。loadkeys。マッピングは、キーコードと修飾子の組み合わせ(3つの修飾子:shift、、、、 )からキーシンボルへ、controlキーaltシンボルから文字列(文字またはエスケープシーケンス)への2つのレベルの間接参照を使用します。キーシンボルセットは固定されているため、カスタム組み合わせを定義するには、以前に使用されていなかったキーシンボル(たとえば、、、F13... F14)を使用する必要があります。

これらの翻訳を実装するソースコードを確認するには、次の点を確認してください。キーボードドライバそして汎用入力コードウデブそしてリブデフ

X11(GUI)には、アプリケーションが受信するキーコードをマッピングする独自の方法があります。キーシンボルと修飾子は X11 アプリケーションに表示されるため、ファンクションキーに追加のコーディングは必要ありません。実際、Xでキーマップを定義する方法は2つあります。古典的な方法であるxmodmapと、より強力だがより複雑な最新のメカニズムであるXKBです。

関連情報