Установите несколько значений для StartupWMClass (чтобы группироваться под одной и той же пусковой установкой в ​​Unity)

Это конкретный пример общей проблемы, на которую я еще не смог найти решение.

У меня есть программа (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

Это будет работать отлично (так как оба работают отдельно), но я не знаю синтаксиса, если он существует. Я просто не знаю, что я пробовал работать до сих пор.

Любая помощь или окончательный ответ в любом случае были бы замечательными, поскольку я считаю, что это довольно фундаментальный элемент хорошо функционирующего рабочего стола.

1
задан 12 January 2015 в 05:29

1 ответ

Я знаю, что этот вопрос действительно старый, но, пройдя ту же проблему, я думаю, что, наконец, создал обходной путь для этого и решил поделиться с кем-то, у кого есть эта проблема:

не может установить несколько 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, которые мы создали, чтобы запускать каждый время запуска ОС:

Надеюсь, что мой ответ будет полезен любому, кто просматривает этот вопрос.

1
ответ дан 25 May 2018 в 02:00

Другие вопросы по тегам:

Похожие вопросы: