web-dev-qa-db-ja.com

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

Linuxでキーボードマッピングとそれに関連するものを組み合わせる方法を理解するのにいつも苦労してきました。

物事が壊れたとき、無限の古いメーリングリストとフォーラムの投稿を調べて見つける必要がある場合、私の血は沸騰します[〜#〜] that [〜#〜] 1つのコマンドまたはinputrc行問題。

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

ファイルとツールを見ただけではあまり役に立ちません。 inputrc? xmodmap? setxkbmap? console-setup?実際にはどこから始めればよいですか理解仕組みキーボードの問題を修正するために誰かの怪しいコマンドを試す必要はありませんか?

18
Alex B

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

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

Xorgに入ると、物事は少し複雑になりますが、実際には一種の理にかなっています。 Xorgには、理解することが非常に重要ないくつかの特定の概念があります。

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

最近では、コンソールとXは実際に連携して動作します。

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

3
KellyClowers

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

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

その振る舞いは次の設定で変更されます:

set backspace=indent,eol,start
0
nozimica