引导时如何自动启动Virtual Box Machine?


Answers:


51

您可以使用VirtualBox自动启动服务。在“ Geek Admin的生活”博客上发布了一个很好的教程,介绍了如何执行此操作。

以下步骤摘自链接的博客文章:

  1. 首先,您需要创建文件/etc/default/virtualbox并添加一些变量。

    VBOXAUTOSTART_DB包含自动启动数据库目录的绝对路径,而
    VBOXAUTOSTART_CONFIG包含自动启动配置设置的位置。该文件应类似于以下内容:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
  2. 现在我们需要创建/etc/vbox/vbox.cfg文件并添加

    # Default policy is to deny starting a VM, the other option is "allow".
    default_policy = deny
    # Create an entry for each user allowed to run autostart
    myuserid = {
    allow = true
    }

    注意:如果文件名vbox.cfg在上面不起作用,请尝试将其命名autostart.cfg

    如果您是唯一的用户,则可以将行添加default_policy = allowvbox.cfg文件中。

  3. 将目录权限设置为vboxuser组,并确保用户可以写入目录以及粘性位。

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
  4. 将每个用户添加到vboxusers组。

    sudo usermod -a -G vboxusers USERNAME

    USERNAME用用户名代替)

注意如果您更改了当前用户的组权限,请注销并再次登录以刷新权限。(积分@ kR105)

  1. 每个要为单个计算机启用自动启动的用户都必须使用以下命令设置自动启动数据库目录的路径:

    VBoxManage setproperty autostartdbpath /etc/vbox

    并为单个VM启用自动启动

    VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

    这将myuserid.start/etc/vbox目录中创建一个文件

  2. 现在,重新启动vboxautostart-service以读取更改。

    sudo service vboxautostart-service restart
  3. 重新启动系统,您的VM应该启动


如何使用启动脚本启动特定的虚拟机
初学者

1
我的14.04声称没有诸如“ vboxautostart-service”之类的服务,您对此进行了测试吗?
Arronical

@Arronical OP以及从中获得答案的说明均适用于Ubuntu 12.04。YMMV之后的版本。
kdmurray 2015年

事实证明,它virtualbox 4.3.10并未在14.04上下载init脚本,但是下面ndasuser的回答帮助我解决了这一问题。全面+1!
Arronical

我试图使此解决方案在ubuntu 15.10上成功运行 ,但没有成功..我结束了使用此帖子freesoftwareservers.com/index.php/2015/10/24/… ..也许不是正确的方法,但它有效
mozart_ar

15

在香草LTS上尝试进行此操作时,我遇到了类似的不幸事件。

~$ cat /etc/os-release 
NAME="Ubuntu" 
VERSION="14.04.1 LTS, Trusty Tahr" 

在此版本上,未安装密钥文件/etc/init.d/vboxautostart-service

据我所知,所有的VitualBox和要求都是由apt-get放入的,所以我不能说为什么也没有提供'vboxautostart-service'文件。但是要克服这一点,这是我对kdmurray帖子的更新。

1)/ etc / default / virtualbox 文件对我来说已经存在。因此必须添加vars:

VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg

2)必须按照OP的指示创建/etc/vbox/autostart.cfg

6b)需要获取一个vboxautostart-service脚本并使它可执行。

cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service

6c)提醒rc.d控制器,但我使用24作为开始时间。只放20个就没有启动。也许甚至在virtualbox工作之前就已经运行了。

sudo update-rc.d vboxautostart-service defaults 24 24

然后重新启动可以正确启动虚拟机。


1
在5.2版中,您必须编辑vboxautostart-service并vboxdrv# Required Start/ # Required Stop行中替换为virtualbox。看来他们重命名了服务,因此OS无法正确检测启动/停止优先级。我认为,如果您替换了这些行,则不需要步骤6c。
鱼骨

非常感谢@fishbone您的评论是我所缺少的把戏
Jairo Andres Velasco Romero

6

您可以使用vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(其中之一)。如果它们是您通过使用gui以外的其他方式连接的服务器,请使用“无头”。

要在引导期间的正确时间实际运行这些命令,您需要在Upstart上阅读。


6

多不愉快的小时试图让程序后从kdmurray上述工作,都没有成功我最终发现根本工作方法。

首先,我的Linux主机(Mint 17)是在引导时设置的,以自动登录到我的主帐户。

其次,我使用VirtualBox GUI(v4.3.12)中的功能为桌面上的每个虚拟机创建了一个快捷方式。{右键单击左栏中的VM,然后选择“在桌面上创建快捷方式”}

下一步:我已经发现打开菜单->控制中心->启动应用程序->添加并添加桌面快捷方式会导致文件不起作用,我从此页面上的其他答案中发现,启动位置为/ home /USERNAME/.config/autostart,所以我右键单击了每个桌面VM快捷方式,然后将它们粘贴到该文件夹​​中,覆盖了早期的废话文件。现在,他们开发了“漂亮的” VirtualBox图标。

并且在重新启动主机时足够确定,这3个VM会自动启动。

:-)

比尔·威廉姆斯

PS:遗憾的是,我仍然缺少一些东西,因为虚拟机通常不会在启动时启动,而是会生成一个错误对话框,指出它们已被锁定,即使我告诉它们在重新启动主机之前也要关闭它们。


1
仅供参考,没有“答案5”。您在每个答案左侧看到的数字是总投票数。话虽如此,您的GUI是一种不错的替代方法。感谢您的贡献。
hmayag 2014年

5

除了上面对vboxautostart-service的良好描述之外,您还可以

VBoxManage modifyvm server --autostop-type savestate

在关机时自动停止来宾。对于Ubuntu 14.04,我必须在vboxautostart-service stop部分添加一个sleep 30,这样它才能等待guest虚拟机被完全保存。


2

我在运行VBox 5.1.34的Ubuntu 16.04下找到了一种更简单的方法。

在VBox中时,右键单击列表中正在运行或处于空闲状态的VM,然后选择“在桌面上创建快捷方式”。在桌面上看到该图标后,请使用任何工具打开该工具,以查看VBox创建的基础命令(在我的系统,我右键单击并选择“属性”)将此复制到剪贴板。

打开程序以更新“启动应用程序”,并创建一个在启动时启动的新应用程序,粘贴从VirtualBox创建的桌面链接复制的命令。


1

要在登录我们的会话时启动虚拟机,我们可能需要定义一个.desktop文件:

当此文件被复制或移动到我们的自动启动目录时,它将在我们登录后执行:

在用户空间中运行Virtual Box可能有助于避免在引导过程中启动它们的有害副作用(例如,VM以root身份运行,引导时间大大增加,...)。


1

这可以使用VirtualBox命令行管理界面来完成。只需在启动时运行以下脚本。

#!/bin/bash
VMUSER="vmuser"
VMNAME="RedHatVM" #also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")

case "$1" in
    start)
        echo "===Starting VirtualBox VM==="
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    stop)
        echo "===Saving state of Virtualbox VM==="
    sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
    sleep 20
        ;;
    shutdown)
        echo "===Shutting down Virtualbox VM==="
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
    sleep 20
        ;;
    reset)
        echo "===Resetting VirtualBox VM==="
         sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    status)
         echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
        ;;
        echo "Usage: /etc/init.d/VMscript {start|stop|shutdown|reset|status}"
        exit 1
        ;;
    esac

exit 0

一个不错的教程以获取更多信息。


欢迎..请复制/粘贴链接中的重要信息
风暴

1

@kdmurray答案的附件。

如果出现以下错误:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

为了解决这个问题,我必须手动创建文件“ username” .start和“ username” .stop,方法是:

sudo touch "username".start
sudo touch "username".stop

并更改所有者:

sudo chown "username" "username".start
sudo chown "username" "username".stop

重新运行:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

然后重新启动服务:

sudo service vboxautostart-service stop
sudo service vboxautostart-service start

检查是否可以:

top

如果虚拟机正在运行,则您应该在列表中看到“ VBox ...”进程


0

您还可以获取此处描述的gnome会话管理器。Gnome Session Manager 在软件中心内,或者您可以去终端输入 sudo apt-get install gnome-session-common

接下来,您可以创建一个小脚本来运行,并使用gnome会话管理器启动它。这是一个小示例脚本,助您一臂之力...

#!/bin/sh

#vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (one of those)
# So if your username is user, and virtualbox put your VMs in the default location, and you want headless...

vboxmanage startvm '/home/user/VirtualBox VMs/myvmname' --type=gui

0

当主机重启时,这就是我启动Centos(虚拟机名称)的方式。我将crontab用于该工作。这是我的crontab条目:

@reboot VBoxHeadless --startvm "Centos" &

0

对于Ubuntu服务器16.04.1 LTS,我通过执行以下操作解决了此问题:

首先激活rc-local.service

sudo systemctl enable rc-local.service

在下面添加以下行 /etc/rc.local

su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"

请注意,virtual_box_user是可以看到虚拟机(您愿意启动)执行命令的虚拟机:

VBoxManage list vms

例:

$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28} 
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}

修改后的/etc/rc.local外观应如下所示

#!/bin/sh -e
# 
# rc.local 
# 
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other 
# value on error.
# 
# In order to enable or disable this script just change the execution
# bits. 
# 
# By default this script does nothing. 

su bob -c "VBoxManage startvm 'virtualbox1' --type headless &" 
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &" 

exit 0 

如果您没有选择合适的virtualbox所有者,则应该在键入命令时看到错误:

sudo systemctl status rc-local.service

我希望这可以帮助


0

1-创建一个文件:

nano /etc/init.d/vm-start

粘贴此:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • 用您的用户名替换“ validuser”
  • 用您的虚拟机名称替换“ MACHINENAME”
  • 如果您需要启动多台计算机,请使用您的虚拟机名称重复上述行:

/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless" /bin/sleep 1

2-使文件vm-start可执行:

chmod +x /etc/init.d/vm-start

3-编辑rc.local

nano /etc/rc.local

添加:

#!/bin/bash
/etc/init.d/vm-start
exit 0

4-重新启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.