2012年2月5日日曜日

Windows7 on VMware Fusion4

VMware Fusion4には「キーボードの認識が常にUSになる」というバグがいる。
このため、Fusion4上でWindows7を動かす場合も、日本語キーボードだと配置が合わないという問題が発生する。

それを解消する方法。
  1. VMwareを完全に終了しておく
  2. SpotLightで「仮想マシン」で検索
  3. Windows 7 x64.vmwarevmというファイルで右クリック、パッケージの内容を表示(32bit版の時はx64は「ない」)
  4. Windows 7 x64.vmxでこのアプリケーションで開く~適当なテキストエディタで開く
  5. 一番最後の行にkeyboard.vusb.idProduct = "0x222"と追加し、改行、ファイルを保存
  6. VMWare~Windows7を再起動
  7. Windows上で、コントロールパネル~キーボード~ハードウエア~プロパティ~ドライバー~ドライバーの更新
  8. コンピューターを参照してドライバーソフトウエアを検索します~コンピューター上のデバイスドライバー一覧から選択します
  9. 「互換性のあるハードウエアを表示」のチェックを外す
  10. (標準キーボード)の中から「日本語PS/2キーボード 106/109 Ctrl+英数」を選択、次へ
  11. 警告メッセージが出るが「はい」でインストール続行
  12. Windowsを再起動

これで日本語キーとして正しく認識されるようになる。Lionと違い「|\」と「_ろ」も正しく入力できる。

・・・

さて、うちではMacにもWindowsのキーボードをつなぎ、Mac上ではCommandとControlの位置をKeyRemap4で入れ替えている。また、Windows上ではCapsLockとCtrlを入れ替えている。
CommandとControlの位置入れ替えだけなら、キーボード~修飾キーの設定で入れ替えられるが、他のキーも変更しようと思うとKeyRemap4が必須であり、またKeyRemap4を入れているとこの修飾キーの設定は無視される。

こういうことをしていると、Windows上でCtrlとWinのキーが入れ替わってしまう問題が発生する。
調べてみると、CTRL+←/→を押すと正しくCTRL+←/→と返すのに、CTRL+アルファベットを押すとWin+アルファベットと返してくるという変な現象が発生している。

これを回避するには、KeyRemap4で、Fusionには入れ替えてない状態のキーを渡すようにすればよい。

private.xmlに次の内容相当を追記してReloadする。
<?xml version="1.0"?>
<root>
  <appdef>
    <appname>VMware</appname>
    <equal>com.vmware.fusion</equal>
  </appdef>
  <item>
    <name>Control_R to Command_R (except VMware)</name>
    <identifier>private.app_vmware_control_r_to_command_r</identifier>
    <not>VMware</not>
    <autogen>--KeyToKey-- KeyCode::CONTROL_R, KeyCode::COMMAND_R</autogen>
  </item>
  <item>
    <name>Control_L to Command_L (except VMware)</name>
    <identifier>private.app_vmware_control_l_to_command_l</identifier>
    <not>VMware</not>
    <autogen>--KeyToKey-- KeyCode::CONTROL_L, KeyCode::COMMAND_L</autogen>
  </item>
  <item>
    <name>Command_L to Control_L(except VMware)</name>
    <identifier>private.app_vmware_command_l_to_control_l</identifier>
    <not>VMware</not>
    <autogen>--KeyToKey-- KeyCode::COMMAND_L, KeyCode::CONTROL_L</autogen>
  </item>
</root>

これで、思惑通りのキー操作ができるようになる。
なお、Fusion上に複数のWindows環境を入れている場合、これ1つですべてに有効である。

Command-L/Control-Lに関してはKeyRemap4に元からexcept Virtual Machineという似たような設定があるが、それを設定してもうまく動かなかった。Fusion4には対応していないのかもしれない。

実はこの状態でも「全角/半角」を押しても日本語入力できないという問題が残る。
これに関しては、Windows上のキー配置変更ツール(chgkeyなど)で、「カタカナ・ひらがな→全角/半角」(逆ではないので注意)の変更を入れる。

ただし、この変更をしても、Mac側が日本語入力モードになっているとWindowsで「全角/半角」が効かない。
キーが効かないときは、Macの日本語入力モードを確認のこと。

これで、WindowsとMacでほぼ同じキー操作ができるようになった。

「そもそもWindows上でキーCtrlとWinを入れ替えればいいんじゃないか」と思われるかもしれないが、先に書いたとおり、返されてくるCtrlとWinのキーコードが場合によって異なるのでうまくいかない。
だからホストとなるMac側で変更しなければならない。このあたりはさんざんやったから間違いなし。

CTRL+←/→や一部ファンクションキーはデフォルトではMac側にとられる場合があり、Windowsに渡すことができない。
この場合、環境設定~キーボード~キーボードショートカットを変更する。
private.xmlにさらに書き加えれば両立出来るかもしれないが、そこまでは必要を感じてないので省略。

いや、KeyRemap4MacBookは本当によく出来ている。
英語だけなのでちょっとわかりにくいけど。











0 件のコメント:

コメントを投稿