目前所使用的 Virtualbox 主體分別是 Windows 7 與 Ubuntu 14.04/16.04 等, 在 Windows 7 的虛擬機器可以透過 http://vboxvmservice.sourceforge.net/, 讓特定虛擬機器 (virtual machine), 隨著 Host 電腦的開啟而以 service 的方式啟用. 至於在 Ubuntu 14.04 或 16.04 操作系統中, 則可以在 /etc/init.d/ 目錄下建立一個啟動程序, 然後讓電腦在開關機時執行, 主要的指令是開機時, 利用 VBoxHeadless 啟動個別的虛擬機器, 且在關機時, 利用 VBoxManage controlvm 儲存各虛擬機器的運行狀態.

StartVM 檔案的內容如下, 分別控制三台虛擬機器:

#! /bin/sh
# /etc/init.d/StartVM

VMUSER=yen
VMNAME1="Ubuntu_1604_8888"
VMNAME2="Ubuntu_1604_6666"
VMNAME3="Ubuntu_1404_4444"

case "$1" in
start)
echo "Starting VirtualBox VM..."
sudo -H -b -u $VMUSER /usr/bin/VBoxHeadless -startvm "$VMNAME1"
sudo -H -b -u $VMUSER /usr/bin/VBoxHeadless -startvm "$VMNAME2"
sudo -H -b -u $VMUSER /usr/bin/VBoxHeadless -startvm "$VMNAME3"
;;
stop)
echo "Saving state of Virtualbox VM..."
sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME1" savestate
sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME2" savestate
sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME3" savestate
;;
*)
echo "Usage: /etc/init.d/StartVM {start|stop}"
exit 1
;;
esac

exit 0

接著讓 StartVM 程序檔案可以執行:

sudo chmod +x /etc/init.d/StartVM

最後則是將 StartVM 納入開機程序中:

sudo update-rc.d StartVM defaults 99 01

有關 update-rc.d 用法說明: http://manpages.ubuntu.com/manpages/precise/man8/update-rc.d.8.html.

sudo update-rc.d StartVM defaults 99 01 指令表示利用 super user 的權限執行 update-rc.d 指令, 並且讓 StartVM 程序以第 99 編號次序執行 StartVM 中的 start (以開機啟動順位排序最後的方式執行, 有效編號從 00 到 99), 而 01 則表示要求以排序編號 01 的方式執行 StartVM 中的 stop 程序. 通常 update-rc.d 中使用的 start 與 stop runlevel 編號, 是最後啟動的程序要先執行 stop (兩者相加總數為 100), 詳細說明請參考: https://help.ubuntu.com/community/UbuntuBootupHowto.

參考資料: http://askubuntu.com/questions/57220/start-vboxheadless-vm-at-startup