Открытие приложений на виртуальной машине Windows 10 из Ubuntu 23.04/23.10 с помощью гостевого управления VBoxManage
VBoxManage GuestControl [vmname] запустить/запустить
Мне удалось открыть калькулятор на гостевой виртуальной машине Windows 10 с хоста Ubuntu 23.04 с помощью команды:
VBoxManage guestcontrol $MY_VM_NAME run --exe "C:\\Windows\\System32\\calc.exe" --username $MY_USERNAME --password $MY_PASSWORD
Проблема
Однако если сделать то же самое для приложений WordPad, Microsoft Office или Adobe Acrobat Reader, это не сработает:
VBoxManage guestcontrol $MY_VM_NAME run --exe "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe" --username $MY_USERNAME --password $MY_PASSWORD
Примечание:run
иstart
дают те же результаты.
Подробности
На хосте Ubuntu, когда я выполняю последнюю команду, курсор мигает, а приглашение никогда не возвращается. В виртуальной машине Windows 10, глядя на Диспетчер задач, я замечаю, что приложение (WordPad в данном примере) появляется в списке фоновых процессов . Когда я пытаюсь с помощью той же команды выполнить личный сценарий, который я преобразовал в файл .exe, вместо приложения, выходные данные, которые я привык видеть в «Терминале» гостевой Windows, появляются в хост-терминале Ubuntu (см. раздел «Тест» ниже). Это похоже на то, как если бы процесс гостевого управления пытался перенаправить выходные данные приложения на хост. Однако я не знаю, почему у меня нет проблем при открытии Калькулятора .
Используя--verbose
вариант возвращает:
$ VBoxManage guestcontrol $MY_VM_NAME start --verbose --exe "C:\\Windows\\System32\\calc.exe" --username $MY_USERNAME --password $MY_PASSWORD
Executing:
Image : C:\Windows\System32\calc.exe
arg[0]: C:\Windows\System32\calc.exe
Creating guest session as user 'toto'...
Waiting for guest session to start...
Successfully started guest session (ID 8)
Starting guest process ...
[1284 - Session 8]
Wait result is 'started' (1)
Process successfully started!
Guest session detached
$ VBoxManage guestcontrol $MY_VM_NAME start --verbose --exe "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe" --username $MY_USERNAME --password $MY_PASSWORD
Executing:
Image : C:\Program Files\Windows NT\Accessories\wordpad.exe
arg[0]: C:\Program Files\Windows NT\Accessories\wordpad.exe
Creating guest session as user 'toto'...
Waiting for guest session to start...
Successfully started guest session (ID 9)
Starting guest process ...
[8812 - Session 9]
Wait result is 'started' (1)
Process successfully started!
Guest session detached
Протестированные версии Ubuntu, Windows и VirtualBox
Я получил одинаковые результаты для VirtualBox v6.1 и v7.0. Я также пробовал использовать виртуальные машины, созданные изWin10_21H2_English_x64.iso
иWin10_22H2_English_x64v1.iso
. Однако независимо от версии VirtualBox, если я использую Ubuntu 22.04, все работает отлично.
РЕДАКТИРОВАТЬ 1: Точно такое же поведение в Ubuntu 23.10 , что и в Ubuntu 23.04.
РЕДАКТИРОВАТЬ 2: Проблема все еще сохраняется с VirtualBox v7.0.12.
Тест
Я создал сценарий HelloWorld, который преобразовал в исполняемый файл в гостевой системе. От хозяина, когда я это сделаю
toto@toto-pc:~$ VBoxManage guestcontrol $MY_VM_NAME run --exe "C:\\Users\\Toto\\Desktop\\runapp\\runHello.exe" --username $MY_USERNAME --password $MY_PASSWORD
Hello, World!
toto@toto-pc:~$
обратите внимание, что «Привет, мир!» появляется в терминале моего хоста вместо гостя.
2 ответа
Предисловие
Этот ответ носит чисто информационный характер и не претендует на полное решение вопроса... Хотя вполне возможно.
Ubuntu со стороны дела
Есть две похожие команды, представляющие интерес для
Запустите команду на госте
VBoxManage гостевой контроль запустите [--arg0=аргумент 0] [--domain=имя домена] [--dos2unix] [--exe=имя_файла] [--ignore-orphaned-processes] [ --no-wait-stderr | --wait-stderr ] [ --no-wait-stdout | --wait-stdout ] [ --passwordfile=файл-пароля | --password=пароль ] [--profile] [--putenv=var-name=[значение]] [--quiet] [--timeout=msec] [--unix2dos] [--unquoted-args] [--username=имя пользователя] [--verbose]Команда запуска VBoxManage GuestControl vmname позволяет выполнить программу на гостевой виртуальной машине. Стандартный ввод, стандартный вывод и стандартная ошибка перенаправляются из виртуальной машины в хост-систему до завершения программы.
... и:
Запустить команду гостю
Начало гостевого управления VBoxManage [--arg0=аргумент 0] [--domain=имя домена] [--exe=имя файла] [--ignore-orphaned-processes] [ --passwordfile=файл-пароля | --password=пароль ] [--profile] [--putenv=var-name=[значение]] [--quiet] [--timeout=мсек] [--unquoted-args] [--username=имя пользователя] [--verbose]Команда запуска VBoxManage GuestControl vmname позволяет выполнять гостевую программу до ее завершения.
... Итак, как видите, вам следует использовать последнее (т.е.
start
), поскольку первый будет держать стандартные потоки ввода-вывода гостевого процесса открытыми и перенаправлять их на терминал на хосте (или, точнее, соединять их ), что приводит к тому, что некоторые приложения могут принимать/ожидать ввод до того, как они запустятся как файл. аргумент для открытия в случае «WordPad», чтобы продолжать ждать, а не полностью загружать и удерживать приглашение в терминале на хосте... в то время как простые приложения, такие как «Калькулятор», которые, похоже, не знают об этих потоках ввода-вывода, отключаются их немедленно и запускается (т.е., насколько известно процессу на хосте, команда на госте завершилась, потоки ввода-вывода отключены и, следовательно, приглашение в терминале освобождается и восстанавливается ).
Windows сторона дела
Есть ограничения... ОС Windows накладывает определенные ограничения на графические приложения. См. главу 14 «Известные ограничения ».
Гостевой контроль. В гостевых системах Windows процесс, запущенный с использованием поддержки выполнения гостевого элемента управления, не сможет отображать графический интерфейс пользователя, если учетная запись пользователя, под которой он выполняется, в настоящий момент не зарегистрирована и не имеет сеанса рабочего стола.
... и:
Кроме того, чтобы использовать учетные записи без или с пустым паролем, необходимо изменить групповую политику гостя. Для этого откройте редактор групповой политики в командной строке, набрав
, откройте раздел Конфигурация компьютера\Настройки Windows\Настройки безопасности\Локальные политики\Параметры безопасности и измените значение Учетные записи: Ограничить использование пустых паролей для локальной учетной записи только для входа в консоль на Отключено.
... и другие экспериментальные функции, которые могут вызвать проблемы с приложениями с графическим интерфейсом:
Некоторые функции Oracle VM VirtualBox помечены как экспериментальные. Такие функции предоставляются «как есть» и официально не поддерживаются. Тем не менее, отзывы и предложения по поводу таких функций приветствуются. Полный список экспериментальных функций выглядит следующим образом:
Поддержка аппаратного 3D-ускорения для гостей Windows, Linux и Oracle Solaris.
Поддержка аппаратного ускорения воспроизведения 2D-видео для гостей Windows
Эмуляция чипсета ICH9
прошивка EFI
Использование Oracle VM VirtualBox и Hyper-V на одном хосте
Мой совет
Используйте доступный вариант
VBoxManage guestcontrol $MY_VM_NAME start --verbose \
--exe "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe" \
--username $MY_USERNAME --password $MY_PASSWORD
Решение
Проблема связана с гостевыми дополнениями VirtualBox v7 . Переход на версию v6 решает проблему.
Подробности
- Хостовая ОС: Ubuntu 23.10.
- Гостевая ОС: Windows 10.
- ВиртуалБокс: v7.0.10
- На виртуальной машине Windows 10 удалите гостевые дополнения Oracle VM VirtualBox (Панель управления > Удаление программы).
- Выключите виртуальную машину.
- Загрузите ISO-файл из более старой версии гостевых дополнений VirtualBox здесь . Работает с
VBoxGuestAdditions_6.1.48.iso
. - (Необязательно) Сохраните файл ISO в папке
~/.config/VirtualBox/
. - В диспетчере VirtualBox выберите файл ISO для порта SATA 1: [Оптический диск] VBoxGuestAdditions_6.1.48.iso .
- Запустите виртуальную машину.
- В разделе «Этот компьютер» дважды щелкните « CD Drive (D:) VirtualBox Guest Additions» , затем
VBoxWindowsAdditions.exe
и следуйте инструкциям по установке гостевых дополнений VirtualBox v6.1.48.
Примечание
Ни одно из гостевых дополнений VirtualBox v7, похоже, не работает. Затем, поскольку работают только гостевые дополнения VirtualBox v6, возможно, лучше использовать VirtualBox v6 вместо VirtualBox v7.