普段、Macのキーボードは 左Controlキーと左Commandキーを入れ替えて使っています。入れ替えは、単純にSystem PreferencesのKeyboardを開いてModifier Keys...のControl KeyとCommand Keyの入れ替えで行っています。
この方法で、ほとんどの操作は左Controlキーと左Commandキーが入れ替わります。ただ、次の場合はキーが入れ替わりませんでした。
・ターミナル上でキーを入力するとき
・VirtualBox上のubuntuゲストOSでキーを入力するとき
ターミナルは使用頻度が少ないので我慢出来るとして、VirtualBox上のubuntuでキーが入れ替わらないのは辛くなってきたので、ゲストOSのubuntu(14.04LTS)上でxmodmapを使ってキーを入れ替えることにしました。
手順は次の5ステップです。
1. VirtualBoxのホットキーの設定を変更する
2. Macのキーボードとキーの対応を調べる
3. xmodmapの現在の割り当てを調べる
4. xmodmapの設定ファイルを作る
5. xmodmapの実行
ubuntu 14.04LTSのxmodmapでキーを入れ替える
最初はネットを検索してキーの入れ替えを試していたのですが、結局xmodmapのmanページに書いてある例が一番参考になりました(当たり前か)。
$man xmodmap
XMODMAP(1) General Commands Manual XMODMAP(1)
NAME
xmodmap - utility for modifying keymaps and pointer button mappings in
X
SYNOPSIS
xmodmap [-options ...] [filename]
:
:
:
One of the more irritating differences between keyboards is the loca‐
tion of the Control and CapsLock keys. A common use of xmodmap is to
swap these two keys as follows:
!
! Swap Caps_Lock and Control_L
!
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
This example can be run again to swap the keys back to their previous
assignments.
manページの例は、Caps Lockキーを左Controlキーを入れ替えています。これを参考に左Controlキーと左Comanndキーを入れ替えてみます。
1.VirtualBoxのホットキーの設定を変更する
VirtualBoxではホストとゲストOSの切り替えにホットキーが設定されています。初期状態では左Commandキーが設定されているので、これを変更します。変更にするには、まずVirtualBoxのPreferences...からInputを選択して、Virtual MachineのHot Key Combinationを選択します。僕はホットキーを使わないので無効にしています。無効にする場合は、右端の消しゴムIconをクリックすると設定がNoneになります。
|
HotKey初期設定状態 |
|
HotKeyを無効にした状態 |
2.Macのキーボードとキーの対応を調べる
xevを使って、Macのキーを押した時にubuntuでどのように認識されているかを調べます。調べ方は、ubuntuのターミナルからxevを起動して、表示されるウィンドウ上で左Controlキーと左Commandキーをそれぞれ押します。
左Controlキーを押した結果はこれです。
KeyPress event, serial 37, synthetic NO, window 0x4600001,
root 0x175, subw 0x0, time 281565, (101,54), root:(206,240),
state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
左Commandキーを押した結果はこれです。
KeyRelease event, serial 37, synthetic NO, window 0x4600001,
root 0x175, subw 0x0, time 279861, (101,54), root:(206,240),
state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
左ControlキーはControl_L、左CommandキーはSuper_Lということがわかりました。
3.xmodmapの現在の割り当てを調べる
ターミナルでxmodmapを実行して現在の設定を表示します。左Controlキー(Control_L)はcontrolに、また左Commandキー(Super_L)はmod4というmodifierに属していることがわかります。
$xmodmap
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (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)
4.xmodmapの設定ファイルを作る
キーの入れ替えを記述したファイルを作ります。ここでは.Xmodmapというファイルに入れ替えの設定を記述しました。
remove control = Super_L
remove mod4 = Control_L
keysym Control_L = Super_L
keysym Super_L = Control_L
add mod4 = Control_L
add control = Super_L
5.xmodmapの実行
ターミナルで設定ファイルを指定してxmodmapを実行すると、左Controlキーと左Commandキーが入れ替わります。
$ xmodmap .Xmodmap
manページに書いてある通り、xmodmapをもう一度実行すると、再度差し替え(スワップ)されることになるので、設定が元に戻ります。