Запустіть програму в Windows з робочого столу Ubuntu


12

Я хотів би написати сценарій оболонки в Ubuntu, який робить наступне:

  1. Завантажте гостьову ОС Windows 7 у Virtualbox, якщо вона ще не працює.

  2. Запустіть скрипт оболонки в Windows, де сценарій оболонки викликається з операційної системи хоста Ubuntu.

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

Відповіді:


15

Є деякі обмеження з боку гостей Windows, але для запуску гостьової програми в безшовному режимі зі сценарію, який можна помістити в пусковий механізм, ми протестували наступну процедуру:

  • Запустіть VirtualBox Manager
  • Увійдіть до Windows із вашим користувачем та паролем
  • Перехід у безшовний режим Host+L
  • У безшовному режимі збережіть стан машини

Тепер ми можемо отримати повний контроль командного рядка над віртуальною машиною за допомогою таких команд:

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

    VBoxManage startvm "<Name_of_VM>"

    або (для кордону Qt)

    VirtualBox --startvm "<Name_of_VM>"
  • Запустіть додаток у віртуальній машині

    VBoxManage --nologo guestcontrol "<Name_of_VM>" run --exe "C:\\full\\path\\to\\program.exe" --username windowsuser --password password --wait-stdout
  • Завершіть VM у збереженому стані

    VBoxManage controlvm "Name_of_VM" savestate

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

У випадку, якщо ви налаштували вхід без пароля Windows, це не буде працювати. Дивіться у Посібнику з віртуального вікна щодо обмежень та способів налаштування Windows для роботи.

Також, щоб використовувати облікові записи без або з порожнім паролем, групову політику гостя необхідно змінити. Для цього відкрийте редактор групової політики в командному рядку, ввівши gpedit.msc , відкрийте ключ Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Optionsі змініть значення Accounts: Limit local account use of blank passwords to console logon onlyна Disabled.

У операційних системах без редактора групової політики (gpedit.msc), таких як Домашні видання Windows, створення DWORD за ключем реєстру HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduseта встановлення його в нуль дозволить досягти такого ж ефекту, відповідно до цієї відповіді .


Чи повинна кожна з цих команд запускатися з командного рядка Windows або командного рядка Ubuntu?
Андерсон Грін

Дуже приємна концепція, хоча мені чомусь дуже не подобався безшовний режим - можливо, тому, що він стає заплутаним щодо навігації по клавіатурі. Але я спокусився спробувати щось із цього для моїх декількох програм Windows, які я все ще використовую, як Quicken та iTunes. @AndersonGreen: це запускається з командної лінії Ubuntu, і його можна легко ввести в термінал для тестування, після чого зробити в сценарій.
Марті Фрід

Якщо пароль (вводиться в сценарій) повинен бути паролем для входу в Windows або паролем для входу в Ubuntu?
Андерсон Грін

Це пароль для Windows, який вам потрібен, оскільки ви, ймовірно, увійшли в Ubuntu, а для запуску VM не потрібно вимагати кореневого доступу. Зауважте, що для цього вам потрібен пароль Windows та логін.
Таккат

Якщо ця робота працюватиме в протилежному маєтку (під керуванням Windows як основної ОС та Linux як віртуальної машини)
Вільям

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

перевірити, працює чи ні.


Цікаві ідеї, і я думаю, що це може бути використане як інший спосіб виконання завдання. Гість може бути запущений з хоста, тоді, коли він працює, команда, ймовірно, може бути зроблена для роботи над запуском команди. Для програміста це може бути простіший спосіб, ніж моя ідея; це передбачає використання "сну" в циклі, щоб дочекатися, коли VM з'явиться, але все це можна зробити з хоста, за допомогою одного сценарію.
Марті Фрід

Я щойно випробував вашу першу команду Execute і зміг запустити Quicken з моєї першої спроби з уже запущеної Windows XP VM, названої "Windows XP", використовуючи цю команду з командного рядка терміналу Ubuntu:, VBoxManage guestcontrol Windows\ XP exec --image c:\\program\ files\\quicken\\qw.exe --username XXXXX --password XXXXXде XXXXX було моїм іменем користувача та паролем.
Марті Фрід

Можливо, моя проблема полягає в тому, що я використовую обліковий запис менше пароля.
Хав'єр Рівера

Напевно ... Я просто змінив команду, яку я запустив, щоб використовувати ваш формат, і він дійсно запустив regedit.
Марті Фрід

Таккат заявив, що він не працює в безаварійних облікових записах, як у мене. Це пояснює, чому я ніколи цього не міг зробити;).
Хав'єр Рівера

2

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

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

У вас може бути 2-й сценарій, який видаляє перший, щоб він не запускався наступного разу.


Я хотів би створити ярлик для Visual Studio та ярлик для Internet Explorer, який можна викликати з робочого столу Ubuntu (щоб вони працювали у віртуальній машині). Чи можна це зробити за допомогою описаного вами методу?
Андерсон Грін

Мені хотілося б знати, чи може бути зроблено і зворотне - запуск хост-програми (наприклад, Kolourpaint) з гостьової операційної системи.
Андерсон Грін

Чи можна зробити зворотне, використовуючи додатки для гостей?
Андерсон Грін

Також ви посилаєтесь на папку запуску Windows або список програм запуску Ubuntu?
Андерсон Грін

Вибачте, я зрозумів, що моя перша ідея була помилкою, оскільки папка Windows не існує доти, доки не запущена VM. Я повністю переглянув свою відповідь, і сподіваюся, що це не надто заплутано.
Марті Фрід

1

Я хотів те ж саме і закінчив вирішити це, не використовуючи гостьовий контроль. На моєму хості 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-файл), який виглядає приблизно так:

@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-скрипт на клієнті. Чудово працює, і я думаю, що це відповідає ідеї Мартіса в попередньому дописі.


Ви протестували це на хості Ubuntu?
user68186

Ні, але я впевнений, що це спрацювало б без збоїв. Команди vbox такі самі, як і bash.
Урбан

Безпечніше використовувати pgrepзамість цього ps | grep. Останній ризикує співставити себе.
muru

Так, ви праві. Я вважаю, що виправлено це вище, використовуючи ps, додавши додатковий grep -v, щоб відфільтрувати проблему самовідбору. Я не міг зрозуміти, як використовувати pgrep, як ви запропонували в цьому випадку, оскільки назва VBox "Windows 7" у моєму випадку є аргументом коментаря до процесу, як це: MacMini:~ urban$ ps ax | grep -v grep | grep 'Windows 7' 10874 ?? R 4:38.49 /Applications/VirtualBox.app/Contents/Resources/VirtualBoxVM.app/Contents/MacOS/VirtualBoxVM --comment Windows 7 --startvm 24507412-789d-42ed-9c79-b4faf0c2d130 --no-startvm-errormsgboxале, можливо, у вас є пропозиція щодо цього?
Урбан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.