2014年6月1日日曜日

Ubuntuでキーの入れ替え

Ubuntu 14.04をインストールしたので、まずはキーボードのカスタマイズを行いました。
ネットで検索すると、GUIによる設定もできると書かれていましたが、14.04にはそのメニューがなかったので、設定ファイルによる変更を行いました。

参考
http://d.hatena.ne.jp/adragoona/20130518/1368850862
http://bearmini.hatenablog.com/entry/2013/07/12/161637


まず、物理的なCapslockキーのキーコードを以下のコマンドで確認します。
$ xev

イベントテスターなるウィンドウにフォーカスした状態で、任意のキーをタイプすると、キーコードを含む出力がされます。
例えば、以下の通り。

KeyPress event, serial 38, synthetic NO, window 0x1600001,
    root 0xa0, subw 0x0, time 4787925, (144,65), root:(1494,296),
    state 0x0, keycode 66 (keysym 0xff30, Eisu_toggle), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

Capslockキーはkeycode 66であることがわかります。


以下のコマンドで現在のキーバインドを確認します。d

$ xmodmap -pke

すると

keycode  24 = q Q q Q

と行ったものが出力されます。
4つ表示されるのは、修飾キー無し、Shiftキーによる修飾、Mode_switchによる修飾、Mode_switch+Shiftキーによる修飾を意味しています。Mode_switchは、以下で確認できます。

$ xmodmap -pke | grep -i mode_switch
keycode 203 = Mode_switch NoSymbol Mode_switch

キーボードによってはキーコード203入力用のキー(AltGr)があるものもあるようです。

モディファイヤキーの確認
Ctrlキーなどの修飾キーは、モディファイヤキーとして特別に登録されている。モディファイヤキーは、以下で確認できます。

$ xmodmap
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Eisu_toggle (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3     
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Ctrlキーがモディファイヤキーに指定されているため、このキーを入れ替えるためには一度モディファイヤキーの指定を解除する必要があります。それには、以下を.Xmodmapの先頭に追加します。

以上をまとめると、以下を~/.Xmodmapに記述します。

! Ctrlキー、CapsLockをモディファイヤキーから解除
remove control = Control_L
remove lock = Eisu_toggle

! 左Ctrlであるキー(37)をCapslockに、Capslockキー(66)を左Ctrlに割り当て
keycode 37 = Eisu_toggle Caps_Lock Eisu_toggle Caps_Lock
keycode 66 = Control_L NoSymbol Control_L

! 再度Ctrlキー、CapsLockをモディファイヤキーへ登録
add control = Control_L
add lock = Eisu_toggle

$ xmodmap .Xmodmap
で反映します。

0 件のコメント:

コメントを投稿