热键跳转到虚拟机?

热键跳转到虚拟机?

我的大部分工作都是在 Ubuntu 中完成的,但有些 Windows 程序没有很好的 Linux 对应程序,无法在 Wine 中运行,因此我在运行 Windows 7 的 VirtualBox 虚拟机中运行这些程序。不幸的是,当我使用 Linux 程序时,我不知道有什么快捷方法可以切换到虚拟机。目前最快的方法是按 Alt+Tab 切换到两个 VirtualBox 窗口,继续按住 Alt 以查看 VirtualBox 管理器和虚拟机,然后再次按 Alt+Tab 选择虚拟机。

有人知道如何编写一个可以直接跳转到虚拟机的热键吗?

答案1

当然,你应该这样做:

  1. 安装wmctrl

    sudo apt-get install wmctrl
    
  2. 启动虚拟机,记下确切地窗口名称显示在标题栏中。例如,我的窗口名称为:

    Windows 7 [Draaiend] - Oracle VM VirtualBox
    
  3. 将虚拟机窗口移到最前面的命令是:

    wmctrl <window_name>
    

    注意:如果窗口名称包含空格,请使用引号将名称引起来

    所以对我来说应该是:

    wmctrl -a "Windows 7 [Draaiend] - Oracle VM VirtualBox"
    
  4. 在终端窗口中测试运行的命令

  5. 选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:

    wmctrl -a "Windows 7 [Draaiend] - Oracle VM VirtualBox"
    

到您所选择的组合键。

man wmctrl

   -a <WIN>
          Switch to the desktop containing the  window  <WIN>,  raise  the
          window, and give it focus.

如果你从不同的快照运行机器

或者在任何其他情况下,当窗口名称可能由其他字符串扩展时,如OP在评论中提到的:将以下脚本复制到一个空文件中,将其另存为run_vm.py。通过以下命令运行它:

python3 /path/to/run_vm.py <machine_name>

与第一个示例类似,如果机器名称包含空格,则必须将其放在引号中。

剧本:

#!/usr/bin/env python3

import subprocess
import sys

machine = sys.argv[1]
command = "wmctrl -l"
wlist = [(" ").join(line.split(" ")[4:]) for line in subprocess.check_output(
    ["/bin/bash", "-c", command]
    ).decode("utf-8").split("\n") if machine in line][0]
command2 = "wmctrl -a "+"'"+wlist+"'"
subprocess.Popen(["/bin/bash", "-c", command2])

答案2

完全不需要运行 VirtualBox Manager 来启动 Virtual Box 虚拟机。每个虚拟机也可以在命令行上在其自己的窗口中启动

VBoxManage startvm 'name of the machine'

或者通过定义一个.desktop可以通过自定义快捷方式从桌面、仪表盘或启动器启动的文件:

Alt然后可以通过+方便地控制该虚拟机窗口Tab

我们甚至可以更进一步,将正在运行的 Windows 应用程序无缝集成到 Ubuntu 桌面(但这样做可能会对 Unity 造成一些干扰):

相关内容