Ubuntu 데스크탑에서 Windows의 응용 프로그램을 시작하십시오.


12

우분투에서 다음을 수행하는 쉘 스크립트를 작성하고 싶습니다.

  1. Virtualbox에서 Windows 7 게스트 OS가 아직 실행되고 있지 않은 경우 부팅합니다.

  2. Windows에서 쉘 스크립트를 실행하십시오. 여기서 쉘 스크립트는 Ubuntu 호스트 운영 체제에서 호출됩니다.

내 목표는 게스트 OS의 응용 프로그램에 대한 Ubuntu 호스트 데스크톱에서 응용 프로그램 시작 관리자를 만드는 것입니다. 예를 들어, Windows에서 Visual Studio를 시작하는 Ubuntu 데스크톱에서 Visual Studio의 바로 가기를 만들 수 있습니다. 나는 항상 응용 프로그램 바로 가기를 클릭하기 전에 Windows가 시작되기를 기다리는 대신 Ubuntu 데스크탑에서 직접 Windows 응용 프로그램을 시작할 수 있기를 원했습니다.

답변:


15

Windows 게스트에는 약간의 제한이 있지만 시작 관리자에 넣을 수있는 스크립트에서 게스트 모드를 심리스 모드로 실행하려면 다음 절차를 테스트했습니다.

  • VirtualBox Manager 시작
  • 사용자 및 비밀번호를 사용하여 창에 로그인
  • 심리스 모드로 전환 Host+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
  • 저장 상태에서 VM 종료

    VBoxManage controlvm "Name_of_VM" savestate

Ubuntu 데스크탑에서 완벽한 Windows 응용 프로그램 창을 즐기려면이를 스크립트에 넣으십시오.

암호없는 Windows 로그온을 설정 한 경우 작동하지 않습니다. 제한 사항 및 Windows가 작동하도록 구성하는 방법 은 가상 상자 설명서 를 참조하십시오 .

또한 비밀번호가 없거나 비어있는 계정을 사용하려면 게스트의 그룹 정책을 변경해야합니다. 이렇게하려면 gpedit.msc 를 입력하여 명령 행에서 그룹 정책 편집기를 열고 키를 열고 Computer Configuration\Windows Settings\Security Settings\Local Policies\Security OptionsAccounts: Limit local account use of blank passwords to console logon only을 Disabled로 변경하십시오 .

, 윈도우 홈 에디션과 같은 그룹 정책 편집기 (gpedit.msc를)하지 않고 운영 체제 레지스트리 키에서 DWORD를 만드는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduse과에 따라, 동일한 효과를 달성 할 0으로 설정 이 답변 .


이러한 각 명령을 Windows 명령 행 또는 Ubuntu 명령 행에서 실행해야합니까?
앤더슨 그린

꽤 좋은 개념인데, 어떤 이유로 든 심리스 모드를 좋아하지는 않았지만 아마도 키보드 탐색에 혼란을 줄 수 있기 때문입니다. 그러나 Quicken 및 iTunes와 같이 여전히 사용하는 몇 가지 Windows 프로그램에 대해이 중 일부를 시도하고 싶습니다. @AndersonGreen : 이것은 Ubuntu 명령 줄에서 실행되며 테스트를 위해 터미널에 쉽게 입력 한 다음 스크립트로 만들 수 있습니다.
Marty Fried

스크립트에 입력 한 비밀번호가 Windows 로그인 비밀번호 또는 Ubuntu 로그인 비밀번호 여야합니까?
Anderson Green

우분투에 로그인했을 때 필요한 Windows 암호이며 VM을 시작할 때 루트 액세스가 필요하지 않습니다. 참고는 해야 할 일이에 대한 Windows 암호 및 로그인합니다.
Takkat

반대의 매너에서 작동해야하는 경우 (Windows를 기본 OS로, Linux를 가상 머신으로 실행)
William

3

이것은 답변보다 더 힌트이지만 의견에 비해 너무 큽니다.

아마 이것을 봐야 합니다 . 문서에 따르면이 명령은 호스트 OS에서 실행됩니다 (우분투 호스트와 Windows 게스트를 가정합니다).

VBoxManage guestcontrol "Windows XP Pro" execute --image "cmd.exe" --username javier --verbose "/c" "regedit.exe"

Windows (게스트)에서 regedit를 열어야하지만 결코 작동시키지 못했습니다.

당신은 또한 사용할 수 있습니다

VBoxManage showvminfo "Windows XP Pro" | grep State

VM이 실행 중인지 확인합니다.


흥미로운 아이디어이며,이 아이디어가 과제를 수행하는 다른 방법으로 사용될 수 있다고 생각합니다. 게스트는 호스트에서 시작한 다음 실행 중일 때 명령을 실행하도록 명령을 수행 할 수 있습니다. 프로그래머에게는 내 생각보다 쉬운 방법 일 수 있습니다. 루프에서 "sleep"을 사용하여 VM이 가동 될 때까지 기다리지 만 단일 스크립트를 사용하여 호스트에서 모두 수행 할 수 있습니다.
Marty Fried

방금 첫 번째 실행 명령을 시도했으며 우분투 터미널 명령 줄 에서이 명령을 사용하여 "Windows XP"라는 이미 실행중인 Windows XP VM에서 첫 번째 시도에서 Quicken을 실행할 수있었습니다. VBoxManage guestcontrol Windows\ XP exec --image c:\\program\ files\\quicken\\qw.exe --username XXXXX --password XXXXX여기서 XXXXX는 내 사용자 이름과 암호였습니다.
Marty Fried

어쩌면 내 문제는 암호가 적은 계정을 사용한다는 것입니다.
Javier Rivera

아마도 ... 방금 형식을 사용하기 위해 실행 한 명령을 변경했으며 실제로 regedit를 실행했습니다.
Marty Fried

Takkat은 암호가없는 계정에서는 작동하지 않는다고 말했습니다. 그것은 왜 내가 그것을 할 수 없었는지 설명합니다;).
Javier Rivera

2

Linux가 아직 실행 중이 아닌 경우 VM의 Windows 파티션에 액세스 할 수 없기 때문에 작동하지 않는다는 것을 깨달았을 때 원래 아이디어를 삭제했습니다. 더 복잡한 방법이있을 수 있지만 실제로 가치가 있는지는 모르겠습니다.

공통 공유 디렉토리를 갖는 것이 가능할 수 있으며 Windows의 스크립트는 항상이 디렉토리가 비어 있는지 확인합니다. 그렇지 않은 경우 디렉토리에서 스크립트를 실행하며 VM을 실행하기 전에 Ubuntu 시스템에서 스크립트를 실행합니다.

다음에 실행되지 않도록 첫 번째 스크립트를 삭제하는 두 번째 스크립트가있을 수 있습니다.


Ubuntu 데스크톱에서 호출 할 수있는 Visual Studio의 바로 가기와 Internet Explorer의 바로 가기를 만들고 싶습니다 (가상 컴퓨터에서 실행되도록). 설명 된 방법을 사용하여이 작업을 수행 할 수 있습니까?
앤더슨 그린

게스트 운영 체제에서 호스트 응용 프로그램 (예 : Kolourpaint)을 시작하여 그 반대도 수행 할 수 있는지 알고 싶습니다.
앤더슨 그린

그렇다면 손님 추가를 사용하여 역을 할 수 있습니까?
앤더슨 그린

또한 Windows 시작 폴더 또는 Ubuntu 시작 응용 프로그램 목록을 참조하고 있습니까?
앤더슨 그린

죄송합니다. VM이 실행될 때까지 windows 폴더가 없기 때문에 첫 번째 아이디어에 결함이 있음을 깨달았습니다. 나는 대답을 완전히 수정했으며 너무 혼란스럽지 않기를 바랍니다.
Marty Fried

1

나는 똑같은 것을 원했고 guestcontrol을 사용하지 않고 해결했습니다. 내 MacOS X 호스트에는 Win7을 실행하는 내 vbox 클라이언트가 Z :로 매핑 한 폴더 (Windows)가 있습니다. 더미 파일을 사용하여 다음과 같이 호스트와 클라이언트 간 통신합니다.

Mac 호스트에서 :-Win-client에서 시작하려는 각 Windows 응용 프로그램에 대한 아이콘이 포함 된 하나의 쉘 스크립트를 작성했습니다. 기본적으로 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 스크립트에 일치하는 시작 줄을 추가합니다. 잘 작동하며 이전 게시물의 Martys 아이디어와 일치한다고 생각합니다.


우분투 호스트에서 이것을 테스트 했습니까?
user68186

아니요, 그러나 그것이 고장없이 작동 할 것이라고 확신합니다. vbox 명령은 동일하며 bash도 마찬가지입니다.
Urban

pgrep대신 사용하는 것이 더 안전합니다 ps | grep. 후자는 자체 매칭의 위험이 있습니다.
muru

네 말이 맞아. 자체 일치 문제를 걸러 내기 위해 여분의 grep -v를 추가하여 ps를 사용하여 문제를 해결했다고 생각합니다. 필자의 경우 VBox 이름 'Windows 7'이 프로세스에 대한 주석 인수이기 때문에이 경우 제안한대로 pgrep을 사용하는 방법을 알 수 없었습니다 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.
Urban
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.