GNU/Linux >> Linux の 問題 >  >> Linux

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

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

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

  1. キーボードマッピングの状態がどのように変化するか(a)ラップトップの電源を入れたとき、(b)起動プロセス中、(c)システムにログインしたとき(これらの3つのフェーズ)、およびシステムで作業しているとき(ログインしたとき) 。
  2. 個々のフェーズで画面に表示される(および送信されるコントロールキー)シンボルの原因。キーを押すと、キーボードドライバー(?)に信号が送信され、表示される記号を決定する決定プロセス(アプリケーションと構成ファイル)が必要になります。この質問への答えは、アプリケーションとそれらの構成ファイルへのパスのリストである必要があります(私は、Ubuntu(Debianベースのシステム)に特に興味がありますが、他のシステムについて説明することもできますが、Ubuntuをお勧めします)。

承認された回答:

ここには、KEYCODEからKEYSYMへのマッピングとKEYSYMからテキストへのマッピングの2つのレイヤーがあります。カーネルを数えると、さらに多くのレイヤーがあり、ATキーボードのスキャンコードをXTスタイルのKEYCODEに、またはUSBキーボードのHIDコードをKEYCODEにマップする必要があります。 KEYCODEは、オペレーティングシステムのカーネルがX11サーバーに渡す8ビットの符号なし整数です。 LinuxやSolarisなどのオペレーティングシステムによって異なる場合があります。 Linuxでは、これらのキーコードは通常、古いXTPCキーボードで使用されているのと同じ番号です。 AT、PS / 2、またはUSBキーボードを備えた新しいコンピューターは、通常、これらのキーボードをキーの古いXTコードにマップするだけで、作業をシンプルに保つことができます。

XT、AT、PS / 2、またはUSBのいずれであっても、生のキーボードコードは、キーボード上の物理的な場所を表します。 XTキーボードは、キーを押したり離したりしたときに1つの8ビット番号のみを送信します。米国/英国の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またはアプリケーションがコードを認識する前に、オペレーティングシステムによって同じ一貫性のあるコードセットにマップされます。

関連:ファイル内のこれまたはそれ(2つのこと)をgrepする方法は?

X11はプロセスのこの部分を認識せず、カーネルからKEYCODEを取得し、独自のマッピングを適用してそのKEYCODEをKEYSYMに変換します。 Xmodmapは、そのマッピングを制御するための標準ツールです。キーボードマッピングの動作の多くは構成可能ですが、X11にハードコードされているNum Lock、Mode Switch、Caps Lock /ShiftLockなどの特殊なケースがいくつかあります。 Shiftのような他の側面は実際に構成可能です。モードスイッチやNumLockとは異なり、どのキーもシフトとして機能するようにマッピングできます。

KEYCODEは、オペレーティングシステムのカーネルによって送信される物理キーを表します。すべてのKEYCODEは、8つの可能なKEYSYMにマップできます。 4つだけが使用され、レベル1〜4と呼ばれることもあります。レベル1は、アクティブな修飾子がない場合に出力されるKEYSYMを指定します。これらは多くの場合、小文字と数字です。モディファイアは、モディファイアがアクティブ(押されているかオンになっている)のときに他のKEYCODEによって生成されるKEYSYMを変更するKEYCODEです。モディファイアのキーコードもXmodmapを介して制御されます。レベル2は、シフト修飾子が押されたときに送信されるKEYSYMを指定します。レベル3は、モードスイッチKEYSYMが押され​​るたびにアクティブになります。レベル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をテキストに変換したり構成したりする方法には影響しません。 XKBを無効にして、Xmodmapの動作を復元できます。 Xmodmapをサポートする互換性レイヤーもありますが、完全に互換性がないため、問題が発生する可能性があります。 XKBルールは/usr/share/X11/xkb/の下にあります はるかに洗練されています。 KEYCODEをKEYSYMにマッピングするためのキーボードレイアウトを生成する方法については、他にもいくつかの優れたドキュメントがあります。

Linuxコンソールに関しては、/usr/share/keymapsに保存されている独自のキーボードレイアウトがあります。 loadkeysでロードされます 指図。 BIOSおよびGRUB2を含む初期のブートローダー段階では、キーボードマッピングは、BIOSがキーをマッピングすることを決定した番号に関係なく行われます。

関連:Debian – apt-getを介してアップグレードされたOpenssl、以前のバージョンを示す `openssl version`?
Linux
  1. Lightdmでキーボードレイアウトを変更しますか?

  2. 画面を強制的に空白にして入力を無視しますか?

  3. どのキーボードレイアウトでçと入力できますか?

  1. キーボード入力とテキスト出力はどのように機能しますか?

  2. xmodmap や X ツールを使用せずにキーを再マップする

  3. ステージ 1 の GRUB のキーボード レイアウトを変更する

  1. コンソール(tty)とXの両方でX /コンソールに依存しない方法でキーボードレイアウト/マッピングを変更しますか?

  2. Xmodmapとキーの組み合わせをマッピングしますか?

  3. Xmodmap Shift + KeycodeでKeysymを生成しますか?