Вопрос или проблема
На моей дистрибуции lubuntu 24.04 установлен гипервизор Oracle VirtualBox 7.1.6, и я импортировал виртуальную машину (названную my-virtual-machine
ниже в этом вопросе).
Запуск и выключение виртуальной машины через командную строку
Я нашел, как запускать и выключать виртуальную машину через командную строку:
- Для запуска виртуальной машины:
/usr/bin/VBoxManage startvm 'my-virtual-machine' --type gui
- Для выключения виртуальной машины:
/usr/bin/VBoxManage controlvm 'my-virtual-machine' acpipowerbutton
Описание моих потребностей
У меня есть следующие потребности:
- запускать
my-virtual-machine
(гостевую ОС) автоматически при загрузке хоста (то есть lubuntu 24.04) - выключать
my-virtual-machine
при завершении работы хоста - виртуальная машина должна запускаться с GUI, а не в headless режиме
По этому посту, который очень старый и ссылается на VirtualBox 4.2, но кажется, что он все еще актуален для VirtualBox 7.1, я могу решить первую и, возможно, вторую задачу.
Проблема заключается в третьем запросе, так как метод, описанный в статье, позволяет запустить виртуальную машину при загрузке системы хоста, но в headless режиме, а не с GUI.
Когда виртуальная машина корректно запущена, я могу увидеть следующие два процесса с помощью команды ps aux
:
> ps aux | grep VBox
[...] /usr/lib/virtualbox/VBoxHeadless --comment my-virtual-machine --startvm 546632bd-b8bd-4f2d-b2a1-8657b968378a --vrde config
[...] /usr/lib/virtualbox/VBoxSVC --auto-shutdown --inherit-startup-pipe 7
Вопрос
Как запустить VM Oracle VirtualBox с GUI (а не в headless режиме) при загрузке хост-системы и выключить VM при завершении работы хоста?
Я нашел полезное обходное решение: прежде всего, запуск виртуальной машины в headless режиме должен остаться точно таким, каким описан в вопросе.
Фактически, обычно не требуется запускать GUI виртуальной машины, а только в некоторых редких случаях.
Ручной запуск GUI Oracle VirtualBox
После завершения процесса загрузки хоста, и когда необходимо запустить GUI виртуальной машины, я могу запустить GUI Oracle VirtualBox двойным щелчком по иконке VirtualBox или с помощью команды VirtualBox
, выполненной в терминале.
В моем случае открывается изображение, показанное ниже:
Изображение подчеркивает, что:
- виртуальная машина работает
- кнопка в правом верхнем углу меняется с Start на Show.
Отображение GUI VM с помощью кнопки Show
Нажав на кнопку Show
(которая выделена на предыдущем изображении), можно запустить GUI виртуальной машины.
Это именно то, что мне нужно, потому что headless-запуск виртуальной машины достаточен в большинстве случаев загрузки системы, и только иногда необходимо открыть GUI виртуальной машины.
.
Ответ или решение
Теория
Oracle VirtualBox – это мощный и популярный инструмент для создания и управления виртуальными машинами. В вашем случае задача состоит в том, чтобы автоматизировать запуск виртуальной машины (ВМ) с графическим интерфейсом (GUI) при старте хостовой системы и корректно завершать её работу при выключении хоста. Линукс-система lubuntu 24.04 позволяет это сделать, используя возможности скриптинга и управление системными службами.
Автоматическое управление ВМ включает в себя два аспекта:
-
Запуск ВМ с GUI при старте системы: VBoxManage – это утилита командной строки для управления виртуальными машинами в VirtualBox. Она позволяет запускать ВМ как в безголовом режиме (headless), так и с графическим интерфейсом (GUI), используя параметр
--type gui
. -
Завершение работы ВМ при выключении системы: Это можно реализовать, посылая команду acpipowerbutton, которая инициирует корректное завершение работы гостевой ОС. В современных ОС команда поступает как сигнал завершения работы, что эквивалентно нажатию кнопки питания на реальной машине.
Пример
Для автоматизации процессов запуска и остановки виртуальной машины, вам потребуется создать системные службы (systemd unit) для управления ВМ при старте и завершении работы хоста. Вот примеры таких сценариев:
-
Создание юнита для запуска ВМ при старте системы:
Создайте файл юнита в директории
/etc/systemd/system/
с именемvm-start.service
:[Unit] Description=Запуск виртуальной машины my-virtual-machine After=network.target [Service] Type=forking ExecStart=/usr/bin/VBoxManage startvm 'my-virtual-machine' --type gui [Install] WantedBy=default.target
После сохранения файла, выполните команду для проверки и установки на автозапуск:
sudo systemctl enable vm-start.service
-
Создание юнита для завершения работы ВМ при остановке системы:
Создайте дополнительный файл юнита, например,
vm-stop.service
:[Unit] Description=Завершение работы виртуальной машины my-virtual-machine Before=shutdown.target [Service] Type=oneshot ExecStart=/usr/bin/VBoxManage controlvm 'my-virtual-machine' acpipowerbutton RemainAfterExit=yes [Install] WantedBy=shutdown.target
Установите этот юнит аналогично предыдущему:
sudo systemctl enable vm-stop.service
Применение
Эти юниты позволят автоматизировать запуск и остановку вашей виртуальной машины. При следующем перезапуске хостовой системы, vm-start.service
запустит ВМ c GUI, а vm-stop.service
гарантирует, что ВМ будет корректно завершена перед выключением хоста.
Тестирование: Перед внедрением в рабочую среду настоятельно рекомендуется протестировать сценарии работы ВМ. Убедитесь, что все команды выполняются корректно и система адекватно отвечает на сигналы старта и остановки.
Оптимизация: Возможно, вы захотите дополнительно настроить параметры самого VirtualBox, такие как увеличение выданных системных ресурсов для ВМ или настройка сети, чтобы убедиться в стабильной работе гостевой системы.
Эти меры позволят сэкономить время и обеспечить более автоматизированный процесс работы вашей среды виртуализации. Подобный подход также уменьшит вероятность ошибок, связанных с ручным управлением виртуальными машинами, что особенно актуально в случае использования ВМ в бизнес-среде.