Pertanyaan Luncurkan aplikasi di Windows dari desktop Ubuntu


Saya ingin menulis skrip shell di Ubuntu yang melakukan hal berikut:

  1. Boot Windows 7 guest OS di Virtualbox, jika belum dijalankan.

  2. Jalankan skrip shell di Windows, di mana skrip shell dipanggil dari sistem operasi host Ubuntu.

Tujuan saya adalah membuat peluncur aplikasi di desktop host Ubuntu untuk aplikasi di OS tamu. Sebagai contoh, saya bisa membuat pintasan untuk Visual Studio di desktop Ubuntu yang meluncurkan Visual Studio di Windows. Saya selalu ingin dapat meluncurkan aplikasi Windows langsung dari desktop Ubuntu daripada menunggu Windows untuk memulai sebelum mengklik shortcut aplikasi.


11
2018-06-21 00:05


asal




Jawaban:


Ada beberapa batasan dari tamu Windows tetapi untuk menjalankan aplikasi tamu dalam mode seamless dari skrip yang dapat ditempatkan di peluncur, kami menguji prosedur berikut:

  • Mulai Pengelola Kotak Virtual
  • Masuk ke windows dengan Anda pengguna dan kata sandi
  • Beralih ke mode tanpa batas Tuan rumah + L
  • Dalam mode mulus, simpan keadaan mesin

Sekarang kita bisa mendapatkan kontrol baris perintah penuh atas mesin virtual dengan perintah berikut:

  • Mulai mesin virtual dari kondisi penyimpanan tanpa batas

    VBoxManage startvm "<Name_of_VM>"
    

    atau (untuk Qt frontend)

    VirtualBox --startvm "<Name_of_VM>"
    
  • Jalankan aplikasi di VM

    VBoxManage --nologo guestcontrol "<Name_of_VM>" run --exe "C:\\full\\path\\to\\program.exe" --username windowsuser --password password --wait-stdout
    
  • Hentikan VM dalam keadaan aman

    VBoxManage controlvm "Name_of_VM" savestate
    

Masukkan ini dalam skrip untuk menikmati jendela aplikasi Windows yang mulus di desktop Ubuntu Anda.

Jika Anda telah mengatur login Windows tanpa password ini tidak akan berfungsi. Lihat di Kotak Manual Virtual untuk keterbatasan dan cara mengonfigurasi Windows agar berfungsi.

"Juga, untuk menggunakan akun tanpa atau dengan kata sandi kosong, kebijakan grup tamu harus diubah. Untuk melakukannya, buka editor kebijakan grup pada baris perintah dengan mengetik gpedit.msc, buka kunci Computer Configuration \ Windows Settings \ Security Pengaturan \ Kebijakan Lokal \ Opsi Keamanan dan mengubah nilai Akun: Batasi penggunaan akun lokal kata sandi kosong untuk konsol logon hanya untuk Dinonaktifkan. "


12
2018-06-21 16:41



Haruskah setiap perintah ini dijalankan dari baris perintah Windows atau baris perintah Ubuntu? - Anderson Green
Konsep yang cukup bagus, meskipun saya tidak pernah menyukai mode seamless untuk beberapa alasan - mungkin karena itu membingungkan tentang navigasi keyboard. Tapi saya tergoda untuk mencoba beberapa hal ini untuk beberapa program Windows saya yang masih saya gunakan, seperti Quicken dan iTunes. @AndersonGreen: ini dijalankan dari commandline Ubuntu, dan dapat dengan mudah dimasukkan ke dalam terminal untuk pengujian, lalu dibuat menjadi skrip. - Marty Fried
Apakah kata sandi (yang dimasukkan dalam skrip) adalah kata sandi masuk Windows, atau kata sandi masuk Ubuntu? - Anderson Green
Ini adalah kata sandi windows yang Anda butuhkan karena Anda mungkin login ke Ubuntu, dan memulai VM tidak memerlukan akses root. Perhatikan bahwa kamu perlu kata sandi Windows dan login agar ini berfungsi. - Takkat
Haruskah ini bekerja di manor yang berlawanan (menjalankan Windows sebagai OS utama dan linux sebagai mesin virtual) - William


Ini lebih merupakan petunjuk daripada jawaban, tapi itu terlalu besar untuk komentar.

Anda mungkin harus melihat ini. Menurut dokumen, perintah ini, dijalankan dari OS host (saya 'mengasumsikan host Ubuntu dan tamu Windows):

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

Sebaiknya buka regedit di Windows (tamu), tetapi saya tidak pernah bisa membuatnya berfungsi.

Anda juga bisa menggunakan

VBoxManage showvminfo "Windows XP Pro" | grep State

untuk memeriksa apakah VM sedang berjalan atau tidak.


3
2018-06-21 13:51



Ide-ide menarik, dan saya pikir itu bisa digunakan sebagai cara lain untuk menyelesaikan tugas. Tamu dapat diluncurkan dari host, lalu ketika berjalan, perintah mungkin bisa dibuat berfungsi untuk menjalankan perintah. Untuk seorang programmer, itu mungkin cara yang lebih mudah daripada ide saya; itu melibatkan menggunakan "tidur" dalam satu lingkaran untuk menunggu VM untuk naik, tetapi semuanya dapat dilakukan dari tuan rumah, dengan satu skrip. - Marty Fried
Saya baru saja mencoba perintah eksekusi pertama Anda dan dapat menjalankan Quicken pada upaya pertama saya dari Windows XP VM yang sudah berjalan, bernama "Windows XP" menggunakan perintah ini dari commandline terminal Ubuntu: VBoxManage guestcontrol Windows\ XP exec --image c:\\program\ files\\quicken\\qw.exe --username XXXXX --password XXXXX, di mana XXXXX adalah nama pengguna dan kata sandi saya. - Marty Fried
Mungkin masalah saya adalah saya menggunakan kata sandi yang kurang akun. - Javier Rivera
Mungkin ... Saya baru saja mengubah perintah yang saya jalankan untuk menggunakan format Anda dan itu memang menjalankan regedit. - Marty Fried
Takkat mengatakan bahwa itu tidak bekerja di akun tanpa kata sandi seperti milik saya. Itu menjelaskan mengapa saya tidak pernah bisa melakukannya;). - Javier Rivera


Saya menghapus ide asli ketika saya menyadari bahwa itu tidak akan berhasil karena Linux tidak akan dapat mengakses partisi windows di VM jika tidak sudah berjalan. Mungkin ada cara yang lebih rumit untuk melakukannya, tetapi saya tidak tahu apakah itu benar-benar sepadan.

Ini mungkin layak untuk memiliki direktori bersama umum, dan skrip di Windows akan selalu memeriksa direktori ini untuk melihat apakah itu kosong atau tidak. Jika tidak, itu akan menjalankan skrip di direktori, yang akan diletakkan di sana oleh sistem Ubuntu sebelum menjalankan VM.

Anda dapat memiliki skrip kedua yang menghapus yang pertama sehingga tidak berjalan pada waktu berikutnya.


2
2018-06-21 00:20



Saya ingin membuat pintasan untuk Visual Studio dan pintasan untuk Internet Explorer yang dapat dipanggil dari desktop Ubuntu (sehingga mereka berjalan di mesin virtual). Bisakah ini dilakukan dengan menggunakan metode yang Anda gambarkan? - Anderson Green
Saya ingin tahu apakah inverse juga bisa dilakukan - meluncurkan aplikasi host (seperti Kolourpaint) dari sistem operasi tamu. - Anderson Green
Bisakah kebalikannya dilakukan menggunakan tambahan tamu, lalu? - Anderson Green
Juga, apakah Anda mengacu pada folder startup Windows atau daftar aplikasi startup Ubuntu? - Anderson Green
Maaf, saya menyadari ide pertama saya cacat, karena folder windows tidak ada sampai VM berjalan. Saya merevisi jawaban saya sepenuhnya, dan saya harap itu tidak terlalu membingungkan. - Marty Fried


Saya menginginkan hal yang sama dan akhirnya memecahkannya tanpa menggunakan kendali tamu. Pada MacOS X host saya, saya memiliki folder (bernama Windows) yang klien vbox saya menjalankan Win7 telah dipetakan sebagai Z :. Saya menggunakan file-file palsu untuk berkomunikasi antara host dan klien saya seperti ini:

Di host Mac: - membuat satu skrip-shell lengkap dengan ikon untuk setiap aplikasi windows yang ingin saya mulai di Win-client. Apa yang pada dasarnya mereka lakukan adalah memastikan bahwa VirtualBox belum dimulai sebelum dan kemudian membuat "mulai aplikasi khusus ini" -file dalam folder bersama yang dapat dibaca Windows setelah startup. Contoh apa yang tampak seperti skrip seperti ini:

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

Kemudian pada klien windows saya memiliki skrip yang cocok (BAT-file) di Startup-folder yang terlihat seperti ini:

@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

Dengan cara ini, kapan saja saya ingin menambahkan ikon klien-startup baru di Mac saya, saya menyalin skrip shell, menciptakan file boneka baru dan menambahkan garis startup yang cocok dalam script BAT pada klien. Bekerja dengan baik dan saya pikir ini sejalan dengan ide Martys di posting sebelumnya.


1
2017-11-04 18:41



Sudahkah Anda menguji ini di host Ubuntu? - user68186
Tidak, tapi aku cukup yakin itu akan berhasil tanpa gangguan. Perintah vbox sama dan begitu juga bash. - Urban
Lebih aman digunakan pgrep dari pada ps | grep. Yang terakhir menjalankan risiko pencocokan itu sendiri. - muru
Ya kau benar. Saya percaya tetap di atas menggunakan ps dengan menambahkan grep -v ekstra untuk menyaring masalah self-match. Saya tidak tahu cara menggunakan pgrep seperti yang Anda sarankan dalam kasus ini karena nama VBox 'Windows 7' dalam kasus saya adalah argumen komentar untuk prosesnya, seperti ini: 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 tapi mungkin Anda punya saran tentang ini? - Urban