我的大部分工作都是在 Ubuntu 中完成的,但有些 Windows 程序没有很好的 Linux 对应程序,无法在 Wine 中运行,因此我在运行 Windows 7 的 VirtualBox 虚拟机中运行这些程序。不幸的是,当我使用 Linux 程序时,我不知道有什么快捷方法可以切换到虚拟机。目前最快的方法是按 Alt+Tab 切换到两个 VirtualBox 窗口,继续按住 Alt 以查看 VirtualBox 管理器和虚拟机,然后再次按 Alt+Tab 选择虚拟机。
有人知道如何编写一个可以直接跳转到虚拟机的热键吗?
答案1
当然,你应该这样做:
安装
wmctrl
sudo apt-get install wmctrl
启动虚拟机,记下确切地窗口名称显示在标题栏中。例如,我的窗口名称为:
Windows 7 [Draaiend] - Oracle VM VirtualBox
将虚拟机窗口移到最前面的命令是:
wmctrl <window_name>
注意:如果窗口名称包含空格,请使用引号将名称引起来
所以对我来说应该是:
wmctrl -a "Windows 7 [Draaiend] - Oracle VM VirtualBox"
在终端窗口中测试运行的命令
选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:
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 造成一些干扰):