UNIX/Linuxの部屋 xmodmapコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド xmodmap X 上でのキーをカスタマイズする このエントリーをはてなブックマークに追加

xmodmap -pke とすると、現在の keycode (キーコード) と keysym (キーシンボル) の対応表が表示される。
% xmodmap -pke
keycode 9 = Escape
keycode 10 = 1 exclam
keycode 11 = 2 at
keycode 12 = 3 numbersign
keycode 13 = 4 dollar
(略)
keycode 24 = q Q
keycode 25 = w W
keycode 26 = e E
(略)
keycode 100 = Left
keycode 102 = Right
keycode というのは、キーボード上のキーと一対一に対応している番号で、キーボードが変われば keycode も変わる可能性がある。keysym というのは、そのキーがどういう意味を持つかという論理的な識別子と考えるとよい。

例えば
keycode 9 = Escape
は「keycode 9 の keysym は Escape」であることを表している。つまり、キーボード上の ESC キーの keycode は 9 で、そのキーを押すと「Escape」という keysym が発生することを表している。

また、
keycode 10 = 1 exclam
のように、2つの keysym が設定されているものは、それぞれ「普通にキーを押した場合の keysym」「Shift キーを押しながらキーを押した場合の keysym」を表す。つまり、キーボードの上の `1' キーの keycode は 10 で、そのキーを押すと「1」という動作が起こり、Shift キーを押しながら `1' キーを押すと「excalm」、つまり「!」という keysym が発生するわけだ。

なお、「Escape」や「excalm」という keysym が発生したとき、どういう動作が起こるかは各アプリケーションに依存する。例えば Netscape Navigator なら現在のページの読み込みを中断するし、mule なら ESC prefix が押されたものとして、その後に続くキーを待つ。

Caps Lock や Ctrl キーのように他のキーを修飾するものは Modifier と呼ぶ。例えば、Caps Lock はトグル動作をするし、Ctrl キーは押している間に他のキーを押すことで特別な動作をする。各キーに修飾キーを割り当て・削除するには、add・remove を使う。以下は、左側の Ctrl キーと Caps Lock キーを入れ換える設定である。
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
ただし、Ctrl キーと Caps Lock キーの入れ換えは、XF86Setup コマンドでも行えるし、/etc/XF86Config の Section "Keyboard" 〜 EndSection の間に
XkbOptions "ctrl:swapcaps"
を挿入してもよい。/etc/XF86Config でこの設定をしつつ、さらに xmodmap で Ctrl と Caps Lock を入れ換えると、一度キーを交換してさらに交換してしまうので、元に戻るわけだ。

慣例として、xmodmap 用の設定ファイル名は ~/.Xmodmap とすることが多い。ログイン時にキーボードの設定を変えたいなら、 ~/.Xmodmap を適当に記述し、~/.xsession や ~/.xinitrc の中に
xmodmap $HOME/.Xmodmap
と書いておく。当ページ管理人は、NumLock を押さなくても最初からテンキーが効くようにするため、
! 68user's .Xmodmap
keycode 112 = slash
keycode 63 = asterisk
keycode 82 = minus
keycode 79 = 7
keycode 80 = 8
keycode 81 = 9
keycode 86 = plus
keycode 83 = 4
keycode 84 = 5
keycode 85 = 6
keycode 87 = 1
keycode 88 = 2
keycode 89 = 3
keycode 108 = Return
keycode 90 = 0
keycode 91 = period
として、Ctrl と Caps Lock の交換は /etc/XF86Config で行っている。なお、この例のように ~/.Xmodmap 内に `!' を書くと、その部分から行末までがコメントとして扱われる。

keycode・keysym を調べるには、xev コマンドを使うとよい。