2011-03-13 81 views
1

我需要我的OSX里面安装一个终端到Linux虚拟机。它是一个下拉式终端,在虚拟机中,我可以使用F12作为全局热键来切换显示/隐藏。VMware的融合和AppleScript与全局热键

下拉终端的名称是yakuake,我知道有与OSX到工作的下拉终端,但由于种种原因,我既需要Linux终端方便地访问它。

有几件事情,使这个困难。

  • VMware Fusion的犯规有什么好的AppleScript的支持
  • 我需要能够在同一时间运行多个虚拟机。
  • 速度
  • 隐藏应用程序。

我使用的iKey让我的MAC地址绑定到一个小oneliner一个全局热键:

  • /库/应用程序的\ Support/VMware的\融合/ vmrun -T融合-gu用户名-gp密码runScriptInGuest “/用户/用户名/文档/虚拟Machines.localized/Ubuntu.vmwarevm/Ubuntu.vmx” -interactive “/斌/庆典” “/家/用户名/斌/ toggle_yakuake”

到/ home/username/bin/toggle_yakuake脚本只是一个:

  • 在/ usr/bin中/ xdotool键控制+ Shift + Y#这是我必然要yakuake

这工作,但其采取约1-2秒,yakuake会出现以下所有其他视窗。 因此,如果yakuake没有运行,我会使用逻辑来做到这一点,然后我可以在osx中​​隐藏/显示它以立即切换。 然而,我可以使用一个简单的“告诉应用程序”Yakuake - Ubuntu“来激活我不能隐藏它,而不隐藏每一个属于同一个虚拟机的应用程序

似乎每个应用程序由VMware催生绑在一起有点紧 即使我找到我的OSX installastion yakuake的PID,并用它喜欢:。

tell application "System Events" 
    set yakuakeproc to every process whose unix id is 58518 
    repeat with proc in yakuakeproc 
     set the frontmost of proc to true 
    end repeat 
end tell 

这将隐藏属于该VM的每个应用程序

我试图找出解决这个问题的好几天了。有任何提示或任何东西?我如何获得applescript来隐藏我的虚拟机内的一个特定应用程序?

+0

您正试图使用​​AppleScript来控制虚拟机的程序_ – 2011-03-13 15:31:40

回答

0

你开始yakukake的方式是不必要的复杂。您应该能够简单地运行VMware代理应用程序,而不是使用shell脚本;即您的tell application "Yakukake - Ubuntu" to activate

那么你唯一真正的问题是如何显示和隐藏脚本的应用程序。我认为可以使用系统事件来完成此任务,但使用我的工具可以更容易地执行此操作。appswitch

我没有在VMware Fusion中安装GUI Linux,但这里是Windows示例。

要查看有关一个过程:

% appswitch -La Notepad 
     PSN PID TYPE CREA NAME    PATH (bundle identifier) 
15994688.0 24758 APPL ???? Notepad    /Users/nicholas/Library/Application Support/VMware Fusion/Virtual Machines/Boot Camp/Boot Camp.vmwarevm/Applications/Notepad — Windows 7.app (com.vmware.proxyApp.564dbc100b31a4b5-4f8d8088bf0c3705.2009924420) 

来隐藏它:

% appswitch -ha Notepad 

表现出来:

% appswitch -a Notepad 

就是这样。

+0

谢谢! [Appswitch](http://sabi.net/nriley/software/)使这个更好,但是,它看起来像我已经一直在争取一些相同的问题。它将我所有的Linux应用程序不时地带到forground,例如,如果我已经使用了一个Linux应用程序,返回到firefox,然后启动appscript -a,所有的Linux应用程序都将出现在前面。同一时间发生时,发送到反弹。也许它是一个VMware的bug ..?然而,它有点像这样可用,但会等待另一个回应。谢谢! – xeor 2011-03-13 19:24:07

+0

是的,这听起来更像是一个Unity bug。您可以尝试使用appswitch显式隐藏所有其他代理应用程序(使用appswitch -L,grep for com.vmware.proxyApp并在每个应用程序上运行appswitch -hp )。在底层操作系统机制中也存在一些不幸的薄弱环节,但我总是能够通过插入一些简短的延迟来解决这个问题。 – 2011-03-13 20:14:53

+0

我可以试试。我在这个虚拟机中运行大多数(如果不仅仅是)终端应用程序,在不同的yakuake标签中,所以我认为我足够接近一个可行的解决方案。谢谢! – xeor 2011-03-13 22:12:25