从Ubuntu桌面在Windows中启动应用程序

我想在Ubuntu中编写一个shell脚本来执行以下操作:

  1. 如果Virtualbox尚未运行,请在Virtualbox中启动Windows 7来宾操作系统。

  2. 在Windows中运行shell脚本,从Ubuntu主机操作系统调用shell脚本。

我的目标是在Ubuntu主机桌面上为来宾操作系统上的应用程序创建一个应用程序启动器。 例如,我可以在Ubuntu桌面上为Visual Studio创建一个快捷方式,在Windows中启动Visual Studio。 我一直希望能够直接从Ubuntu桌面启动Windows应用程序,而不是在单击应用程序快捷方式之前等待Windows启动。

Windows客户端存在一些限制,但是要从可以放入启动程序的脚本以无缝模式运行来宾应用程序,我们测试了以下过程:

  • 启动Virtual Box Manager
  • 使用您的用户和密码登录Windows
  • 切换到无缝模式Host + L.
  • 在无缝模式下保存机器的状态

现在,我们可以使用以下命令对虚拟机进行完整的命令行控制:

  • 从无缝保存状态启动虚拟机

    VBoxManage startvm "" 

    或(对于Qt前端)

     VirtualBox --startvm "" 
  • 在VM中运行应用程序

     VBoxManage --nologo guestcontrol "" run --exe "C:\\full\\path\\to\\program.exe" --username windowsuser --password password --wait-stdout 
  • 在保存状态下终止VM

     VBoxManage controlvm "Name_of_VM" savestate 

将这些放在脚本中,以便在Ubuntu桌面上享受无缝的Windows应用程序窗口。

如果您已设置无密码Windows登录,则无效。 有关限制以及如何配置Windows以使其正常工作,请参阅“ 虚拟盒手册 ”。

“此外,要使用不带密码或使用空密码的帐户,必须更改guest虚拟机的组策略。为此,请在命令行上键入gpedit.msc打开组策略编辑器,打开密钥Computer Configuration \ Windows Settings \ Security设置\本地策略\安全选项并更改帐户的值:限制本地帐户使用空白密码到控制台登录仅限于已禁用。“

这更像是一个暗示,而不是一个答案,但它对评论来说太大了。

你应该看看这个 。 根据文档,这个命令从主机操作系统运行(我假设一个Ubuntu主机和Windows客户机):

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

应该在Windows(客人)中打开注册表,但我从来没有能够使它工作。

你也可以使用

 VBoxManage showvminfo "Windows XP Pro" | grep State 

检查VM是否正在运行。

当我意识到它不起作用时我删除了原来的想法,因为如果Linux尚未运行,Linux将无法访问VM中的Windows分区。 可能有更复杂的方法,但我不知道它是否真的值得。

拥有一个公共共享目录可能是可行的,Windows中的脚本总是会检查此目录以查看它是否为空。 如果没有,它将运行目录中的脚本,在运行VM之前由Ubuntu系统放置。

您可以使用第二个脚本删除第一个脚本,以便下次不运行。

我想要同样的事情,最终解决它而不使用guestcontrol。 在我的MacOS X主机上,我有一个文件夹(名为Windows),运行Win7的vbox客户端已映射为Z:。 我使用虚拟文件在主机和我的客户端之间进行通信,如下所示:

在Mac主机上: – 创建了一个shell脚本,其中包含我想在Win-client中启动的每个Windows应用程序的图标。 他们基本上做的是确保之前没有启动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文件夹中有一个匹配的脚本(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上添加一个新的客户端启动图标我都会复制shell脚本,发明一个新的虚拟文件,并在客户端的BAT脚本中添加匹配的启动行。 效果很好,我认为这与前一篇文章中的Martys理念一致。