xmodmap

xmodmap(1)は、Xのキーマップを変更できるユーティリティ。

キーマップを変更する

ここでは下の画像で示すように、 キーボード左下のCTRLキーのマッピングを変更する。 あらかじめsetxkbmap(1)でCapsLockキーをCTRLキーへ変更しているため、 左下のCTRLキーは不要となっている。

はじめに、このキーのkeycodeを調べる。 xev(1)を実行し、変更対象となるキーを入力する。 そしてキーを入力した瞬間の出力を控える。 出力はたとえば以下のようになる。

KeyPress event, serial 33, synthetic NO, window 0x1a00001,
    root 0xc8, subw 0x0, time 3454422, (-4,528), root:(2326,550),
    state 0x0, keycode 37 (keysym 0x60, grave), same_screen YES,
    XLookupString gives 1 bytes: (60) "`"
    XmbLookupString gives 1 bytes: (60) "`"
    XFilterEvent returns: False

このキーボードでは、3行目のkeycode 37が、このCTRLキーのkeycodeであるとわかった。

次にxmodmap -pkeを実行し、その出力を$HOME/.Xmodmapへ書き込む。

$ xmodmap -pke > $HOME/.Xmodmap

任意のエディタでこのファイルを編集する。 先ほど調べたkeycodeが書かれている行を探す。

...
keycode 37 = Control_L NoSymbol Control_L
...

行先頭に!をつけることでコメント扱いとなる。 今回は以下のように変更した。

...
!keycode 37 = Control_L NoSymbol Control_L
keycode 37 = quoteleft asciitilde
...

quoteleftはバッククオートを、asciitildeはチルダを意味する。 1項目は通常の入力、2項目はShiftキーとともに入力したさいのキーマップとなる。 つまり左下のCTRLキーを打鍵すると「`」が、 左下のCTRLキーをShiftキーを抑えたまま打鍵すると「~」が印字されるようにした。

$HOME/.Xmodmap変更後、$HOME/.xinitrcを編集し、 以下を最終行以外のどこかに追加する。

xmodmap $HOME/.Xmodmap

これはX起動時にこのキーマップを読み込む命令となる。

Xを再起動するか、xmodmap $HOME/.Xmodmapと実行することで、 変更したキーマップがシステムに反映される。