Mac上のLinuxでCommandキーとOptionキーを入れ替える

MacVirtualBoxにインストールしたLinuxでCommandキーとOptionキーを入れ替える方法です。

概要

LinuxではAlt+Tabでアプリケーションを切り替えることができます。
他にもEmacsを使っているとAltキーを多用します。

MacのJISキーボードだとAltキーが押しにくい位置にあります。
またMacではCommand+Tabでアプリケーション切り替えなのでLinuxと使用するキーが違うという問題もあります。

なので、MacVirtualBoxにインストールしたLinuxでCommandキーとOptionキーを入れ替えます。

構成

設定方法

VirtualBoxのホストキーを変更する

MacVirtualBoxのデフォルト設定では左Commandキーはホストキーに割り当てられていますので、このままだとLinux上で使用することができません。
そこで、右Commandキーをホストキーに割り当てます。

VirtualBoxのメニューから"VirtualBox" -> "設定"で設定メニューを表示します。

f:id:ytoda129:20180407095357p:plain

"入力" -> "仮想マシン"と選択し、表示された一覧の"ホストキーの組み合わせ"の"ショートカット"を選択した状態で右Commandキーを押します。

f:id:ytoda129:20180407095651p:plain

Linux上でCommandキーとOptionキーを入れ替える

xevコマンドでキーコードを調べます。
Commandキーは133、Optionキーは64でした。

$ xev

# Commandキーのキーコードは133
KeyPress event, serial 48, synthetic NO, window 0x2a00001,
    root 0x281, subw 0x0, time 210495, (100,-16), root:(230,34),
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

# Optionキーのキーコードは64
KeyPress event, serial 48, synthetic NO, window 0x1200001,
    root 0x281, subw 0x0, time 948369, (545,579), root:(675,629),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

setxkbmapコマンドでどの設定ファイルが使用されているか調べます。
以下の実行結果を見るとキーコードはevdevが使用されているようです。

$ setxkbmap -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)"  };
    xkb_types     { include "complete"   };
    xkb_compat    { include "complete+japan" };
    xkb_symbols   { include "pc+jp+inet(evdev)"  };
    xkb_geometry  { include "pc(pc105)"  };
};

/usr/share/X11/xkb/keycodes/evdevを修正します。

<LALT> = 64;
<LWIN> = 133;

このようにOptionキー(キーコード: 64)はLALT、Commandキー(キーコード: 133)はLWINに割り当てられているので、これを入れ替えます。

<LWIN> = 64;
<LALT> = 133;

あとはLinuxに再度ログインすれば設定が反映されます。

補足

他のサイトを見ているとsymbolsのファイルを修正する例をよく見かけますが、自分の環境ではなぜかうまく行かなかったのでkeycodes側のファイルを修正しました。