Открытие приложений на виртуальной машине 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 :

Запустите команду на госте

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 на одном хосте

Мой совет

Используйте доступный вариантчтобы увидеть, что на самом деле происходит (отчетность с гостевой стороны может быть ограничена тем, что Windows решит сообщать или не сообщать ), например, так:

      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
  1. На виртуальной машине Windows 10 удалите гостевые дополнения Oracle VM VirtualBox (Панель управления > Удаление программы).
  2. Выключите виртуальную машину.
  3. Загрузите ISO-файл из более старой версии гостевых дополнений VirtualBox здесь . Работает сVBoxGuestAdditions_6.1.48.iso.
  4. (Необязательно) Сохраните файл ISO в папке~/.config/VirtualBox/.
  5. В диспетчере VirtualBox выберите файл ISO для порта SATA 1: [Оптический диск] VBoxGuestAdditions_6.1.48.iso .
  6. Запустите виртуальную машину.
  7. В разделе «Этот компьютер» дважды щелкните « CD Drive (D:) VirtualBox Guest Additions» , затемVBoxWindowsAdditions.exeи следуйте инструкциям по установке гостевых дополнений VirtualBox v6.1.48.

Примечание

Ни одно из гостевых дополнений VirtualBox v7, похоже, не работает. Затем, поскольку работают только гостевые дополнения VirtualBox v6, возможно, лучше использовать VirtualBox v6 вместо VirtualBox v7.

Другие вопросы по тегам