晴耕雨読

working in the fields on fine days and reading books on rainy days

Xmodmapでキーボードのマッピング

Linuxでキーボードのマッピングを変更するときは Xmodmap を使います。 xmodmap コマンドは有名なディストリビューションなら基本的にデフォルトで入っていると思います。 xmodmapの設定を修正して起動時に適用させる方法について説明します。

まず、変更したいキーのキーコードを確認するために、xev コマンドでウィンドウを起動します。

xev

ウィンドウにフォーカスがある状態で例えば「\」キーを押下すると、keycode 132 (keysym 0x0, NoSymbol) と表示され、キーコードが132であることが確認できます。 本来であれば \ が入力されるはずですが、MacのParallelsのKali Linuxではバックスラッシュが入力されませんでした。 そこで、keycode 132に対してバックスラッシュ \ とShift押下時はパイプ | が入力されるようにします。

まずは、現在のキーマッピングの設定を xmodmap -pke でダンプします。

xmodmap -pke > "$HOME/.Xmodmap"

.Xmodmap ファイルに保存したらvimで開いて、/132 で検索すると、keycode 132 = で何も設定されていないのが確認できたため、ここに自分の設定を追加していきます。 /slash で検索すると、keycode 51でbackslashとbarを含む行を見つけました。入力方法は Mode_switch + ] でバックスラッシュを入力できるようですが、Mode_switch は普通のキーボードにはありません。今回はキーコード132でバックスラッシュを入力できるようにするので、51を参考に132を修正します。

...
keycode  51 = bracketright braceright backslash bar
...
keycode 132 = backslash bar
...

設定ファイルを適用させて、正しく入力できるか確認します。

xmodmap "$HOME/.Xmodmap"

最後に、ターミナル起動時に自動でXmodmapの設定が読み込まれるように .bashrc または .zshrc の末尾に上記を追加します。

以上です。

補足

MacのParallelsのKali Linuxでは日本語キーボードで「~」「`」「_」「\」「|」に対応させるために以下の設定を使いました。

keycode  21 = asciicircum asciitilde
keycode  34 = at grave
keycode  97 = underscore underscore
keycode 132 = backslash bar