Linux on VMWare Fusionで無変換キーを使う

VMWare Fusion では、Macの「英数」キーを「CapsLock」として扱ってしまうと言う仕様*1があります。

自分は、日本語入力のON/OFFをMacと同じように、「カナ」「英数」で行うようにゲストOSを設定したかったのですが、この仕様が邪魔になって困っていました。
ゲストOSが Windows(XP) の場合は特に問題ない(AppleKを使っているからかも?)のですが、Linuxでは問題になります。

ちなみにここで言う Linux とは Ubuntu 8.04 LTS を指しています。他のディストリビューションでは試していません。

[2012.05.10追記] VMWare Fusion 4.1.2 と Ubuntu 11.10 の組み合わせでもEisu_toggleをVoidSymbol と読み替えて応用可能でした。

どんな問題か?

SCIMの設定で、全体設定の開始を Hiragana_Katakana に設定します。これは OK。
終了を設定するときに、「英数」キーを押すと、 Eisu_toggle となります。
設定を適用し、SCIMを再起動すると、「カナ」キーを押したときは正しくSCIMが起動します。
しかし、「英数」キーを押下したときの動作がおかしいです。「英数」キーを1度押すと、 SCIM は終了しますが、 CapsLock が ON になってしまいます。
もう一度押すとノーマル状態に復帰しますが、 Mac とは明らかに挙動が違いますし何とも使いづらい。

調べてみる

xmodmap でキー割り当てを見てみると、

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

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Eisu_toggle (0x42)
control     Control_L (0x25),  Control_R (0x6d)
mod1        Alt_L (0x40),  Alt_R (0x71),  Meta_L (0x9c)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x7f),  Hyper_L (0x80)
mod5        Mode_switch (0x5d),  ISO_Level3_Shift (0x7c)

Eisu_toggle (0x42=66) が Lock として割りあてられています。
更に見てみます。

$ xmodmap -pke | grep Eisu
keycode 66 = Eisu_toggle Caps_Lock

keycode 66 にはなんと、 Eisu_toggle と Caps_Lock が割りあてられています。

で対策は?

普通のPCでLinuxを動かした場合、「英数」キーの一に相当するのが「無変換」キーですが、これはLinux上では Muhenkan と言う名前になります。
同じようにしてみましょう。

~/.Xmodmap を以下の内容で作成し、再ログインします。

! bubble's .Xmodmap
keycode  66 = Muhenkan
clear Lock

再ログイン後に正しく設定されているか確認をします。

$ xmodmap -pke |grep Muhenkan
keycode  66 = Muhenkan
keycode 131 = Muhenkan

keycode 66 に Muhenkan が割りあてられました。
さらに、

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

shift       Shift_L (0x32),  Shift_R (0x3e)
lock
control     Control_L (0x25),  Control_R (0x6d)
mod1        Alt_L (0x40),  Alt_R (0x71),  Meta_L (0x9c)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x7f),  Hyper_L (0x80)
mod5        Mode_switch (0x5d),  ISO_Level3_Shift (0x7c)

lock が空欄になりました。

キーマップは変更できたので、SCIMの設定で全体設定の終了を Muhenkan に設定します。
設定を適用し、SCIMを再起動すると、「英数」キーの押下でSCIMを抜けられるようになっているはずです。
つまり、日本語入力の ON/OFF が Mac と同じように出来るはずです。

注意点

当然のことながら、元々 CapsLock となっていたキーを強制的に Muhenkan に置き換えてしまいますので、 CapsLock が使えなくなってしまいます。
元々自分は CapsLock を使わないので問題はないのですけど、人によってはNGかもしれませんので要注意です。

ではでは。

VMware Fusion 4

VMware Fusion 4

*1:どう考えてもバグだと思うのだけどVMWareによると仕様だそうです