Linuxのキーマッピング

Linuxのキーマッピング

人々がコマンドラインで作業するとき、Linuxのインストールで「キーが正しくマッピングされていません」と指摘するのはどういう意味ですか?

基本的にインストールはできませんか?どの追加/特定のマッピングが必要ですか?

Homeまた、私のMacでは、キーとEndキーがCtrl期待どおりに機能しないという話を聞きました。

答え1

スキャンコードとキーコード

一般に、誰かがそう言うならば、これはキーに表示されている機能がキーを押したときにLinuxカーネルに送信された「コード」と一致しないことを意味します。キーにタグ付けされていると考えることができますが、キーのHomeCtrlコード」がカーネルに送信されます。

はるかに低いレベルで実際に起こるのは、各キーにスキャンコードが割り当てられることです。

から抜粋スキャンコードウィキペディアページ

スキャンコード(またはスキャンコード)は、どのキーが押されたかを報告するために、ほとんどのコンピュータキーボードがコンピュータに送信するデータです。キーボードの各キーには数字または一連の数字が割り当てられています。

これらのスキャンコードは、Linuxカーネルによってキーコードにマップされます。これらのキーコードは通常アプリケーションに渡されます。これは別のものです。スキャンコードリソース詳細については、。

メモ:これは過度に単純化されたものですが、このレイヤーの一般的なアイデアを提供したいと思います。重要なのは、キーを押すとスキャンコードが生成され、Linuxカーネルはこれらのスキャンコードを表示してキーコードをエクスポートすることです。

キーコード設定

ツールを使用してスキャンコードキーコードマッピングを変更できますsetkeycodes

setkeycodes scancode keycode ...

setkeycodes コマンドは一度に 2 つの引数を読み込みます。各ペアはスキャンコード(16進数で提供)とキーコード(10進数で提供)で構成されています。これらのペアごとに、カーネルキーボードドライバで指定されたスキャンコードを指定されたキーコードにマッピングするように指示します。

キーコードマッピングはキーマップファイルに保存されます。私のFedoraシステムでは、私のアメリカのキーマップファイルは、/lib/kbd/keymaps/i386/qwerty/us.map.gz次のコマンドを使用して調べて見つけました。

$ locate map.gz|grep us
/lib/kbd/keymaps/amiga/amiga-us.map.gz
/lib/kbd/keymaps/atari/atari-us.map.gz
/lib/kbd/keymaps/i386/qwerty/br-latin1-us.map.gz
/lib/kbd/keymaps/i386/qwerty/is-latin1-us.map.gz
/lib/kbd/keymaps/i386/qwerty/us-acentos.map.gz
/lib/kbd/keymaps/i386/qwerty/us.map.gz
/lib/kbd/keymaps/i386/qwertz/cz-us-qwertz.map.gz
/lib/kbd/keymaps/mac/all/mac-us.map.gz
/lib/kbd/keymaps/sun/sunt5-cz-us.map.gz
/lib/kbd/keymaps/sun/sunt5-us-cz.map.gz

これらのファイルは圧縮(.gz)されているため、解凍(気にしないでください)を使用またはzcat確認するzless必要があります。

$ zless /lib/kbd/keymaps/i386/qwerty/us.map.gz
# us.map
keymaps 0-2,4-6,8-9,12
alt_is_meta
include "qwerty-layout"
include "linux-with-alt-and-altgr"
include "compose.latin1"
include "euro1.map"
strings as usual

keycode   1 = Escape
keycode   2 = one              exclam
keycode   3 = two              at               at               nul              nul
keycode   4 = three            numbersign
        control keycode   4 = Escape
keycode   5 = four             dollar           dollar           Control_backslash
keycode   6 = five             percent

...
...

keycode  97 = Control

したがって、「Control」キー(キーコード97)を変更して「左Control」キーのスキャンコード(スキャンコード0x1d 0x9d)に設定するには、次のコマンドを使用します。

$ setkeycodes 1d9d 97 &

キー表示

次のコマンドを使用して、キーがマッピングされているキーコードを確認することもできますshowkey

$ sudo showkey -a

Press any keys - Ctrl-D will terminate this program

1    49 0061 0x31
2    50 0062 0x32
3    51 0063 0x33
a    97 0141 0x61
b    98 0142 0x62
c    99 0143 0x63
^[OH 27 0033 0x1b
     79 0117 0x4f
     72 0110 0x48
^D    4 0004 0x04

"^[OH"は私が押したキーですHOME

注1:showkey -a`)にある場合、ascii' dump mode (showkeyは押されたキーの10進数、8進数、16進数の値を現在のキーマップに従って標準出力に出力します。

答え2

私はMacBook Proを使用しており、UNIXシステムにログインするときにキーマッピングに問題がないため、デフォルト設定はほとんど確実であり、マッピングは必要ありません。私はDebian、Ubuntu、RedHat、Solaris 11を定期的に使用しています。

しかし、人々がそう言うとき、彼らが意味するものは次のとおりです。端末環境設定下に設定内部に鍵盤ブランド。ここでキーマッピングを編集できます。

私が変更した唯一の変更はアクティブにすることです。オプションをメタとして使用

Homeとの場合、キーボードのHomeキーとEndキーの配置が気に入らないため、Homeには+を、Endには+をEnd使用します。また、Ctrlキーの伝統的な場所であり、より快適で深刻なので、私のキーを別のキー(キーボードの下のシステム環境設定)に変更しました。誰がCaps Lockを使用しますか?ctrlActrlEcaps lockctrl

関連情報