Este es un ejemplo específico de un problema genérico para el que aún no he podido encontrar una solución.
Tengo un programa (Android Virtual Device Manager) que lanza 'subprogramas' (es decir, emuladores o dispositivos virtuales) desde dentro (también se puede iniciar desde otro lugar). Quiero que cualquier instancia de CUALQUIERA de estos programas se agrupe bajo el mismo ícono de Unity.
He creado un .desktop
archivo para intentarlo, pero no sé exactamente cómo hacerlo. El archivo de escritorio es el siguiente:
#!/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
Por lo que entiendo, StartupWMClass
es lo que necesito configurar para lograr esto correctamente. He obtenido los dos nombres de clase ('Android Virtual Device Manager' y 'emulator64-arm') usando xprop WM_CLASS
en las ventanas reactivas. Ambos funcionan individualmente (el ícono del iniciador está conectado correctamente al programa sin importar de qué manera se inicie), pero no puedo hacer que funcione para ambos.
Supongo que de alguna manera necesito establecer dos valores, StartupWMClass
pero no he podido hacerlo correctamente (o saber si es una operación válida). Lo he intentado, separados por dos puntos como variables de entorno, separados por comas, comillas, etc. y no puedo encontrar ninguna pista en la documentación oficial .
¿Alguna sugerencia?
EDITAR:
Otro ejemplo más pedante, pero probablemente más identificable es con Matlab
. Estoy ejecutando 2013a y la pantalla de inicio que muestra inicialmente y el programa tiene WM_CLASS
valores completamente diferentes . Esto significa que, cuando hago clic en mi iniciador StartupWMClass=com-mathworks-util-PostVMInit
, la pantalla de bienvenida aparece con un Unity
ícono diferente (desconocido) , mientras que el resto aparece agrupado debajo de mi iniciador.
Al usar xprop WMCLASS
y hacer clic primero en la pantalla de inicio, luego repitiendo con una Matlab
sesión activa obtengo la siguiente salida de terminal:
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 pudiera especificar algo en la línea de:
StartupWMClass=com-mathworks-util-PostVMInit&&MATLAB
Eso funcionaría perfectamente (ya que ambos funcionan por separado) pero no tengo idea de la sintaxis, si es que existe. Solo sé que nada de lo que he intentado ha funcionado hasta ahora.
Cualquier ayuda o una respuesta definitiva de cualquier manera sería genial, ya que creo que este es un elemento bastante fundamental para un escritorio que funcione bien.
Drawers
ese enlace y, por lo que muestran, simplemente agrupa los enlaces, cuando haces clic en cualquier elemento secundario, todavía se crea con su propio icono en elUnity
iniciador, que es lo que estoy tratando de detenerRespuestas:
El mismo problema para mí con Starcraft II lanzó throw playonlinux. Primero hay un lanzador de aplicaciones:
(WM_CLASS(STRING) = "Blizzard Launcher.exe", "Wine")
y luego el juego en sí:(WM_CLASS(STRING) = "SC2.exe", "Wine")
Supongo que el vino está estableciendo la clase con el ejecutable binario.
Observé el código bamf (método bamf_matcher.c, insert_desktop_file_class_into_table ()):
En mi caso, hago trampa creando 2 archivos de escritorio con las mismas claves pero StartupWMClass. Esto no es perfecto porque todavía tengo 2 iconos Uniy cuando estoy en el iniciador, pero lo importante es que sé por qué :-).
fuente
Sé que esta pregunta es muy antigua, pero después de pasar por el mismo problema, creo que finalmente he creado una solución para esto, y decidí compartir con cualquiera que tenga este problema:
Como no podemos configurar múltiples WMClasses para un único archivo .desktop, ¿por qué no configurar todas las ventanas en un único WMClass?
Podemos hacer algo como esto (Obviamente, sustituir
Window 1
,Window 2
ypotatoes
con sus nombres y ventanas WMClass desea):Y en el archivo .desktop podemos hacer esto:
StartupWMClass=potatoes
Tadam! Todas las ventanas están agrupadas ahora.
Pero bueno, ¿estamos haciendo esto manualmente cada vez que se abre el programa? Por supuesto no.
Podemos ir y hacer un script bash que lo haga automáticamente cada medio segundo:
Y finalmente, configure el .sh que creamos para ejecutarse cada vez que se inicie el sistema operativo:
Espero que mi respuesta sea útil para cualquiera que explore esta pregunta.
fuente