У меня на домашнем сервере установлено много виртуальных машин, управляемых с помощью VirtualBox, Каждая включенная виртуальная машина открывается в отдельном окне. Ко всем этим виртуальным машинам я подключаюсь по RDP, поэтому отображение их окон на хостовой машине только зря тратит её ресурсы. В связи с чем я и решил разобраться, как же запускать виртуальные машины без GUI, заодно и автоматизировать процесс запуска вышеуказанных:)
Все, что нам понадобится — VirtualBox последней версии, загруженный отсюда. Стоит заметить, что в качестве хоста у меня используется компьютер с Windows 8.1. Этот выбор может показаться весьма странным, но я пока не нашел систему, работающую более стабильно. Хоть Linux и гибок в настройке, для того, чтобы он работал стабильно, по моему опыту, нужно очень много времени.
Будем считать, что виртуальная машина у нас уже установлена и видна в менеджере виртуальных машин VirtualBox‘а. Кстати, посмотреть список виртуальных машин можно командой:
VBoxManage list vms
Вывод этой команды выглядит примерно вот так:
Слева название виртуальной машины, а справа их UUID, ведь на никто не гарантирует, что нет виртуальных машин с одинаковым названием.
для получения более подробной информации о имеющихся виртуальных машинах можно дописать в конец команды «—long».
Для запуска виртуальной машины в скрытом режиме переходим в директорию с VirtualBox
cd "c:\Program Files\Oracle\VirtualBox\"
Шаблон команды запуска виртуальной машины выгладит так.
VBoxHeadless.exe -s {VMName} -v on
Например, этой командой мы запускаем виртуальную машину, которая называется «7» :
VBoxHeadless.exe -s 7 -v on
Для вывода справки достаточно просто ввести команду
VBoxHeadless.exe
Результат будет вот таким:
Автоматизируем
Допустим, у нас есть несколько виртуальных машин и хотелось бы запускать их одним ярлыком. Создадим для каждой из них bat файл с назывнием такого вида
vm{VMName}.run.bat
Например:
vm7.run.bat
Содержимое каждого из этих файлов должно выглядеть вот так:
cd "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -s {VMName} -v on
Например:
cd "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -s 7 -v on
Положим эти все файлы в одну папку и там же создадим файл с названием «vm.run.vbs», Этот файл будет запускать по очереди файлы, отвечающие за каждую виртуальную машину. Сожержимое этого файла должно выглядеть как-то так
Set WshShell = WScript.CreateObject("WScript.Shell") obj = WshShell.Run("vmXP.run.bat", 0) set WshShell = Nothing WScript.Sleep 10 * 1000 Set WshShell = WScript.CreateObject("WScript.Shell") obj = WshShell.Run("vm7.run.bat", 0) set WshShell = Nothing WScript.Sleep 10 * 1000 Set WshShell = WScript.CreateObject("WScript.Shell") obj = WshShell.Run("vm8_1.run.bat", 0) set WshShell = Nothing
Данный пример запускает виртуальную машину с названием «XP«, через 10 секунд «7» и еще через 10 — «8_1» .
Теперь можете вынести ярлык этого файла на рабочий стол или добавить в автозагрузку.
А что делать с подключением устройств?
Когда мы работаем с виртуальной машиной через GUI, у нас есть меню устройства, с помощью которого мы можем подключить флешку, диск или другое устройство к виртуальной машине. Если же машина запущена в скрытом режиме, доступа к этому окну нет, но это все прекрасно можно сделать через командную строку.
Смотрим список подключенных к хосту USB устройств:
VBoxManage list usbhost
Вывод:
Подключаем устройство к виртуальной машине:
VBoxManage.exe controlvm 8_1 usbattach 815933a9-c41b-4cb0-83c7-9c5a8cac8015
Более общий случай
VBoxManage.exe controlvm {VMName} usbattach {UUID устройства}
Для отключения устройства от виртуальной машины:
VBoxManage.exe controlvm {VMName} usbdetach {UUID устройства}
Более полный список параметров:
Проблемы, с которыми я столкнулся
На данный момент проблема только одна, но она довольно неприятна.
1) При попытке подключить USB адаптер к компьютеру появляется следующее сообщение об ошибке:
VBoxManage.exe: error: USB device 'Nootechnika c 2013 PC1116' with UUID {2e53a54 b-89fc-4f12-9c6c-16e8bad38ada} is busy with a previous request. Please try again later VBoxManage.exe: error: Details: code E_INVALIDARG (0x80070057), component HostUS BDevice, interface IHostUSBDevice, callee IUnknown VBoxManage.exe: error: Context: "AttachUSBDevice(usbId.raw())" at line 973 of fi le VBoxManageControlVM.cpp
Лечение оказалось несложное, но для того, чтобы устранить неполадку, нужно иметь физический доступ к компьютеру, на котором крутится виртуальная машина.
- Выключаем виртуальную машину
- Отсоединяем USB устройство
- Заходим в настройки виртуальной машины и создаем такой фильтр
- Запускаем виртуальную машину
- Подключаем USB устройство
- Возможно придется снова выполнить команду подключения устройства
- PROFIT!!!
Надеюсь, кому-нибудь статья окажется полезной. Если есть вопросы — добро пожаловать в комментарии.
Нифига не понял,» курю » инструкцию снова.с первого раза не получилось =)
Возможен ли запуск ВМ без входа в профиль пользователя?
1. Надо батник засунуть в автозагрузку или в Планировщике сделать правило, чтобы виртуалка запускалась после старта ОСи.
2. На виртуалке сделать мост (проброс для получения реального IP) и включить RDP/настроить SSH.
Тогда можно будет заходить из сети.