Как сделать скриншоты виртуальных машин VirtualBox
TL;DR
Скрипт vboxscreenshot.sh автоматизирует создание скриншотов запущенной виртуальной машины VirtualBox с нумерацией файлов и сохранением на Рабочий стол. Подходит для Linux с установленным VBoxManage; при запуске скрипт сам определяет запущенную VM (если работает одна VM).
Версия и автор
Версия 1.0
Автор: Falko Timme
Подписывайтесь на меня в Twitter
VirtualBox — удобное решение для виртуализации, но ему не хватает одной полезной функции: встроенной команды для точечных скриншотов рабочей области гостевой ОС без декораций окна. Можно использовать системный Print Screen, но это снимет весь экран хоста, включая рамки окна, что заставит редактировать изображение вручную.
Этот гайд показывает, как создать небольшой скрипт, который делает скриншот VirtualBox VM одним кликом. Скрипт использует командную утилиту VirtualBox VBoxManage.
Важно: материал приводится без гарантий. Это один из рабочих способов — существуют и другие. Скрипт может требовать прав и корректных путей к VBoxManage.
Предварительная заметка
Я создам скрипт vboxscreenshot.sh и помещу его на Рабочий стол, чтобы можно было запускать двойным кликом. Скриншоты будут сохраняться на Рабочем столе (можно поменять папку в переменной outputdir). Файлы будут иметь имена 1.png, 2.png, 3.png и т. д. — скрипт автоматически инкрементирует номер.
Скрипт автоматически пытается определить имя запущенной VM, поэтому предполагается, что в хосте запущена только одна виртуальная машина в момент съёмки. Альтернативно можно задать имя VM в самом скрипте.
1 Создание vboxscreenshot.sh
Откройте текстовый редактор (например, gedit)…

…и создайте новый файл со следующим содержимым:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
vboxmanage=/usr/bin/VBoxManage
# Specify the output directory
outputdir=~/Desktop
# Find the next free image ID (1.png, 2.png, 3.png, etc.)
cd $outputdir
list=([0-9]*)
last=${list[@]: -1}
nextnum=$((10#${last%%[^0-9]*} + 1))
# Find out the name of the running VM; this assumes that you have just one VM running at a time
for uuid in $($vboxmanage list runningvms --long | grep "UUID: " | awk 'BEGIN{FS="UUID: "}{print $2}')
do
vm=$($vboxmanage showvminfo $uuid | sed -e'/^USB Device Filters:/,$ d' | grep "Name:" | awk 'BEGIN{FS="Name: "}{print $2}')
done
# Alternatively, you can specify the name of the VM here of which you want to take a screenshot
#vm="Ubuntu 12.04 Desktop"
$vboxmanage controlvm "$vm" screenshotpng $outputdir/$nextnum.png
exit 0Вы можете изменить директорию вывода в переменной outputdir, если не хотите сохранять скриншоты на Рабочем столе. Если вы хотите принудительно указать имя виртуальной машины, раскомментируйте строку #vm=”Ubuntu 12.04 Desktop” и замените имя на нужное.
Сохраните файл как vboxscreenshot.sh на Рабочем столе:

Затем кликните правой кнопкой по файлу и выберите «Свойства»:

Перейдите на вкладку «Права доступа» и установите галочку «Разрешить выполнение файла как программы»:

Готово. Запустите VirtualBox и запустите VM. Чтобы сделать скриншот, дважды кликните по иконке vboxscreenshot.sh на Рабочем столе. Нажмите «Запустить», когда появится диалог «Вы хотите запустить “vboxscreenshot.sh” или отобразить его содержимое?»:

После выполнения скрипта на Рабочем столе появится файл скриншота (в примере — 1.png):

2 Убрать диалог запуска (опционально)
Если диалог подтверждения запуска надоедает, откройте файловый менеджер Nautilus…

…перейдите в Редактирование > Настройки:

На вкладке «Поведение» выберите «Запускать исполняемые текстовые файлы при открытии» в секции «Исполняемые текстовые файлы»:

После этого двойной клик по vboxscreenshot.sh будет сразу запускать скрипт без диалога.
Как это работает — короткая методология
- Скрипт использует VBoxManage для управления виртуальной машиной и команды controlvm screenshotpng.
- Он автоматически определяет UUID запущенной VM через list runningvms –long и затем получает имя VM через showvminfo.
- Для имен файлов применяется простая механика: скрипт ищет последние числовые файлы в выходной папке и увеличивает номер на единицу.
Когда этот подход не сработает (контрпримеры)
- Запущено несколько виртуальных машин одновременно — скрипт может выбрать неправильную VM или вернуть пустое имя.
- VBoxManage находится в другом пути (не /usr/bin/VBoxManage). Тогда переменная vboxmanage должна указывать на корректный путь.
- Вы запускаете VirtualBox на Windows или macOS — скрипт написан для bash и Linux-подобных систем.
- Конфигурация безопасности рабочего стола блокирует запуск исполняемых скриптов двойным кликом.
Альтернативные подходы
- Использовать глобальный инструмент захвата экрана на хосте и автоматизацию (с последующей кроп-обработкой). Это проще, но требует дополнительной обрезки.
- На Windows/Mac использовать VBoxManage из командной строки PowerShell/Terminal и адаптировать команды под платформу.
- Установить расширения или гостевые дополнения и делать скриншоты из гостевой ОС (например, средствами среды рабочего стола гостя).
Практические советы и эвристики
- Если скриншоты критичны, указывайте явное имя VM в переменной vm, чтобы избежать неправильного выбора.
- Указывайте абсолютный путь в outputdir, чтобы избежать проблем при запуске из разных рабочих каталогов.
- Для пакетных снимков (частые скриншоты) подумайте о сжатии PNG или ротировании старых файлов.
Критерии приёмки
- Скрипт создает PNG-файл в назначенной папке при запуске и увеличивает номер файла.
- Скриншот отражает экран гостевой ОС без рамок окна VirtualBox.
- Скрипт последовательно работает при запуске одной VM; при указании vm работает для любой VM с таким именем.
Роль‑ориентированные чек-листы
- Конечный пользователь:
- Дважды кликнуть vboxscreenshot.sh на Рабочем столе.
- Убедиться, что VM запущена.
- Проверить появление файла 1.png, 2.png и т. д.
- Администратор:
- Проверить путь к VBoxManage и права исполнения скрипта.
- Настроить политику запуска исполняемых текстовых файлов, если нужно.
- Разработчик/интегратор:
- Добавить логирование ошибок в скрипт.
- При необходимости изменить формат имени или место хранения.
Тестовые случаи и приёмка
- Запустить одну VM, нажать дважды скрипт — файл создан.
- Запустить две VM — поведение задокументировано (скрипт может выбрать одну из них); при указании vm — скриншот для указанной VM.
- Установить другой путь к VBoxManage и проверить работу.
Безопасность и конфиденциальность
- Скриншоты могут содержать конфиденциальные данные. Храните их в защищённых папках или удаляйте после использования.
- Если вы сохраняете скриншоты в общую папку, учтите риски доступа посторонних.
Совместимость и советы по миграции
- Скрипт рассчитан на Linux с bash и установленным VirtualBox.
- На Windows используйте PowerShell-аналоги команд VBoxManage; на macOS путь к VBoxManage часто /usr/local/bin/VBoxManage.
- Если VBoxManage не найден, поищите его через which VBoxManage или locate VBoxManage.
Сводка
Этот простой скрипт экономит время и делает скриншоты гостевой ОС без дополнительных действий по кадрированию. Подходит для одноразовых снимков и небольших рабочих процессов. Для более сложных сценариев — адаптируйте скрипт: явное имя VM, лог-файлы, управление версиями снимков.
Ссылки
- VirtualBox: https://www.virtualbox.org/
Похожие материалы
Как создать PST‑файл в Outlook — шаги и советы
Snipping Tool не работает в Windows 11 — что делать
Co‑Pilot на Xbox — включение и использование
Что делать, если средство устранения неполадок Windows не работает
hiberfil.sys — что это и как удалить