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

10

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

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

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

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

    
задан Anderson Green 21.06.2012 в 02:05
источник

4 ответа

11

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

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

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

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

    VBoxManage startvm "<Name_of_VM>"
    

    или (для внешнего интерфейса Qt)

    VirtualBox --startvm "<Name_of_VM>"
    
  • Запустить приложение в VM

    VBoxManage --nologo guestcontrol "<Name_of_VM>" run --exe "C:\full\path\to\program.exe" --username windowsuser --password password --wait-stdout
    
  • Завершить виртуальную машину в состоянии сохранения

    VBoxManage controlvm "Name_of_VM" savestate
    

Поместите их в сценарий, чтобы наслаждаться бесшовными окнами приложений Windows на рабочем столе Ubuntu.

Если вы настроили вход в систему без пароля, это не сработает. См. В Руководство по виртуальной коробке для ограничения и настройки Windows для его работы.

"Кроме того, чтобы использовать учетные записи без или с пустым паролем, необходимо изменить политику группы гостей. Для этого откройте редактор групповой политики в командной строке, набрав gpedit.msc, откройте ключ Конфигурация компьютера \ Windows Настройки \ Параметры безопасности \ Локальные политики \ Параметры безопасности и изменить значение Учетных записей: Ограничьте использование локальной учетной записи пустых паролей для входа в консоль только для отключенных. "

    
ответ дан Takkat 21.06.2012 в 18:41
источник
3

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

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

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

    
ответ дан Javier Rivera 21.06.2012 в 15:51
2

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

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

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

    
ответ дан Marty Fried 21.06.2012 в 02:20
1

Я хотел получить то же самое и решил его решить без использования гостевого управления. На моем узле MacOS X у меня есть папка (с именем Windows), которую мой клиент Vbox, работающий с Win7, отображен как Z :. Я использую фиктивные файлы для связи между хостом и моими клиентами следующим образом:

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

    
ответ дан Urban 04.11.2014 в 19:41