ここには、KEYCODEからKEYSYMへのマッピングとKEYSYMからテキストへのマッピングの2つのレイヤーがあります。ATキーボードスキャンコードをXTスタイルのKEYCODEにマッピングするか、USBキーボードHIDコードをKEYCODEにマッピングする必要があるカーネルをカウントする場合、より多くのレイヤーがあります。KEYCODEは、オペレーティングシステムのカーネルがX11サーバーに渡す8ビットの符号なし整数です。LinuxやSolarisなどのオペレーティングシステムによって異なる場合があります。Linuxでは、これらのKEYCODEは通常、古いXT PCキーボードで使用されている番号と同じです。AT、PS / 2、またはUSBキーボードを備えた新しいコンピューターでは、通常、これらのキーボードを古いXTコードにマッピングするだけで、キーを簡単に使用できます。
生のキーボードコードは、XT、AT、PS / 2、USBのいずれであっても、キーボード上の物理的な場所を表します。XTキーボードは、キーを押したり放したりするときに、単一の8ビット数のみを送信します。US / British XTキーボードのqキーは数値16を送信します。フランス語キーボードでは、同じ物理キーにaというラベルが付けられますが、16を送信します。オペレーティングシステムの上位層が実際の意味を割り当てます。キーがXTキーボードでリリースされると、同じキーコードに128が加えられて送信されます。この例では、qが押されると16が送信されますが、リリースされると、142(16 + 128)が送信されます。ATキーボードは一連の数字であるスキャンコードを使用し、かなり長くなる可能性があります。キーリリースでは、追加のコードが追加されます。たとえば、一時停止のスキャンコードはE1、1D、45、E1、9D、C5です。DOS、Windows、Linux、FreeBSDなどのほとんどのオペレーティングシステム、BIOSはすべて、スキャンコードをはるかに単純なXTスタイルのスキャンコードにマッピングします。また、HIDコードを送信するUSBキーボードなど、さまざまなコードを使用する新しいキーボードのサポートも容易になります。すべてのコードは、X11またはアプリケーションが認識する前に、オペレーティングシステムによって同じ一貫したコードセットにマッピングされます。
X11はプロセスのこの部分を無視します。カーネルからKEYCODEを取得し、独自のマッピングを適用して、そのKEYCODEをKEYSYMに変換します。 Xmodmapは、そのマッピングを制御するための標準ツールです。キーボードマッピングの動作の多くは構成可能ですが、Num Lock、Mode Switch、Caps Lock / Shift Lockなど、X11にハードコーディングされた特殊なケースがいくつかあります。Shiftなどの他の側面は、実際に構成可能です。モードスイッチやNum Lockとは異なり、任意のキーをシフトとして機能するようにマッピングできます。
KEYCODEは、オペレーティングシステムのカーネルによって送信される物理キーを表します。すべてのKEYCODEは、8つの可能なKEYSYMにマップできます。使用されるのは4つだけで、レベル1〜4と呼ばれることもあります。レベル1は、アクティブな修飾子がないときに印刷されるKEYSYMを指定します。多くの場合、これらは小文字と数字です。モディファイヤは、モディファイヤがアクティブである(押されているか、オンに切り替えられている)ときに、他のKEYCODEによって生成されたKEYSYMを変更するKEYCODEです。モディファイヤキーコードもXmodmapによって制御されます。レベル2は、シフト修飾子が押されたときに送信されるKEYSYMを指定します。モードスイッチKEYSYMを押すと、レベル3がアクティブになります。レベル4は、シフトキーとモードスイッチの両方がアクティブなときにアクティブになります。
KEYSYMが生成されると、これは直接解釈されますが、ほとんどの場合、テキストに変換されます。すべてのKEYSYMがテキストに変わるわけではなく、将来のKEYSYMにのみ影響を与える可能性があります。1つの例は、もちろんShift_Lです。これにはテキスト表現がありませんが、別の文字を作成するために使用されるKEYSYMもいくつかあります。私のシステム上のそれらのリストは以下にあり/usr/share/X11/locale/en_US.UTF-8/Compose
ます。そのような例の1つにdead_acute KEYSYMがあります。これを押すと、次のKEYSYMが鋭角アクセント付き文字に変換されます。KEYSYMをUnicodeに変換するための標準マッピングがあります。
これがすべて言われたので、Xmodmapは廃止され、はるかに洗練されたXKBに置き換えられていることに注意してください。これは、KEYCODEがKEYSYMにマップされる方法に影響しますが、カーネルがKEYCODEを生成する方法や、KEYSYMがテキストに変換される方法や、同じままの構成方法には影響しません。Xmodmapの動作を復元してXKBを無効にすることができます。Xmodmapをサポートするための互換性レイヤーもありますが、完全には互換性がないため問題が発生する可能性があります。XKBの規則は下に/usr/share/X11/xkb/
あり、はるかに洗練されています。KEYCODEをKEYSYMにマッピングするためのキーボードレイアウトの生成方法については、他にもいくつかの優れたドキュメントがあります。
Linuxコンソールに関しては/usr/share/keymaps
、loadkeys
コマンドに格納されて読み込まれる独自のキーボードレイアウトがあります。BIOSおよびGRUB2を含む初期のブートローダーステージでは、キーボードマッピングは、BIOSがキーをマップすることを決定した番号になります。