Ubuntu masaüstünden Windows'ta bir uygulama başlatma


12

Ubuntu'da aşağıdakileri yapan bir kabuk betiği yazmak istiyorum:

  1. Zaten çalışmıyorsa, Virtualbox'ta bir Windows 7 konuk işletim sistemini başlatın.

  2. Kabuk betiğinin Ubuntu ana bilgisayar işletim sisteminden çağrıldığı Windows'ta bir kabuk betiği çalıştırın.

Amacım konuk işletim sistemindeki bir uygulama için Ubuntu ana bilgisayar masaüstünde bir uygulama başlatıcı oluşturmaktır. Örneğin, Ubuntu masaüstünde Visual Studio için Windows'ta Visual Studio'yu başlatan bir kısayol oluşturabilirim. Her zaman bir uygulama kısayolunu tıklamadan önce Windows'un başlamasını beklemek yerine Windows uygulamalarını doğrudan Ubuntu masaüstünden başlatmak istedim.

Yanıtlar:


15

Windows misafirlerinin bazı sınırlamaları vardır, ancak bir başlatıcıya yerleştirilebilecek bir komut dosyasından bir konuk uygulamasını kesintisiz modda çalıştırmak için aşağıdaki prosedürü test ettik:

  • VirtualBox Yöneticisini Başlat
  • Kullanıcı ve şifrenizle pencerelere giriş yapın
  • Kesintisiz moda geç Host+L
  • Kesintisiz modda makinenin durumunu kaydedin

Şimdi aşağıdaki komutlarla sanal makine üzerinde tam komut satırı kontrolü elde edebiliriz:

  • Sanal makineyi sorunsuz kaydetme durumundan başlatın

    VBoxManage startvm "<Name_of_VM>"

    veya (Qt ön ucu için)

    VirtualBox --startvm "<Name_of_VM>"
  • Sanal Makinede bir uygulama çalıştırın

    VBoxManage --nologo guestcontrol "<Name_of_VM>" run --exe "C:\\full\\path\\to\\program.exe" --username windowsuser --password password --wait-stdout
  • Kayıt durumunda VM'yi sonlandırma

    VBoxManage controlvm "Name_of_VM" savestate

Ubuntu masaüstünüzde sorunsuz Windows uygulama pencerelerinin keyfini çıkarmak için bunları bir komut dosyasına koyun.

Parolasız bir Windows oturumu ayarladıysanız, bu çalışmaz. Sınırlamalar ve Windows'un çalışması için nasıl yapılandırılacağı konusunda Sanal Kutu Kılavuzuna bakın .

Ayrıca, boş parolalı veya boş parolalı hesapları kullanmak için davetlinin grup ilkesi değiştirilmelidir. Bunu yapmak için, komut satırında gpedit.msc yazarak grup ilkesi düzenleyicisini açın, anahtarı açın Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Optionsve değerini Accounts: Limit local account use of blank passwords to console logon onlyDevre dışı olarak değiştirin.

Windows'un Ana Sayfa sürümleri gibi Grup İlkesi Düzenleyicisi (gpedit.msc) olmayan işletim sistemlerinde, kayıt defteri anahtarında bir DWORD oluşturma HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduseve sıfıra ayarlama, bu yanıta göre aynı etkiyi sağlayacaktır .


Bu komutların her biri Windows komut satırından mı yoksa Ubuntu komut satırından mı çalıştırılmalıdır?
Anderson Green

Oldukça güzel bir konsept, herhangi bir nedenden ötürü kesintisiz modu hiç sevmedim - muhtemelen klavye navigasyonu hakkında kafa karıştırıcı olduğu için. Ancak Quicken ve iTunes gibi hala kullandığım birkaç Windows programım için bunlardan bazılarını denemeye cazipim. @AndersonGreen: Bu, Ubuntu komut satırından çalıştırılır ve test için bir terminale kolayca girilebilir, ardından bir komut dosyasına dönüştürülebilir.
Marty Fried

Parola (komut dosyasına giriliyor) Windows oturum açma parolası mı yoksa Ubuntu oturum açma parolası mı olmalı?
Anderson Green

Ubuntu'da oturum açmış olduğunuz için ihtiyacınız olan windows şifresidir ve bir VM başlatmak için root erişimi gerektirmemelidir. Bunun çalışması için bir Windows şifresine ve giriş bilgilerine ihtiyacınız olduğunu unutmayın .
Takkat

Bunun tersi malikanede çalışması gerekir (Windows'u ana işletim sistemi olarak ve linux'u sanal makine olarak çalıştırır)
William

3

Bu bir cevaptan daha fazla bir ipucu, ama bir yorum için çok büyük.

Muhtemelen bakmak gerekir bu . Dokümanlara göre, ana bilgisayar işletim sisteminden çalıştırılan bu komut (bir Ubuntu ana bilgisayarı ve Windows konuk olduğunu varsayıyorum):

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

Windows (konuk) regedit açmak gerekir, ama ben asla işe yaramadı.

Ayrıca kullanabilirsiniz

VBoxManage showvminfo "Windows XP Pro" | grep State

VM'nin çalışıp çalışmadığını kontrol etmek için.


İlginç fikirler ve bence bu görevi yerine getirmek için başka bir yol olarak kullanılabilir. Konuk ana bilgisayardan başlatılabilir, daha sonra çalıştırıldığında, komutun çalıştırılması için muhtemelen komut verilebilir. Bir programcı için fikrimden daha kolay bir yol olabilir; VM'nin çalışmasını beklemek için bir döngüde "uyku" işlevini kullanmayı içerir, ancak bunların tümü tek bir komut dosyasıyla ana bilgisayardan yapılabilir.
Marty Fried

Ben sadece ilk yürütme komutunu denedim ve bir Ubuntu terminal komut satırından bu komutu kullanarak "Windows XP" adlı zaten çalışan bir Windows XP VM'den Quicken'ı çalıştırabildim: VBoxManage guestcontrol Windows\ XP exec --image c:\\program\ files\\quicken\\qw.exe --username XXXXX --password XXXXXXXXXX benim kullanıcı adım ve şifremdi.
Marty Fried

Belki de benim sorunum parolasız bir hesap kullanmamdır.
Javier Rivera

Muhtemelen ... Sadece formatını kullanmak için koştuğum komutu değiştirdim ve gerçekten regedit çalıştırdı.
Marty Fried

Takkat benimki gibi şifresiz hesaplarda çalışmadığını söyledi. Bu neden daha önce hiç yapamadığımı açıklıyor;).
Javier Rivera

2

Çalışmayacağını fark ettiğimde orijinal fikri sildim, çünkü Linux zaten çalışmıyorsa Linux bir VM'deki windows bölümüne erişemez. Bunu yapmanın daha karmaşık bir yolu olabilir, ama buna gerçekten değip değmeyeceğini bilmiyorum.

Ortak bir paylaşılan dizine sahip olmak mümkün olabilir ve Windows'ta bir komut dosyası, boş olup olmadığını görmek için her zaman bu dizini kontrol eder. Aksi takdirde, VM'yi çalıştırmadan önce Ubuntu sistemi tarafından oraya yerleştirilecek olan dizindeki komut dosyalarını çalıştırır.

Bir dahaki sefere çalışmayacak şekilde birincisini silen 2. bir komut dosyanız olabilir.


Visual Studio için bir kısayol ve Ubuntu masaüstünden çağrılabilecek Internet Explorer için bir kısayol oluşturmak istiyorum (böylece sanal makinede çalışırlar). Bu, tarif ettiğiniz yöntem kullanılarak yapılabilir mi?
Anderson Green

Ters işletim de yapılabilir olup olmadığını bilmek istiyorum - konuk işletim sisteminden bir ana bilgisayar uygulaması (Kolourpaint gibi) başlatıyor.
Anderson Green

Peki tersi konuk eklemeleri kullanılarak yapılabilir mi?
Anderson Green

Ayrıca, Windows başlangıç ​​klasörüne veya Ubuntu başlangıç ​​uygulamaları listesine mi başvuruyorsunuz?
Anderson Green

Üzgünüm, ilk fikrimin kusurlu olduğunu fark ettim, çünkü VM çalışana kadar windows klasörü mevcut değil. Cevabımı tamamen gözden geçirdim ve umarım kafa karıştırıcı değildir.
Marty Fried

1

Aynı şeyi istedim ve guestcontrol kullanmadan çözdüm. MacOS X ana bilgisayarımda, Win7 çalıştıran vbox istemcimin Z: olarak eşleştirdiği bir klasör (Windows adlı) var. Ben ana bilgisayar ve benim gibi müşterilerim arasında iletişim kurmak için kukla dosyaları kullanın:

Mac ana bilgisayarında: - Win-istemcisinde başlatmak istediğim her windows uygulaması için bir simge içeren bir kabuk-komut dosyası oluşturdum. Temel olarak yaptıkları şey, VirtualBox'ın daha önce başlatılmadığından emin olmaktır ve daha sonra Windows'un başlangıçtan sonra okuyabileceği paylaşılan klasörde bir "bu belirli uygulamayı başlat" dosyası oluşturur. Böyle bir komut dosyasının neye benzediğine örnek:

#!/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

Sonra Windows istemcisinde Başlangıç ​​klasöründe şöyle görünen bir komut dosyası (BAT dosyası) var:

@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

Bu şekilde, Mac bilgisayarıma yeni bir istemci başlangıç ​​simgesi eklemek istediğimde, kabuk komut dosyasını kopyalarım, yeni bir kukla dosya icat eder ve eşleşen başlangıç ​​satırlarını istemcideki BAT komut dosyasına eklerim. Harika çalışıyor ve önceki yazıdaki Martys fikrine uygun olduğunu düşünüyorum.


Bunu bir Ubuntu sunucusunda test ettiniz mi?
user68186

Hayır, ama aksaklık olmadan çalışacağından eminim. Vbox komutları aynıdır ve bash da aynıdır.
Urban

Kullanımı güvenlidir pgrepyerine ps | grep. İkincisi, kendisiyle eşleşme riski taşır.
muru

Evet haklısın. Ben kendi maç sorunu filtre için ekstra bir grep -v ekleyerek ps kullanarak düzeltti inanıyorum. Benim durumumda VBox adı 'Windows 7' gibi işlem için bir yorum argümanı olduğundan, bu durumda önerildiği gibi pgrep nasıl kullanamadım: 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-errormsgboxama belki de bu konuda bir öneriniz var mı?
Urban
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.