Linux ではキーボード マッピングはどのように機能しますか?

Linux ではキーボード マッピングはどのように機能しますか?

私は、Linux でキーボード マッピングとそれに関連するものがどのように組み合わされているかを理解するのに常に苦労してきました。

何かが壊れたとき、古いメーリングリストやフォーラムの投稿を延々と調べて、それ問題を解決する 1 つのコマンドまたは inputrc 行。

vim でバックスペースが機能しない、ターミナル タイプを切り替えるまで bash で + 矢印が機能しないなどの典型的な問題がありますCtrl。または、最近遭遇した問題では、新規の Debian インストールで@キーが実際に を印刷し""を印刷します@(キーボード レイアウトが間違っているのでしょうか?)

ファイルやツールを見るだけでは、あまり役に立ちません。inputrc? xmodmap? setxkbmap? console-setup? 実際にどこから始めればいいのでしょうか?理解するキーボードの問題を解決するために、誰かの疑わしいコマンドを試す必要がないようにするには、どのように機能するのでしょうか?

答え1

これは本来あるべきものよりはるかに複雑ですが、これが私の試みです。

最も基本的なレベルでは、カーネルはキーボードデバイスを認識する方法を知っており、コンソールキーマップこれはキーボードを設定する最も簡単な方法であり、考慮すべき変数は 1 つだけですが、これらの設定は Linux テキスト コンソールのキーボード入力にのみ影響します。

Xorg に慣れると、物事は少し複雑になりますが、実際にはある程度理解できます。Xorg には、理解することが非常に重要な特定の概念がいくつかあります。

  • Xorg はカーネルをバイパスし、コンソールで指定されたキーマップを無視して、キーボード デバイスと直接通信します。
  • Xorg では xorg.conf ファイルでキーボードの特定のオプションを設定できますが、現在の Linux ディストリビューションは xorg.conf ファイルがなくても実行できるように最善を尽くしています。Xorg のバージョンによっては、セクションInputClass(Xorg の新しいバージョンの場合) またはInputDeviceセクション (古いリリースの場合) 内で XkbLayout を指定する必要がある場合があります。
  • Xorg では、キーが押されたときに解釈する特定のレイヤーがいくつかあります。
  1. 最も基本的なレベルでは、各キー押下イベントは数値のキーコードで表されます。
  2. XkbModel と XkbLayout を組み合わせて使用​​すると、特定のキーコードを実際のキー イベントに関連付けることができます。たとえば、私のキーボードでは、キーコード 50 は を生成しますShift_L
  3. オプションで、キーボードに複数の XkbLayouts を指定し、XkbOptions(完全なリストは通常​​ に保存されます/usr/share/X11/xkb/rules) を使用してレイアウトの切り替え方法を設定できます。 (これは、たとえば、Dvorak を独学しようとしている場合や、英語とロシア語のキーボード レイアウトを切り替えたい場合に便利です)。
  4. 各キーコードは、押されている修飾子に応じて複数の方法で解釈できます。押されているxmodmap修飾子に基づいて、どのキー イベントが送信されるかを確認できます。

答え2

最近では、コンソールと X は実際に連携して動作できるようになりました。

これがまだ完全に標準化されているかどうかはわかりませんが、Debian Unstable (およびおそらく最新の Xorg とコンソール ツールを備えた他のディストリビューション) では、/etc/default/keyboardコンソールと X でキーボードを設定するために X スタイルの構文を使用できます (少なくとも console-tools と console-setup を使用している場合)。残りは、clee が説明したとおりです。

答え3

vim ではバックスペースが機能しないなどの典型的な問題があります...

おそらく、現在のエディションで入力した文字のみをバックスペースで削除し、編集モードに入る前にすでに存在していた文字を削除することを防ぐという vim の動作について話しているのでしょう。

この動作は設定によって変更されます:

set backspace=indent,eol,start

関連情報