xmodmapによるキーバインドの変更 (Ubuntu18.04)

この記事ではxmodmapを用いてキーバインドを変更する方法を解説します。

私はxmodmapを用いて以下のようなキーバインドにしました。
変換 ESC
無変換変換 (無変換で変換)
・ CapsLockCtrl_L
・ Ctrl_LCapsLock

このような設定にすることでVimが使いやすくなり、普段使いも快適になりました。Vimではモードを変更するときにESCを押さないと行けないのですがデフォルトのキーバインドではESCが遠すぎて不便でしたが、変更後はESCが親指のすぐそばに居てくれるので、なかなか使いやすいです。

手順をざっと説明すると、キーバインドを変更したいキーの番号keycodeを調べてそれに与えたい役割 keysym( 押された時に何を入力するか )を与えることでキーバインドを変更していきます。

 

keycodeとkeysymを調べる

まずは物理的なキーの番号keycodeと役割keysym調べます。

xevというコマンドを用いて調べます。

$ xev

xevコマンドを実行した状態で何かキーを押すと下のような文字列が出力されると思います。これはESCを押した時のものです。

KeyPress event, serial 37, synthetic NO, window 0x5c00001,
        root 0xfd, subw 0x0, tie 109723727, (-404,427), root:(715,479),
        state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
        XLookupString gives 1 bytes: (1b) ""
        XmbLookupString gives 1 bytes: (1b) ""
        XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x5c00001,
        root 0xfd, subw 0x0, time 109723887, (-404,427), root:(715,479),
        state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
        XLookupString gives 1 bytes: (1b) ""
        XFilterEvent returns: False

これを見るとESCはkeycodeが9でkeysymがEscapeであることがわかります。
この要領で変更したいキーのkeycodeと変更後のkeysymを調べ上げます。私は以下のようになりました。

物理的なキー keycode keysym(現在) keysym(なにに変更するか)
CapsLock 66 Eisu_toggle Control_L
Ctrl_L 37 Control_L Eisu_toggle
無変換 102 Muhenkan Zenkaku_Hankaku
変換 100 Henkan_Mode Escape
keycode 102 = Zenkaku_Hankaku
keycode 100 = Escape

上記のコードを~/.Xmodmapに書き、

$ xmodmap ~/.Xmodmap

上記のコマンドを実行することで
keycode102にZenkaku_Hankakuのkeysymを
keycode100にEscapeのkeysymを
与えることができます。
くどいですが、無変換のキーを押すことで全角半角が入力されたことになり、変換のキーを押すことでEscapeが押されたことになります。

CapsLockとCtrl_Lについてはもう少しやらないといけないことがあるので、この後にやります。

 

 

モディファイアキー

今回はCapsLockやCtrl_Lがモディファイアキーなのでそれらの設定を行うために、モディファイアキーを調べる必要があります。

モディファイアキーは日本語で言うと修飾キーのことで、shiftやCtrlのように他のキーの入力文字を変えるキーのことです。

例えば、aだけを押すとaと入力されますが、shiftを押しながらaを押すとAが入力されます。

xmodmapコマンドを使うことでモディファイアキーを調べることができます。

$ xmodmap

これを実行すると

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

shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x25)
control Control_L (0x42), 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)

これの見方は左端がモディファイアキーの機能で、2列目以降がそのモディファイアキーの機能を与えられているkeysymです。

例えばShift_LとShift_Rはshiftグループに属しており、shiftの機能が与えられています。

ごちゃごちゃ言いましたが、モディファイアキーに割り当てられているキーのkeysymを変更する場合はまず、モディフィアキーのグループから取り除く必要があります。

remove lock = Caps_Lock
remove control = Control_L

一度lockグループからCaps_Lockを取り除き、controlグループからControl_Lを取り除きます。
keysymを変更した後で再度lockグループにCaps_Lockを加え、controlグループにControl_Lを加えます。

add lock = Caps_Lock
add control = Control_L

 

実際の設定

以上を踏まえて~/.Xmodmapに以下のコードを書きました。

remove lock = Caps_Lock
remove control = Control_L
keycode 66 = Control_L
keycode 37 = Eisu_toggle
keycode 102 = Zenkaku_Hankaku
keycode 100 = Escape 
add lock = Caps_Lock
add control = Control_L

この設定ファイルを

$ xmodmap ~/.Xmodmap

で読み込むことでキーバインドを変更できます。

以上です。

2020 10/5追記
イコールの前後はスペースを一つ開けてください.でないとエラーがでます.
ubuntuをクリーンインストールしたときにスペースを忘れてエラーがでました.

未分類の最新記事4件