Windows10が立ち上がるときにvirtualbox (Ubuntu) をheadlessで起動しておいて,シャットダウンの時にvirtualboxもシャットダウンされる,ということをしたかった.….難しい.
起動すること自体は,もちろん,別になんでもなくて,C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm 仮想マシン名 --type headless
を実行すれば良い.終わるときにはC:\Program Files\Oracle\VirtualBox\VBoxManage.exe controlvm 仮想マシン名 acpipowerbutton
で良い.(ただし,Ubuntu は ACPI shutdown のシグナルが送られてきたときに,ユーザに対処を選ばせるようになっているので,そうならないように,/usr/share/acpi-support/power-funcs
というシェルスクリプトを作って,なかにshutdown -h now
と書いておく必要がある.この辺が参考になる.)
問題はそれをどこでやるか.
Windowsが起動するときとシャットダウンされるときに動かすスクリプトというのを,グループポリシーなるもので設定できるという話なので,やってみたのだが,うまくいかない.そもそも設定したはずのスクリプトが呼ばれない.ずいぶん調べて,やっと,Windows10ではfast startup なるおせっかいな機能がデフォルトになっていて,そのモードでは,これらのスクリプトが呼ばれない,ということがわかった.(それなので,シャットダウン・電源ON ではなく,再起動を選ぶと,ちゃんと呼ばれる.) で,fast startup なるものを無効にしたのだが,今度はスクリプト自体は呼ばれたのだけれど,VBoxManage が動かない.どうも仮想マシン名はユーザ毎に別々に認識するようになっていて (なるほど.そうだよなあ…) したがって,ログイン後でないとだめだということのようである.
しからば,ということで,Windowsの起動時・終了時ではなく,ユーザのログイン・ログオフ時のスクリプトにしてみたのだが,やはりなんだかうまくいかない.しかもこれらは,全ユーザのログイン・ログオフ時に動いてしまう.(まあ,このマシンにはユーザは1人しかいないから良いようなものだけど.)
ということで,結局,ユーザ毎のログイン時に動かすスクリプトを置く場所%UESRPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
に,起動スクリプトは置くことにした.終了の方はあきらめた.起動したままログオフしようとすると警告が出るので,その時に手で (virtualboxの管理画面を開いて) 終わればいいや.ということにした.もう少し頭が冷えたらまた考えよう.
追記: 管理者権限で起動しないと,シンボリックリンクが作成できないことがわかった.上記の起動スクリプトを置くのではなく,タスクスケジューラでログオン時に起動するようにした.そこで「最上位の特権で実行する」というオプションを指定する.