เปิดแอปพลิเคชั่นใน Windows จากเดสก์ท็อป Ubuntu


12

ฉันต้องการเขียนเชลล์สคริปต์ใน Ubuntu ที่ทำสิ่งต่อไปนี้:

  1. บูตระบบปฏิบัติการ Windows 7 guest ใน Virtualbox หากยังไม่ได้เปิดใช้งาน

  2. รันเชลล์สคริปต์ใน Windows ที่เชลล์สคริปต์ถูกเรียกใช้จากระบบปฏิบัติการโฮสต์ Ubuntu

เป้าหมายของฉันคือการสร้างตัวเรียกใช้งานแอปบนเดสก์ท็อปโฮสต์ Ubuntu สำหรับแอปพลิเคชันบนระบบปฏิบัติการเกส ตัวอย่างเช่นฉันสามารถสร้างทางลัดสำหรับ Visual Studio บนเดสก์ท็อป Ubuntu ที่เปิดตัว Visual Studio ใน Windows ฉันต้องการที่จะเปิดใช้งานแอปพลิเคชัน Windows โดยตรงจากเดสก์ท็อป Ubuntu แทนที่จะรอให้ Windows เริ่มต้นทำงานก่อนที่จะคลิกทางลัดแอปพลิเคชัน

คำตอบ:


15

มีข้อ จำกัด บางประการจากผู้เยี่ยมชม Windows แต่เพื่อเรียกใช้แอปพลิเคชันผู้เยี่ยมชมในโหมดไม่มีรอยต่อจากสคริปต์ที่สามารถใส่ในตัวเรียกใช้งานเราได้ทดสอบขั้นตอนต่อไปนี้:

  • เริ่มตัวจัดการ VirtualBox
  • เข้าสู่ระบบ windows ด้วยผู้ใช้และรหัสผ่านของคุณ
  • เปลี่ยนเป็นโหมดต่อเนื่อง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

ใส่เหล่านี้ไว้ในสคริปต์เพื่อเพลิดเพลินกับหน้าต่างแอปพลิเคชัน 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) เช่น Home edition ของ Windows การสร้าง DWORD ที่รีจิสตรีคีย์HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduseและการตั้งค่าให้เป็นศูนย์จะทำให้เกิดผลเช่นเดียวกันตามคำตอบนี้


ควรเรียกใช้คำสั่งเหล่านี้แต่ละคำสั่งจากบรรทัดคำสั่ง Windows หรือบรรทัดคำสั่ง Ubuntu หรือไม่
Anderson Green

แนวคิดที่ดีงามแม้ว่าฉันจะไม่เคยชอบโหมดที่ไร้รอยต่อจริงๆด้วยเหตุผลบางอย่าง - อาจเป็นเพราะมันทำให้เกิดความสับสนเกี่ยวกับการนำทางของแป้นพิมพ์ แต่ฉันก็อยากลองทำสิ่งนี้สำหรับโปรแกรม Windows บางตัวที่ฉันยังใช้อยู่เช่น Quicken และ iTunes @AndersonGreen: รันจากบรรทัดคำสั่งของ Ubuntu และสามารถป้อนได้อย่างง่ายดายในเทอร์มินัลสำหรับการทดสอบจากนั้นสร้างเป็นสคริปต์
Marty Fried

รหัสผ่าน (ที่ถูกป้อนในสคริปต์) ควรเป็นรหัสผ่านเข้าสู่ระบบ Windows หรือรหัสผ่านเข้าสู่ระบบของ Ubuntu หรือไม่
Anderson Green

นี่เป็นรหัสผ่าน windows ที่คุณต้องการเนื่องจากคุณอาจเข้าสู่ระบบ Ubuntu และการเริ่มต้น VM ไม่ควรต้องมีการเข้าถึงรูท โปรดทราบว่าคุณต้องใช้รหัสผ่าน Windows และเข้าสู่ระบบเพื่อให้ทำงานได้
Takkat

ควรทำงานในคฤหาสน์ตรงข้ามนี้ (ใช้ Windows เป็นระบบปฏิบัติการหลักและ linux เป็นเครื่องเสมือน)
William

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 กำลังทำงานอยู่หรือไม่


แนวคิดที่น่าสนใจและฉันคิดว่ามันสามารถใช้เป็นอีกวิธีหนึ่งในการทำงานให้สำเร็จ แขกสามารถเปิดตัวจากโฮสต์จากนั้นเมื่อมันทำงานคำสั่งอาจจะทำให้การทำงานเพื่อเรียกใช้คำสั่ง สำหรับโปรแกรมเมอร์มันอาจเป็นวิธีที่ง่ายกว่าความคิดของฉัน มันเกี่ยวข้องกับการใช้ "sleep" ในลูปเพื่อรอให้ VM ทำงานได้ แต่ทั้งหมดนั้นสามารถทำได้จากโฮสต์ด้วยสคริปต์เดียว
Marty Fried

ฉันลองใช้คำสั่ง execute ครั้งแรกของคุณและสามารถเรียกใช้ Quicken ในความพยายามครั้งแรกของฉันจาก Windows XP VM ที่ใช้งานอยู่แล้วชื่อ "Windows XP" โดยใช้คำสั่งนี้จาก commandline terminal ของ Ubuntu: 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 จะไม่สามารถเข้าถึงพาร์ติชัน windows ใน VM ได้หากยังไม่ได้ทำงาน อาจมีวิธีการที่ซับซ้อนกว่านี้ แต่ฉันไม่รู้ว่ามันคุ้มค่าหรือไม่

อาจเป็นไปได้ที่จะมีไดเรกทอรีที่ใช้ร่วมกันทั่วไปและสคริปต์ใน Windows จะตรวจสอบไดเรกทอรีนี้เสมอเพื่อดูว่าว่างเปล่าหรือไม่ หากไม่เป็นเช่นนั้นก็จะเรียกใช้สคริปต์ในไดเรกทอรีซึ่งจะใส่ไว้ในระบบ Ubuntu ก่อนเรียกใช้ VM

คุณสามารถมีสคริปต์ที่ 2 ซึ่งจะลบสคริปต์ที่หนึ่งเพื่อที่จะไม่ทำงานในครั้งถัดไป


ฉันต้องการสร้างทางลัดสำหรับ Visual Studio และทางลัดสำหรับ Internet Explorer ที่สามารถเรียกใช้จากเดสก์ท็อป Ubuntu (เพื่อให้ทำงานในเครื่องเสมือน) สิ่งนี้สามารถทำได้โดยใช้วิธีการที่คุณอธิบาย?
Anderson Green

ฉันต้องการที่จะรู้ว่าสิ่งที่ตรงกันข้ามสามารถทำได้ - เปิดตัวโฮสต์แอปพลิเคชัน (เช่น Kolourpaint) จากระบบปฏิบัติการแขก
Anderson Green

การผกผันสามารถทำได้โดยใช้การเพิ่มของแขก?
Anderson Green

นอกจากนี้คุณกำลังอ้างถึงโฟลเดอร์เริ่มต้น Windows หรือรายการแอปพลิเคชันเริ่มต้นของ Ubuntu หรือไม่
Anderson Green

ขออภัยฉันรู้ว่าความคิดแรกของฉันมีข้อบกพร่องเนื่องจากโฟลเดอร์ windows ไม่มีอยู่จนกว่า VM จะทำงาน ฉันแก้ไขคำตอบของฉันทั้งหมดและฉันหวังว่ามันจะไม่สับสนเกินไป
Marty Fried

1

ฉันต้องการสิ่งเดียวกันและลงเอยด้วยการแก้ไขโดยไม่ใช้ 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) ในโฟลเดอร์เริ่มต้นที่มีลักษณะเช่นนี้:

@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-script บนไคลเอ็นต์ ใช้งานได้ดีและฉันคิดว่ามันสอดคล้องกับแนวคิด Martys ในโพสต์ก่อนหน้า


คุณได้ทดสอบสิ่งนี้ในโฮสต์ Ubuntu หรือไม่?
user68186

ไม่ แต่ฉันค่อนข้างแน่ใจว่ามันจะทำงานโดยไม่มีข้อบกพร่อง คำสั่ง vbox เหมือนกันดังนั้นจึงเป็น bash
Urban

มันปลอดภัยที่จะใช้แทน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แต่บางทีคุณอาจมีข้อเสนอแนะเกี่ยวกับเรื่องนี้
Urban
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.