Запустите приложение в Windows с рабочего стола Ubuntu

Я бы хотел написать сценарий оболочки в Ubuntu, который выполняет следующее:

  1. Загрузите гостевую ОС Windows 7 в Virtualbox, если она еще не запущена. [ 114]

  2. Запустите сценарий оболочки в Windows, где сценарий оболочки вызывается из операционной системы хоста Ubuntu.

Моя цель - создать панель запуска приложений на рабочем столе хоста Ubuntu для приложения в гостевой ОС. Например, я мог бы создать ярлык для Visual Studio на рабочем столе Ubuntu, который запускает Visual Studio в Windows. Я всегда хотел иметь возможность запускать приложения Windows непосредственно с рабочего стола Ubuntu, вместо того, чтобы ждать запуска Windows, прежде чем щелкнуть ярлык приложения.

12
задан 29 July 2012 в 04:30

4 ответа

Есть некоторые ограничения со стороны гостей Windows, но для запуска гостевого приложения в бесшовном режиме из сценария, который может быть помещен в средство запуска, мы протестировали следующую процедуру:

  • Запустите VirtualBox Manager
  • Войдите в Windows под своим пользователем и паролем
  • Переключитесь в непрерывный режим Хост + L
  • В бесшовном режиме сохраните состояние машины

Теперь мы можем получить полную командную строку управление виртуальной машиной с помощью следующих команд:

  • Запустить виртуальную машину из состояния непрерывного сохранения

     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 и настройка в соответствии с этим ответом

достигается тот же эффект, если установить нулевое значение.
16
ответ дан 29 July 2012 в 04:30

Это скорее намек, чем ответ, но он слишком велик для комментария.

Вам, вероятно, следует посмотреть это . Согласно документации, эта команда запускается из ОС хоста (я предполагаю, что хост 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

, чтобы проверить, работает ли виртуальная машина.

3
ответ дан 29 July 2012 в 04:30

Я удалил исходную идею, когда понял, что она не сработает, потому что Linux не сможет получить доступ к разделу Windows на виртуальной машине, если он еще не запущен. Возможно, есть более сложный способ сделать это, но я не знаю, стоит ли оно того.

Возможно, у вас есть общий общий каталог, и сценарий в Windows всегда будет проверять этот каталог, чтобы убедиться, что пусто оно или нет. В противном случае он будет запускать сценарии в каталоге, которые будут помещены туда системой Ubuntu перед запуском виртуальной машины.

У вас может быть второй сценарий, который удаляет первый, чтобы он не запускался в следующий раз.

2
ответ дан 29 July 2012 в 04:30

Я хотел то же самое и в итоге решил его без использования 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 на клиенте. Отлично работает, и я думаю, что это соответствует идее Мартиса из предыдущего поста.

1
ответ дан 29 July 2012 в 04:30

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

Похожие вопросы: