我正在使用带有 GNOME 3 的 Ubuntu 13.04。我的目标是创建一个自定义启动器,用于启动特定的 VirtualBox 虚拟机,并且我希望它有自己的图标。
从纯粹的功能角度来看,我已经成功了。 本文(webupd8.org) 给了我一个直接启动虚拟机的命令。因此,我在 ~/.local/share/applications 中创建了一个新的 .desktop 文件,该文件使用该命令作为“Exec”部分。当我单击启动器时,机器成功启动。
我的问题在于图标行为。我在 .desktop 文件中指定了一个自定义图标,它在我的收藏夹栏中显示得很漂亮。但是,当我单击图标并启动虚拟机时,新打开的窗口与我的自定义启动器不关联(即,我的自定义图标没有“突出显示”)。相反,窗口与新创建的 VirtualBox 图标相关联。
有人知道是否有办法向 GNOME 3 指示我想将新窗口与我的自定义图标关联起来吗?我记得在使用 Matlab 时遇到过类似的问题,并在 .desktop 文件中指定了名为“StartupWMClass”的内容,但我不知道在这种情况下应该将值设置为多少(或者这是否适用于非 Matlab 启动器)。
这是我的 .desktop 文件,如果有人认为它可能会有用:
[Desktop Entry]
Name=Windows 8
GenericName=Windows 8 Virtual Machine
Comment=Windows 8 in VirtualBox
Exec=VBoxManage startvm 'Windows 8'
Icon=/home/username/Pictures/Icons/Windows8.png
Terminal=false
Type=Application
Categories=Office;
谢谢!
答案1
我在 Fedora 20 上使用最新的 GNOME 3.10, StartupWMClass=VirtualBox
似乎可以解决问题。
也许从您提出问题时起它就已经被修复了?
无论如何,VirtualBox 仍然有一个缺点 - 所有窗口都有相同的 WM_CLASS。因此,如果您运行多台机器,它们将被分组在一起。我已为此提交了一份错误报告:https://www.virtualbox.org/ticket/12534。希望我们能很快看到问题得到解决。
答案2
我找到了一个很好的解决方法。
我的 windows.desktop 启动器:
[Desktop Entry]
Name=Windows 10 VM
GenericName=Windows 10 Virtual Machine
Comment=Windows 10 in VirtualBox
Exec=/home/admin/.local/share/applications/windows.sh
Icon=/home/admin/.local/share/applications/windows.png
StartupWMClass=Windows
Terminal=false
Type=Application
Categories=Office;
我的 windows.sh 文件:
#!/bin/bash
virtualbox --startvm agromov-vm &
VM_PID=$!
sleep 1
xprop -id $(wmctrl -lp | grep $VM_PID | cut -d ' ' -f 1) -f WM_CLASS 8s -set WM_CLASS 'Windows'
“agromov-vm” 是虚拟机名称
wmctrl 正在获取没有鼠标指针的窗口 ID
答案3
仅供参考,@atitoxic 在其回答中提到的限制已在 VirtualBox >= 5.2.0 中修复,这要感谢他的错误报告。但是,VirtualBox 默认为 WM_CLASS 分配一个通用值(在撰写本文时的最新版本中为“VirtualBox Machine”,即 6.0.14)。要启用此功能,
GUI/DistinguishMachineWindowGroups
必须将额外数据设置为true
使用VBoxManage
:
VBoxManage setextradata <uuid|name> GUI/DistinguishMachineWindowGroups true
<uuid|name>
是虚拟机的 UUID 或名称。也可以将其设置global
为全局为所有虚拟机启用该功能。
此后,VirtualBox 应该分配一个包含 VM 的 UUID 的 WM_CLASS 值。您可以使用 进行验证xprop WM_CLASS
。