Я использую Ubuntu 13.04 с GNOME 3. Моя цель - создать собственный модуль запуска, который будет запускать конкретную виртуальную машину VirtualBox, и мне бы хотелось, чтобы у нее был собственный значок.
С чисто функциональной точки зрения я добился успеха. Эта статья (webupd8.org) дала мне команду, которая запускает виртуальную машину напрямую. Поэтому я создал новый файл .desktop в ~ / .local / share / apps, который использует эту команду для части '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;
Спасибо!
Я использую последнюю версию GNOME 3.10 на fedora 20, и StartupWMClass=VirtualBox
, похоже, добивается цели.
Возможно, это было исправлено с момента, когда вы задали вопрос?
В любом случае, у VirtualBox есть один недостаток - все окна имеют одинаковый WM_CLASS. Так что, если вы используете несколько машин, они будут сгруппированы вместе. Я подал отчет об ошибке для этого: https://www.virtualbox.org/ticket/12534 . Надеюсь, скоро мы увидим, что это решится.
Я нашел хороший обходной путь.
Мой модуль запуска 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 получает идентификатор окна без указателя мыши
Только для ссылки, ограничение, упомянутое @atitoxic в его ответе, было уже зафиксировано в VirtualBox> = 5.2.0 благодаря его отчету об ошибках. Однако VirtualBox присваивает универсальное значение WM_CLASS по умолчанию ("Машина VirtualBox" в последней версии во время записи, которая является 6.0.14). Активировать эту опцию, дополнительные данные GUI/DistinguishMachineWindowGroups
должен быть установлен на true
использование VBoxManage
:
VBoxManage setextradata <uuid|name> GUI/DistinguishMachineWindowGroups true
<uuid|name>
или UUID или название VM. Это может также быть установлено на global
активировать опцию для всего VMs глобально.
После этого VirtualBox должен присвоить значение WM_CLASS, содержащее UUID VM. Можно проверить его использование xprop WM_CLASS
.