キーボードレイアウトとxmodmapの関係

キーボードレイアウトとxmodmapの関係

私はXubuntuを使用しています。ログインする前にキーボードレイアウトを選択できます。xmodmap一部のキーを再マッピングするために使用します。

私は2つに興味があります:

  1. (a)ノートブックを開くとき、(b)起動中、(c)システムにログインするとき(これら3つの手順)、システムを使用するとき(ログイン)キーマップの状態がどのように変わりますか?
  2. さまざまな段階で画面にどの記号が表示されるのか(およびどの制御キーが送信されるのか)の原因は何ですか?キーを押すと、キーボードドライバに信号(?)が送信され、どのシンボルが表示されるかを決定する意思決定プロセス(アプリケーションと設定ファイル)が必要です。この質問に対する答えは、アプリケーションのリストとこれらの設定ファイルへのパスです(私は特にUbuntu(Debianベースのシステム)に興味がありますが、他のシステムについて説明できますが、Ubuntuが好ましい)。

ベストアンサー1

これには、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キーボードは、キーを押したり放したときに1つの8桁の数字のみを送信します。 US / UK 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、モードスイッチ、Caps Lock / Shift Lockなどのいくつかの特殊なケースはX11にハードコードされています。 Shiftのような他の側面は実際に設定可能です。モードスイッチやNum Lockキーとは異なり、任意のキーをShiftキーとして機能させるようにマッピングできます。

KEYCODE は、オペレーティングシステムのカーネルから送信された物理キーを表します。各KEYCODEは8つの可能なKEYSYMにマップできます。レベル1〜4とも呼ばれる4つのレベルのみが使用されます。レベル1は、アクティブな修飾子がない場合に印刷されるKEYSYMを指定します。通常、小文字と数字です。修飾子は、修飾子が有効になっているときに(押すかオンになっている)他のKEYCODEによって生成されたKEYSYMを変更するKEYCODEです。修飾キーコードも Xmodmap で制御されます。レベル2は、Shift修飾キーを押したときに送信されるKEYSYMを指定します。レベル3はモードスイッチKEYSYMを押すとすぐにアクティブになります。レベル 4 は、Shift キーとモードスイッチの両方が有効になると有効になります。

KEYSYMが生成されると、直接解釈が可能ですが、ほとんどの場合テキストに変換されます。すべてのKEYSYMがテキストになるわけではなく、将来のKEYSYMにのみ影響を与える可能性があります。もちろん、テキスト表現はありませんが、他の文字を構築するために使用される多くのKEYSYMを持つShift_Lの例を挙げることができます。私のシステムのリストは次のとおりです/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がキーをマッピングすることを決定した番号です。

おすすめ記事