upgrade VirtualBox

Windows Vista から導入された UAC というものがある。それにともない、Administrator 権限を持っているユーザーであっても通常は制限された権限、必要なときは権限のエスカレーションを行う、といった *nix 的な作法に慣れていると無駄に複雑だなーと思える機構が導入された。同じユーザでもコンテキストによって権限が行ったり来たりするのである。

一方で Administrator 権限を持つアカウント、一般ユーザー権限のアカウントをそれぞれ作り、通常は一般ユーザーでログオン・作業し、必要なときは Administrator 権限を持つアカウントのユーザーのパスワードを入力する、という運用もできる。コマンドプロンプト上でのシンボリックリンクの作成が、こちらの運用方法じゃないと機能しないので、うちではそうしている。

さて数日前 VirtualBox の新しいバージョンが公開されたというので、一般ユーザーでログオンしている状態でダウンロードし、インストーラを実行させた。すると、インストール自体には成功して GUI のフロントエンドは起動するのだが、VM を立ち上げようとすると Kernel Driver が云々といったエラーで実行されなくなってしまった。また、extension pack を更新しようとしても、何やら権限が足りません的なエラーが出る。

これはおそらく前述の、一般ユーザーでログオン + インストーラ実行時に Administrator 権限のユーザーに仮想的にスイッチ、という環境特有のものなのだと思う。おそらくインストーラが複数のプロセスで構成されていて、子プロセスに正しく権限が継承されないまま実行されてしまっているのではないか? と考えて、Administrator 権限を持つユーザーでログオンしなおし、VirtualBox のインストーラを再度立ち上げ、修復インストールした。すると、一般ユーザーでログオンした状態でも正しく起動するようになった。

Orphan

ところでメインマシンは Windows7 PC なのだけど、実際には VirtualBox に入れた Ubuntu Server へ、cygwin 上の ssh で接続して作業しているので Windows は開発環境としてはあんまり活用していない。Photoshop とか Illustrator とかを使ったり地デジを見る OS と化している。

それはそれでいいのだが、VirtualBox で困った点がひとつある。PC が 30 分放置の後に自動的にスリープする。スリープを解除すると、どうも動きが怪しくなるのだ。

VirtualBox 上の Ubuntu Server は、タスクスケジューラに登録したタスクで、ログオン時に headless 状態で起動させている。つまり画面を描画するウィンドウを持っていない。したがって、ウィンドウに付属している、仮想環境に対してちょっかいを出す機能を利用できない。ちょっかいを出すには VBoxManage.exe をコマンドプロンプトから呼び出すほかにないのだ。しかしスリープを解除するとどうも VBoxManage が実行中の仮想環境を見失ってしまうようなのである。

正確には、仮想環境が起動すると同時にそれを監視する COM サーバ(SBoxSVC.exe)も起動するようなのだが、それを VBoxManage.exe が見つけられなくなってしまう感じかもしれない。不思議なことに、GUI の VirtualBox マネージャを起動させると、そちらはちゃんと実行中の仮想環境を認識する。しかしマネージャは実行中の環境に対して設定を変えることはできないのだった。

仮想環境自体はふつうに動き続けているので、一度状態保存するなりシャットダウンして起動しなおせばいいのだが。ちょっと不便ではある。