Ceci est un exemple spécifique d'un problème générique pour lequel je n'ai pas encore trouvé de solution.
J'ai un programme (Android Virtual Device Manager) qui lance des sous-programmes (à savoir des émulateurs ou des périphériques virtuels) à partir de lui-même (peut également être lancé ailleurs). Je souhaite que toutes les instances de l'un ou l'autre de ces programmes soient regroupées sous la même icône Unity.
J'ai créé un .desktop
fichier pour essayer d'accomplir cela, mais je ne sais pas exactement comment m'y prendre . Le fichier de bureau est le suivant:
#!/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
D'après ce que je comprends, StartupWMClass
c'est ce que je dois définir pour y parvenir correctement. J'ai obtenu les deux noms de classe ('Android Virtual Device Manager' et 'emulator64-arm') à l'aide xprop WM_CLASS
des fenêtres représentatives. Les deux fonctionnent individuellement (l'icône du lanceur est correctement attachée au programme, quelle que soit la façon dont il est lancé), mais je ne peux pas le faire fonctionner pour les deux.
Je suppose que j'ai en quelque sorte besoin de définir deux valeurs pour StartupWMClass
mais je n'ai pas pu le faire correctement (ou savoir si c'est une opération valide). J'ai essayé, séparé par deux points comme les variables d'environnement, séparé par des virgules, des guillemets, etc. et je ne trouve aucun indice dans la documentation officielle .
Aucune suggestion?
ÉDITER:
Un autre exemple, plus pédant, mais probablement plus identifiable est avec Matlab
. Je lance 2013a et l'écran de démarrage qui s'affiche initialement et le programme ont des WM_CLASS
valeurs complètement différentes . Cela signifie que lorsque je clique sur mon lanceur avec StartupWMClass=com-mathworks-util-PostVMInit
, l'écran de démarrage affiche une Unity
icône différente (par défaut inconnue) , tandis que le reste apparaît groupé sous mon lanceur.
En utilisant xprop WMCLASS
et en cliquant d'abord sur l'écran de démarrage, puis en répétant avec une Matlab
session active , j'obtiens la sortie de terminal suivante:
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"
Si je pouvais préciser quelque chose comme:
StartupWMClass=com-mathworks-util-PostVMInit&&MATLAB
Cela fonctionnerait parfaitement (car les deux fonctionnent séparément) mais je n'ai aucune idée de la syntaxe, si elle existe. Je sais juste que rien de ce que j'ai essayé n'a fonctionné jusqu'à présent.
Toute aide ou réponse définitive dans les deux cas serait formidable car je pense que c'est un élément assez fondamental d'un bureau qui fonctionne bien.
Drawers
ce lien et à partir de ce qu'elles montrent, il regroupe simplement les liens, lorsque vous cliquez sur un sous-élément, il est toujours créé avec sa propre icône dans leUnity
lanceur, ce que j'essaie d'arrêterRéponses:
Même problème pour moi avec Starcraft II a lancé le lancer playonlinux. Il y a d'abord un lanceur d'applications:
(WM_CLASS(STRING) = "Blizzard Launcher.exe", "Wine")
puis le jeu lui-même:(WM_CLASS(STRING) = "SC2.exe", "Wine")
Je suppose que wine définit la classe avec l'exécutable binaire.
J'ai jeté un œil au code bamf (bamf_matcher.c, méthode insert_desktop_file_class_into_table ()):
Dans mon cas, je triche en créant 2 fichiers de bureau avec les mêmes clés mais StartupWMClass. Ce n'est pas parfait car j'ai toujours 2 icônes Uniy dans le lanceur mais l'important est que je sais pourquoi :-).
la source
Je sais que cette question est vraiment ancienne, mais après avoir traversé le même problème, je pense que j'ai finalement créé une solution de contournement pour cela, et j'ai décidé de partager avec toute personne ayant ce problème:
Comme nous ne pouvons pas définir plusieurs WMClasses pour un seul fichier .desktop, pourquoi ne pas définir toutes les fenêtres sur un seul WMClass?
Nous pouvons faire quelque chose comme ça (Évidemment, remplacez
Window 1
,Window 2
etpotatoes
avec vos noms de fenêtres et WMClass souhaité):Et sur le fichier .desktop, nous pouvons le faire:
StartupWMClass=potatoes
Tadam! Toutes les fenêtres sont maintenant regroupées.
Mais bon, faisons-nous cela manuellement à chaque ouverture du programme? Bien sûr que non.
Nous pouvons simplement créer un script bash qui le fait automatiquement toutes les demi-secondes:
Et enfin, définissez le .sh que nous avons créé pour qu'il s'exécute à chaque démarrage du système d'exploitation:
J'espère que ma réponse sera utile à tous ceux qui parcourent cette question.
la source