Guest Windows 7 on Virtualbox in Host Ubuntu machine

前提

ubuntu に virtualbox や bumblebee などは入っていて,GPU を使える環境になっていることとする.

手順

  1. vm をセーフモードで起動して, vboxguestadditions をインストールする.
    インストール時にDicrect3D supportにチェックを入れる.
  2. vm を停止し,vm の settings から display, screen タブへ到達し,Enable 3D Acceleration のチェックを入れる
  3. vm を起動し,dxdiag のディスプレイタブでDirect3Dアクセラレータが使用可能になっていることを確認する

とはいえ,direct3dを使うアプリを実行すると,頻繁に落ちるようになるので,注意すること…

Ubuntu on VMware Player でユニティモード

Ubuntu 標準の Unity というウィンドウマネージャは,VMware playerがユニティモードをサポートしていないらしい.
gnomeとかxfceを入れたら動く.
各々の使用感を少しメモっておく.

gnome3
一時期は重い重いと言われていたが,今は,Unityより軽い気がする.
ウィンドウの最大化,左右最大化ができるのが熱い.
自分でショートカットキーを設定したかどうかは忘れたが,Win+↑,←,→でそれぞれ,最大化,左最大化,右最大化できるように設定可能.
Ctrl+Alt+Tでターミナル起動するショートカットがデフォで入っているのも便利で良い.
細かい設定は,compizconfig-setting-managerを入れる.
イケてないのは,ユニティモードにした時,デスクトップが残ること.ターミナルにフォーカスを移すと,全画面のgnomeデスクトップも後ろに起きてしまい,既存のWindowsの窓は覆わないものの,Windowsのタスクバーを覆う.
ただ,デスクトップが表示されることにより,gnomeバーが表示されるので,最後のウィンドウを閉じた後でもVMにフォーカスを移すことができて,Ctrl+Alt+Tでターミナルを起こせる.
xfce4
昔なつかしのテーマで起きてくる,軽量なウィンドウマネージャ.
ウィンドウの最大化,垂直最大化があるので,左右最大化がない点は垂直最大化で補うしかない.
ウィンドウマネージャ>キーボードショートカット,より設定.
ユニティモードにした時にxfce4のデスクトップは消えてくれるのはいいが,最後のターミナルを閉じた時,ユニティモードを終わらせずにフォーカスを移す手段がない
(追記3/18: VMware playerのウィンドウにフォーカスを移して,左上(私がWindowsボタンを左上に配置しているからかも?)にポインタを移動すればメニュー呼び出せる)
xfce4のツールバーも消えてしまうので,アプリケーションメニューからアプリを起動することができない.
Ctrl+Alt+Tショートカットをターミナルに割り当てるのは,キーボード>アプリケーションショートカットから.ショートカットの設定がWMと分かれているのがちょっとめどい.

ということで,私の使い分けはこんな感じ.

  • VM全画面利用時
    • ウィンドウのサイズをWindows互換で変形させたい時 → gnome3
    • 少しでも軽く動作させたい時 → xfce4
  • ユニティモード利用時
    • アプリケーションバーがないと生きていけない → gnome3
      • Ctrl+Shift+U でアプリケーション呼び出しのメニューが出るので,これでイ㌔
    • デスクトップがVMデスクトップに乗っ取られるのはゆすせないぞ → xfce4

VMware で CD-ROM boot (ゲストOS再インストール)

VMware を標準で使っていると、OS インストール後は仮想ドライブに起動イメージを入れてゲスト OS を起動しても OS インストール画面に入ることができない。
これは、CD-ROM ドライブの起動ディスクとしての優先度が低いためであるので、BIOS から優先度を上げてやらなければならない。
ところが、VMware は標準では、BIOS に入るための F2 の受け付け時間が全くなく、現実には入力することができない。
また、リセットやリブートする毎にゲスト OS のフォーカスが外れて VMware のウィンドウにフォーカスが合ってしまうため、PC の起動時によくやる「最初から F2 を押しておく」も通用しない。

そこで、ゲスト OS の .vmx ファイルに、BIOS 設定画面に強制的に入る boot.forceSetupOnce = "TRUE" を追記するか、
BIOS のブートまでの遅延を設定する bios.bootDelay = "5000" を追記するなどの方法で対処する。