Virtual Box в максимально скрытном режиме.

У меня на домашнем сервере установлено много виртуальных машин, управляемых с помощью VirtualBox, Каждая включенная виртуальная машина открывается в отдельном окне. Ко всем этим виртуальным машинам я подключаюсь по RDP, поэтому  отображение их окон на хостовой машине только зря тратит её ресурсы. В связи с чем я и решил разобраться, как же запускать виртуальные машины без GUI, заодно и автоматизировать процесс запуска вышеуказанных:)

Все, что нам понадобится — VirtualBox последней версии, загруженный отсюда. Стоит заметить, что в качестве хоста у меня используется компьютер с Windows 8.1. Этот выбор может показаться весьма странным, но я пока не нашел систему, работающую более стабильно. Хоть Linux и гибок в настройке, для того, чтобы он работал стабильно, по моему опыту, нужно очень много времени.

Будем считать, что виртуальная машина у нас уже установлена и видна в менеджере виртуальных машин VirtualBox‘а. Кстати, посмотреть список виртуальных машин можно командой:


VBoxManage list vms

Вывод этой команды выглядит примерно вот так:

Скриншот 2015-01-01 15.40.11

Слева название виртуальной машины, а справа их UUID, ведь на никто не гарантирует, что нет виртуальных машин с одинаковым названием.

для получения более подробной информации о имеющихся виртуальных машинах можно дописать в конец команды «—long».

Для запуска виртуальной машины в скрытом режиме переходим в директорию с VirtualBox 


cd "c:\Program Files\Oracle\VirtualBox\"

Шаблон команды запуска виртуальной машины выгладит так.


VBoxHeadless.exe -s {VMName} -v on

Например, этой командой мы запускаем виртуальную машину, которая называется «7» :


VBoxHeadless.exe -s 7 -v on

Для вывода справки достаточно просто ввести команду


VBoxHeadless.exe

Результат будет вот таким:

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 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 устройства}

Более полный список параметров:

Скриншот 2015-01-01 16.12.28

Проблемы, с которыми я столкнулся

На данный момент проблема только одна, но она довольно неприятна.

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 устройство
  • Заходим в настройки виртуальной машины и создаем такой фильтр

Скриншот 2015-01-13 14.26.00

  • Запускаем виртуальную машину
  • Подключаем USB устройство
  • Возможно придется снова выполнить команду подключения устройства
  • PROFIT!!!

Надеюсь, кому-нибудь статья окажется полезной. Если есть вопросы — добро пожаловать в комментарии.

Virtual Box в максимально скрытном режиме.: 3 комментария

    • Vladimir:

      1. Надо батник засунуть в автозагрузку или в Планировщике сделать правило, чтобы виртуалка запускалась после старта ОСи.
      2. На виртуалке сделать мост (проброс для получения реального IP) и включить RDP/настроить SSH.
      Тогда можно будет заходить из сети.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s