Я бы хотел написать сценарий оболочки в Ubuntu, который выполняет следующее:
Загрузите гостевую ОС Windows 7 в Virtualbox, если она еще не запущена. [ 114]
Запустите сценарий оболочки в Windows, где сценарий оболочки вызывается из операционной системы хоста Ubuntu.
Моя цель - создать панель запуска приложений на рабочем столе хоста Ubuntu для приложения в гостевой ОС. Например, я мог бы создать ярлык для Visual Studio на рабочем столе Ubuntu, который запускает Visual Studio в Windows. Я всегда хотел иметь возможность запускать приложения Windows непосредственно с рабочего стола Ubuntu, вместо того, чтобы ждать запуска Windows, прежде чем щелкнуть ярлык приложения.
Есть некоторые ограничения со стороны гостей Windows, но для запуска гостевого приложения в бесшовном режиме из сценария, который может быть помещен в средство запуска, мы протестировали следующую процедуру:
Теперь мы можем получить полную командную строку управление виртуальной машиной с помощью следующих команд:
Запустить виртуальную машину из состояния непрерывного сохранения
VBoxManage startvm ""
или (для внешнего интерфейса Qt)
VirtualBox --startvm ""
Запустить приложение на виртуальной машине
VBoxManage --nologo guestcontrol "" run --exe "C: \\ полный \\ путь \\ к \\ program.exe" --username windowsuser - пароль пароль --wait-stdout
Завершить виртуальную машину в состоянии сохранения
VBoxManage controlvm "Name_of_VM" savestate
Поместите их в скрипт, чтобы наслаждаться бесшовными окнами приложений Windows на рабочем столе Ubuntu.
Если вы настроили беспарольный вход в Windows, это не сработает. См. В Руководстве по Virtual Box ограничения и инструкции по настройке Windows для его работы.
Кроме того, чтобы использовать учетные записи без пароля или с пустым паролем, необходимо изменить групповую политику гостя. Для этого откройте редактор групповой политики в командной строке, набрав gpedit.msc ,откройте раздел
Конфигурация компьютера \ Параметры Windows \ Параметры безопасности \ Локальные политики \ Параметры безопасности
и измените значениеУчетные записи: Ограничьте использование пустых паролей локальной учетной записи только для входа в консоль
на Отключено.
В операционных системах без редактора групповой политики (gpedit.msc), например в домашних выпусках Windows, создание DWORD в разделе реестра HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ limitblankpassworduse
и настройка в соответствии с этим ответом
Это скорее намек, чем ответ, но он слишком велик для комментария.
Вам, вероятно, следует посмотреть это . Согласно документации, эта команда запускается из ОС хоста (я предполагаю, что хост Ubuntu и гость Windows):
VBoxManage guestcontrol "Windows XP Pro" execute --image "cmd.exe" --username javier --verbose "/c" "regedit.exe"
Должен открыться regedit в Windows (в гостевой системе), но мне никогда не удавалось заставить его работать.
Вы также можете использовать
VBoxManage showvminfo "Windows XP Pro" | grep State
, чтобы проверить, работает ли виртуальная машина.
Я удалил исходную идею, когда понял, что она не сработает, потому что Linux не сможет получить доступ к разделу Windows на виртуальной машине, если он еще не запущен. Возможно, есть более сложный способ сделать это, но я не знаю, стоит ли оно того.
Возможно, у вас есть общий общий каталог, и сценарий в Windows всегда будет проверять этот каталог, чтобы убедиться, что пусто оно или нет. В противном случае он будет запускать сценарии в каталоге, которые будут помещены туда системой Ubuntu перед запуском виртуальной машины.
У вас может быть второй сценарий, который удаляет первый, чтобы он не запускался в следующий раз.
Я хотел то же самое и в итоге решил его без использования guestcontrol. На моем хосте MacOS X у меня есть папка (с именем Windows), которую мой клиент vbox, работающий под Win7, сопоставил как Z :. Я использую фиктивные файлы для связи между хостом и моими клиентами следующим образом:
На хосте Mac: - создал один сценарий оболочки со значком для каждого приложения Windows, которое я хотел запустить в Win-клиенте.По сути, они следят за тем, чтобы VirtualBox не запускался раньше, а затем создают файл «запустить это конкретное приложение» в общей папке, который Windows может прочитать после запуска. Пример того, как выглядит такой сценарий:
#!/bin/bash
# bail if vbox is already started/running windoze...
ps ax | grep -v grep | grep 'Windows 7' > /dev/null
if [ $? -eq 0 ]; then
echo "Sorry, Windows is already running."
exit 0
fi
# send a message to Windoze which program to start...
touch /Users/urban/Documents/Windows/START_TS2000I.TXT
# startup Windoze in seamless mode
vboxmanage setextradata 'Windows 7' GUI/Seamless on
vboxmanage startvm 'Windows 7' &
exit 0
Затем на клиенте Windows у меня есть соответствующий сценарий (BAT-файл) в папке Startup, который выглядит следующим образом:
@echo off
pushd "C:\Program Files\Omega Research\Program"
if exist Z:\start_ts2000i.txt start ORTrade.exe
if exist Z:\start_ts2000i.txt del Z:\start_ts2000i.txt
.
.
.
exit 0
Таким образом, в любое время, когда я хочу добавить новый значок запуска клиента на моем Mac Я копирую сценарий оболочки, изобретаю новый фиктивный файл и добавляю соответствующие строки запуска в сценарий BAT на клиенте. Отлично работает, и я думаю, что это соответствует идее Мартиса из предыдущего поста.