キー動作の変更方法

1. はじめに

複数のコンピュータを使っている場合,メーカーなどによって,少しずつキーの配列が違っていたりします. ある程度コンピュータに慣れた人にとって,キー入力は無意識的に行う作業になっていますので, キー配列が違っていると,非常にわずらわしい思いをさせられることになります.

幸い,X-Windowではキーボード上の全てのキーの働きを自由に変更することができますので, 自分の好みのキー配列になおすことができます. この文書ではX-Windowにおける各キーの動作を変更する方法について説明します.

2. [A]キーと[B]キーの動作を入れ換えてみる

X-Windowでキーの動作を設定する方法は非常に単純です. ここでは簡単な例として[A]キーと[B]キーの動作を入れ換える,すなわち[A]キーを押すとbと表示されて, [B]キーを押すとaと表示されるようにキーの動作を入れ換えてみます. 次の2行を書いたファイルab.xmodmapを用意してください.

keycode 38 = b
keycode 56 = a

ファイルができたら次のコマンドを実行してみてください(先頭の $はプロンプトですので入力してはいけません. タイプするのはxmodmap ab.xmodmapの部分だけです).

$ xmodmap ab.xmodmap

実際にキーをタイプして調べてみてください. [A]キーと[B]キーの動作が入れ替わっているはずです. (このままでは不便なのでもとに戻しておいてくださいね.戻し方はわかりますよね? わからない人はここにab.undo.xmodmapをおいておきますので,これを使ってください).

上の「keycode 38 = b」という記述の「38」の部分は[A]キーのキーコード(keycode)です. 「b」の部分はキーシム(keysym;キー・シンボルの略)と呼ばれ,そのキーの動作を示します. 「keycode 38 = b」という記述は「キーコード38番のキーにbという動作を割り当てる」という意味になります. ここでいくつかの疑問が出てくると思います.例えば,

2.1. xev

xev

キーコードやキーシムはxevというツールで調べることができます. ターミナルからxevを起動すると右のような小さなウィンドウが開きます. この状態でキーコードやキーシムを知りたいキーを押すと, ターミナルのウィンドウに次のようなメッセージが次々と表示されます.

KeyPress event, serial 18, synthetic NO, window 0x3800001,
    root 0x26, subw 0x0, time 2071433588, (213,22), root:(564,395),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 characters:  "a"
表1. キーコードとキーシムの例
キー keycode keysym
[CapsLock] 66 Caps_Lock
[Ctrl](左) 37 Control_L
[Esc] 9 Escape
[半角/全角] 49 Kanji

上のメッセージは[A]キーを押したときのものです. このメッセージから[A]キーのキーコードが38,キーシムがaだとわかります. 他にも調べてみると,[CapsLock]や[Ctrl]などの特殊キーのキーコードとキーシムは表1のようになっていることがわかります.

3. [Ctrl]キーと[CapsLock]キーの動作を入れ換える

キーの動作を入れ換えたくなる理由の中で最も多いのが, [Ctrl]と [CapsLock]の位置が気に入らないというパターンだと思います []. しかし,ここまでに説明した方法では[Ctrl]キーと[CapsLock]キーの機能を入れ換えることはできません.

というのは,[Ctrl]や[CapsLock]はアルファベットや数字のキーと違って, 押しても何かの文字が表示されるわけではなく, そのキーを押しながら他のキーをおすと何か特別な意味があったりするなど,普通のキーとは異なる働きをもっているためです. このような特別なキーをモディファイア(modifier)と呼んでいます.

X-Windowでは[Ctrl]はcontrol,[CapsLock]はlockという種類のモディファイアに属するということになっています. [Ctrl]や[CapsLock]の動作を変えるにはキーシムを変更するだけではなく, そのキーが属するモディファイアの種類も変更しなければなりません. 具体的には次のように記述します (caps.xmodmap/caps.undo.xmodmap).

keycode 66 = Control_L
keycode 37 = Caps_Lock
clear lock
add lock = Caps_Lock
clear control
add control = Control_L Control_R

4. [半角/全角]キーを無効にする

キーによっては邪魔だから押しても何も起こらないようにしたいと思うこともあるでしょう. そういう場合のために,NoSymbolというキーシムが用意されています. 例えば,[半角/全角]キーを無効にしたい場合, 次のように記述しておきます (kanji.xmodmap/kanji.undo.xmodmap).

keycode 49 = NoSymbol

キーの動作割り付けについて,より詳しく知りたい場合はxmodmapのマニュアルページを参照してください. 好みのキー配置にカスタマイズして,快適な環境を作りましょう.


はたいたかし
2000-06-01
トップ