Dies ist ein spezifisches Beispiel für ein generisches Problem, für das ich noch keine Lösung gefunden habe.
Ich habe ein Programm (Android Virtual Device Manager), das "Unterprogramme" (nämlich Emulatoren oder virtuelle Geräte) von sich aus startet (kann auch von woanders gestartet werden). Ich möchte, dass alle Instanzen von JEDEM dieser Programme unter demselben Unity-Symbol gruppiert werden.
Ich habe eine .desktop
Datei erstellt, um dies zu erreichen, weiß aber nicht genau, wie ich es anstellen soll. Die Desktop-Datei sieht wie folgt aus:
#!/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
Nach meinem Verständnis muss StartupWMClass
ich Folgendes einstellen, um dies korrekt zu erreichen. Ich habe die beiden Klassennamen ('Android Virtual Device Manager' und ' xprop WM_CLASS
emulator64 -arm') unter Verwendung der entsprechenden Fenster erhalten. Beide funktionieren einzeln (das Startsymbol ist unabhängig von der Art des Programmstarts korrekt an das Programm angehängt), aber ich kann nicht dafür sorgen, dass es für beide funktioniert.
Ich StartupWMClass
gehe davon aus, dass ich zwei Werte für irgendwie festlegen muss, aber nicht in der Lage war, es richtig zu tun (oder zu wissen, ob es eine gültige Operation ist). Ich habe versucht, Doppelpunkt getrennt wie Umgebungsvariablen, Komma getrennt, Anführungszeichen usw. und ich kann keine Hinweise in der offiziellen Dokumentation finden .
Irgendwelche Vorschläge?
BEARBEITEN:
Ein anderes, umständlicheres, aber wahrscheinlich identifizierbareres Beispiel ist mit Matlab
. Ich führe 2013a aus und der Startbildschirm, der anfänglich angezeigt wird, und das Programm haben völlig unterschiedliche WM_CLASS
Werte. Das heißt, wenn ich auf meinen StartupWMClass=com-mathworks-util-PostVMInit
Startbildschirm klicke, wird auf dem Begrüßungsbildschirm ein anderes (standardmäßig unbekanntes) Unity
Symbol angezeigt , während der Rest unter meinem Startbildschirm gruppiert wird.
Wenn ich xprop WMCLASS
zuerst den Begrüßungsbildschirm benutze und darauf klicke und dann mit einer aktiven Matlab
Sitzung wiederhole, erhalte ich die folgende Terminalausgabe:
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"
Wenn ich etwas nach folgendem Schema spezifizieren könnte:
StartupWMClass=com-mathworks-util-PostVMInit&&MATLAB
Das würde perfekt funktionieren (da beide getrennt funktionieren), aber ich habe keine Ahnung von der Syntax, ob sie überhaupt existiert. Ich weiß nur, dass bisher nichts funktioniert hat, was ich ausprobiert habe.
Jede Hilfe oder endgültige Antwort wäre großartig, da dies meiner Meinung nach ein ziemlich grundlegendes Element eines gut funktionierenden Desktops ist.
Drawers
in dieser Verbindung und von dem, was sie zeigen, ist es einfach gruppiert die Links, wenn Sie eine beliebigen Unterpunkt klicken, wird es immer noch mit einem eigenen Symbol in dem erstelltenUnity
Launcher das ist , was ich zu stoppen bin versuchtAntworten:
Das gleiche Problem für mich mit Starcraft II startete Wurf Playonlinux. Es gibt zuerst einen Anwendungsstarter:
(WM_CLASS(STRING) = "Blizzard Launcher.exe", "Wine")
und dann das Spiel selbst:(WM_CLASS(STRING) = "SC2.exe", "Wine")
Ich vermute, dass Wein die Klasse mit der ausführbaren Binärdatei setzt.
Ich habe in der Methode bamf code (bamf_matcher.c, insert_desktop_file_class_into_table ()) nachgesehen:
In meinem Fall betrüge ich, indem ich 2 Desktop-Dateien mit denselben Schlüsseln erstelle, aber StartupWMClass. Dies ist nicht perfekt, da ich im Launcher noch 2 Uniy-Symbole habe, aber das Wichtigste ist, dass ich weiß, warum :-).
quelle
Ich weiß, dass diese Frage wirklich alt ist, aber nachdem ich dasselbe Problem durchgearbeitet habe, habe ich wahrscheinlich endlich eine Problemumgehung für dieses Problem erstellt und beschlossen, sie allen mitzuteilen, die dieses Problem haben:
Da wir nicht mehrere WMClasses für eine einzige .desktop-Datei festlegen können, sollten Sie nicht alle Fenster auf eine einzige WMClass festlegen.
Wir können etwas tun (Offensichtlich ersetzen
Window 1
,Window 2
undpotatoes
mit Ihren Windows - Namen und die gewünschten WMClass):Und in der .desktop-Datei können wir dies tun:
StartupWMClass=potatoes
Tadam! Alle Fenster sind jetzt gruppiert.
Aber hey, machen wir das jedes Mal manuell, wenn das Programm geöffnet wird? Natürlich nicht.
Wir können einfach ein Bash-Skript erstellen, das dies automatisch jede halbe Sekunde erledigt:
Und schließlich stellen Sie die von uns erstellte .sh-Datei so ein, dass sie bei jedem Start des Betriebssystems ausgeführt wird:
Hoffe, meine Antwort ist hilfreich für alle, die diese Frage durchsuchen.
quelle