Ubuntuで次のことを行うシェルスクリプトを作成したいと思います。
VirtualboxでWindows 7ゲストOSを起動します(まだ実行されていない場合)。
Windowsでシェルスクリプトを実行します。シェルスクリプトは、Ubuntuホストオペレーティングシステムから呼び出されます。
私の目標は、ゲストOS上のアプリケーション用にUbuntuホストデスクトップ上にアプリケーションランチャーを作成することです。たとえば、WindowsでVisual Studioを起動するUbuntuデスクトップにVisual Studioのショートカットを作成できます。 Windowsが起動するのを待ってからアプリケーションのショートカットをクリックするのではなく、UbuntuデスクトップからWindowsアプリケーションを直接起動できるようにしたいと常に思っていました。
Windowsゲストにはいくつかの制限がありますが、ランチャーに配置できるスクリプトからゲストアプリケーションをシームレスモードで実行するには、次の手順をテストしました。
次のコマンドを使用して、仮想マシンの完全なコマンドライン制御を取得できます。
仮想マシンをシームレスな保存状態から起動します
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を作成し、ゼロに設定すると、同じ効果が得られます (この答え 。
これは答えよりもヒントですが、コメントするには大きすぎます。
おそらく 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が実行されているかどうかを確認します。
LinuxがVMのWindowsパーティションにまだアクセスしていない場合、そのパーティションにアクセスできないため、機能しないことがわかったときに元のアイデアを削除しました。もっと複雑な方法があるかもしれませんが、本当に価値があるかどうかはわかりません。
共通の共有ディレクトリを使用することは現実的であり、Windowsのスクリプトは常にこのディレクトリをチェックして、空かどうかを確認します。そうでない場合は、ディレクトリ内のスクリプトを実行し、VMを実行する前にUbuntuシステムによってそこに配置されます。
次回実行されないように、1番目のスクリプトを削除する2番目のスクリプトを作成できます。
私は同じことを望み、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のアイデアに沿っていると思います。