web-dev-qa-db-ja.com

UbuntuデスクトップからWindowsでアプリケーションを起動する

Ubuntuで次のことを行うシェルスクリプトを作成したいと思います。

  1. VirtualboxでWindows 7ゲストOSを起動します(まだ実行されていない場合)。

  2. Windowsでシェルスクリプトを実行します。シェルスクリプトは、Ubuntuホストオペレーティングシステムから呼び出されます。

私の目標は、ゲストOS上のアプリケーション用にUbuntuホストデスクトップ上にアプリケーションランチャーを作成することです。たとえば、WindowsでVisual Studioを起動するUbuntuデスクトップにVisual Studioのショートカットを作成できます。 Windowsが起動するのを待ってからアプリケーションのショートカットをクリックするのではなく、UbuntuデスクトップからWindowsアプリケーションを直接起動できるようにしたいと常に思っていました。

12
Anderson Green

Windowsゲストにはいくつかの制限がありますが、ランチャーに配置できるスクリプトからゲストアプリケーションをシームレスモードで実行するには、次の手順をテストしました。

  • VirtualBox Managerを起動します
  • ユーザーとパスワードを使用して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
    

これらをスクリプトに入れて、UbuntuデスクトップでシームレスなWindowsアプリケーションウィンドウをお楽しみください。

パスワードなしのWindowsログオンを設定した場合、これは機能しません。 Virtual Box Manual の制限事項と、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を無効にします。

WindowsのHomeエディションなど、グループポリシーエディター(gpedit.msc)のないオペレーティングシステムでは、レジストリキーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduseにDWORDを作成し、ゼロに設定すると、同じ効果が得られます (この答え

15
Takkat

これは答えよりもヒントですが、コメントするには大きすぎます。

おそらく this を見てください。ドキュメントによると、このコマンドはホストOSから実行されます(Ubuntuホストと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が実行されているかどうかを確認します。

3
Javier Rivera

LinuxがVMのWindowsパーティションにまだアクセスしていない場合、そのパーティションにアクセスできないため、機能しないことがわかったときに元のアイデアを削除しました。もっと複雑な方法があるかもしれませんが、本当に価値があるかどうかはわかりません。

共通の共有ディレクトリを使用することは現実的であり、Windowsのスクリプトは常にこのディレクトリをチェックして、空かどうかを確認します。そうでない場合は、ディレクトリ内のスクリプトを実行し、VMを実行する前にUbuntuシステムによってそこに配置されます。

次回実行されないように、1番目のスクリプトを削除する2番目のスクリプトを作成できます。

2
Marty Fried

私は同じことを望み、guestcontrolを使用せずに解決しました。 MacOS Xホストには、Win7を実行しているvboxクライアントがZ:としてマップしたフォルダー(Windowsという名前)があります。私はダミーファイルを使用して、ホストとクライアントの間で次のように通信します。

Macホストで:-Winクライアントで起動したい各Windowsアプリケーションのアイコンを備えた1つのシェルスクリプトを作成しました。彼らが基本的に行うことは、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クライアントでは、Startup-folderに次のような一致するスクリプト(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のアイデアに沿っていると思います。

1
Urban