Это конкретный пример общей проблемы, на которую я еще не смог найти решение.
У меня есть программа (Android Virtual Device Manager), которая запускает «подпрограммы» (а именно эмуляторы или виртуальные устройства) изнутри себя (также можно запускать из другого источника). Я хочу, чтобы любые экземпляры EIRER этих программ были сгруппированы под одним и тем же значком Unity.
Я создал файл .desktop, чтобы попытаться выполнить это, но не знаю, как это сделать. Файл рабочего стола выглядит следующим образом:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Android Virtual Device
Icon=/home/ben/.icons/android.svg
Exec=/home/ben/usr/bin/android avd
StartupWMClass=Android Virtual Device Manager
Насколько я понимаю, StartupWMClass - это то, что мне нужно, чтобы установить это правильно. Я получил два имени класса («Android Virtual Device Manager» и «emulator64-arm»), используя xprop WM_CLASS в repsective windows. Оба работают индивидуально (значок запуска отображается правильно, независимо от того, каким способом он запускается), но я не могу заставить его работать для обоих.
Я предполагаю, что мне как-то нужно установить два значения для StartupWMClass, но не смогли сделать это правильно (или знать, является ли это действительной операцией).
Любые предложения?
EDIT:
.
EDIT:
Другой, более педантичный, но, вероятно, более узнаваемый пример с Matlab. Я запускаю 2013a и экран заставки, который изначально показывает, и программа имеет совершенно разные значения WM_CLASS. Это означает, что когда я нажимаю на свою пусковую установку с помощью StartupWMClass=com-mathworks-util-PostVMInit, на экране заставки появляется другая (по умолчанию Неизвестная) Unity, а остальная группа группируется под моей пусковой установкой.
By используя xprop WMCLASS и нажимая сначала на экран заставки, а затем повторяя с активным сеансом Matlab, я получаю следующий вывод терминала:
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "MATLAB", "MATLAB"
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "com-mathworks-util-PostVMInit"
Если бы я мог указать что-то вдоль строк:
StartupWMClass=com-mathworks-util-PostVMInit&&MATLAB
Это будет работать отлично (так как оба работают отдельно), но я не знаю синтаксиса, если он существует. Я просто не знаю, что я пробовал работать до сих пор.
Любая помощь или окончательный ответ в любом случае были бы замечательными, поскольку я считаю, что это довольно фундаментальный элемент хорошо функционирующего рабочего стола.
Я знаю, что этот вопрос действительно старый, но, пройдя ту же проблему, я думаю, что, наконец, создал обходной путь для этого и решил поделиться с кем-то, у кого есть эта проблема:
не может установить несколько WMClasses для одного файла .desktop, почему бы не установить все окна на один WMClass?
Мы можем сделать что-то вроде этого (очевидно, заменим Window 1, Window 2 и potatoes с вашими именами окон и желаемым WMClass):
xprop -name "Window 1" -f WM_CLASS 8s -set WM_CLASS "potatoes"
xprop -name "Window 2" -f WM_CLASS 8s -set WM_CLASS "potatoes"
И в файле .desktop мы можем сделать это: StartupWMClass=potatoes
Tadam! Теперь все окна сгруппированы. Но эй, мы делаем это вручную каждый раз, когда программа открывается? Конечно, нет.
Мы можем просто пойти и сделать сценарий bash, который автоматически выполняет это каждые полсекунды:
while true
do
xprop -name "Window 1" -f WM_CLASS 8s -set WM_CLASS "potatoes"
xprop -name "Window 2" -f WM_CLASS 8s -set WM_CLASS "potatoes"
sleep 0.5
done
И, наконец, установите .sh, которые мы создали, чтобы запускать каждый время запуска ОС:
Надеюсь, что мой ответ будет полезен любому, кто просматривает этот вопрос.