¿Cómo puedo eliminar íconos duplicados para programas Java "iniciados" en el iniciador?


45

Al iniciar programas java (como IntelliJ IDEA y Crashplan) en el iniciador de Unity de Natty, se muestran íconos duplicados (ver imagen). Para IntelliJ creé el archivo .desktop, para Crashplan el archivo .desktop se suministra con la aplicación. ¿Hay algo que se pueda cambiar en los archivos .desktop (o en otro lugar) que pueda evitar que esto ocurra? No pude encontrar un informe de error para la unidad en sí, pero programas como Gnome-Do / Docky tienen informes de error y tuvieron que hacer cambios internos en sus aplicaciones para evitar esto.

Iconos duplicadosEn esta imagen, el primer ícono es el creado a partir del archivo .desktop y el segundo ícono es después de iniciarlo. El segundo icono desaparece al cerrar la aplicación.

Archivo personalizado de IntelliJ .desktop

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[en_US]=/opt/idea/bin/idea128.png
Name[en_US]=IntelliJ IDEA
Exec=/opt/idea/bin/idea.sh
Name=IntelliJ IDEA
Icon=/opt/idea/bin/idea128.png
StartupNotify=true

Crashplan proporciona el archivo .desktop

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=CrashPlan
Categories=;
Comment=CrashPlan Desktop UI
Comment[en_CA]=CrashPlan Desktop UI
Exec=/usr/local/crashplan/bin/CrashPlanDesktop
Icon=/usr/local/crashplan/skin/icon_app_64x64.png
Hidden=false
Terminal=false
Type=Application
GenericName[en_CA]=

1
Experimento un problema similar cuando lanzo Minecraft en Unity
Marco Ceppi

2
Gracias a Dios, el problema afecta a los usuarios convencionales (solía ser un problema para AWN y otros entusiastas del muelle solamente) finalmente. Espero que los desarrolladores de aplicaciones Java (y no solo Java) consideren arreglar esto ahora. Por cierto, Eclipse parece no tener ese problema, mientras que nunca he logrado arreglar esto para MySQL Workbench y OpenOffice.org (lo intenté cuando estaba usando AWN, antes de que surgiera LibreOffice).
Ivan

El problema es sobre las aplicaciones que usan estúpidos nombres WM_CLASS que no identifican hasta donde puedo recordar.
Ivan

Si no hubiera tal problema, seguramente usaría Unity o AWN. Pero en la medida en que no todas las aplicaciones los soportan perfectamente, prefiero una barra de tareas tradicional (porque odio las soluciones a medias).
Ivan

Respuestas:


47

Agregue una cadena StartupWMClass en su archivo .desktop. Use el xpropcomando para obtener esta clase. Por ejemplo :

$ xprop|grep WM_CLASS
 WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread"

$ cat /usr/share/applications/PHPStorm.desktop | grep StartupWM
StartupWMClass=sun-awt-X11-XFramePeer

Más detalles en este hilo (esto es sobre AWN, pero también funciona para Unity)


1
Esto funciona muy bien para Crashplan, StartupWMClass=CrashPlanpero IntelliJ necesitaba un poco más de convicción. Tuve que usar la información de esto ( blog.jteam.nl/2011/01/09/… ) para que funcione correctamente.
Tim

Como un pequeño aparte para actualizar IntelliJ, modifiqué la idea.vmoptions no la secuencia de comandos idea.sh directamente. Añadir -javaagent:agent.jar=IntelliJ_IDEAal archivo
Tim

1
Con IntelliJ 11, agent.jar ya no es necesario. StartupWMClass = jetbrains-idea
Tim

Y jetbrains-idea-cepara la edición comunitaria. PD, muchas gracias Tim, 451F.
Synesso

2
@ Ivan: no tienes que usar ambos, puedes usar cualquiera de los dos. Entonces, si jetbrains-ideaes el único, el que desea, sun-awt-X11-XFramePeer
úselo en

9

Para Intellij Idea 11 en Ubuntu 11.10 es necesario agregar en el archivo .desktop de la idea la siguiente línea:

StartupWMClass=jetbrains-idea

4

Pude arreglar esto para SQLDeveloper, que es un programa de Java:

Usando xprop (y luego haciendo clic en la ventana SQLDeveloper), encontré la siguiente línea de salida:

WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "oracle-ide-boot-Launcher"

Según los comentarios encontrados anteriormente y en https://bugs.launchpad.net/unity/+bug/757991 , agregué la siguiente línea a mi archivo sqldeveloper.desktop local:

StartupWMClass=oracle-ide-boot-Launcher

1
En SQLDeveloper versión 4, WM_CLASS cambió a "sun-awt-X11-XFramePeer", "oracle-ide-osgi-boot-OracleIdeLauncher", por lo que el parámetro .desktop debe cambiarse a: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu

2

He documentado la solución para Eclipse 4.xy 3.x aquí .

Esta solución es para glx-dock, también conocido como Cairo-dock, pero funciona para todas las barras de tareas en las que se basa WM_CLASS.

En el caso del eclipse, el lanzamiento también es un proceso de dos pasos.

        ingrese la descripción de la imagen aquí

Básicamente, lo que debe hacer es identificar Eclipse branding plugin.xml aplicable a su versión de Eclipse y modificar la application namepropiedad. Cuando se crea la ventana principal del banco de trabajo, Jface llamará al SWT Display.setNamey esto lo configurará WM_CLASS. Si este es el WM_CLASS declarado para su lanzador, las instancias en ejecución encontrarán su lanzador de base.

No te olvides de hacer eclipse -cleanla primera vez.

La navegación también ha mejorado mucho.

ingrese la descripción de la imagen aquí


0

IntelliJ IDEA se inicia mediante un script ($ IDEA_HOME / bin / idea.sh). Cuando se hace clic en su iniciador, se ejecuta el script, que inicia un ejecutable de Java e inmediatamente se cierra. Unity se da cuenta de que la aplicación que inició (el script) ya ha salido, por eso no hay ningún indicador en el primer ícono de IDEA. Sin embargo, hay otra aplicación (desde el ejecutable iniciado por el iniciador) ejecutándose en este momento, y es por eso que se muestra el segundo ícono IDEA.

Espero que la solución para este comportamiento se implemente pronto, pero no es muy sencilla. Tendría que incluir una lista de asociaciones mantenidas a mano entre ventanas y lanzadores con los que deberían estar asociados.


0

Para CrashPlan, puede intentar mover el archivo de la aplicación CrashPlan.desktop a / usr / share / aplicaciones. Solo las aplicaciones que viven allí pueden bloquearse en el iniciador.

sudo mv ~/Desktop/CrashPlan.desktop /usr/share/applications/.

Luego intente usar el tablero para ejecutar CrashPlan.

Es posible que pueda hacer algo similar con IntelliJ IDEA, pero como está ejecutando un script, no estoy seguro de si funcionará correctamente.


Tengo ambos archivos .desktop en ~ / .local / share / aplicaciones y no tengo ningún problema para bloquearlos en el iniciador. Supongo que quiere decir que está disponible para ser lanzado desde el Iniciador, pero aún no se ha lanzado cuando dice bloqueado ...
Tim

Hm. No puedo colocarlos en el lanzador. Hice el mío con alacarte (Editor de menús). Tal vez sea porque tengo ~ / .local vinculado a otro lugar ... ¿Sus aplicaciones muestran el triángulo en ejecución (lado izquierdo) y el triángulo activo (lado derecho)?
idbrii

Para la versión "lanzada" del icono, sí. Puedes ver el triángulo corriendo en la primera toma. Investigué un poco más y creo que tengo una solución alternativa para los íconos duplicados. Publicaremos una respuesta aquí.
Tim

@ 451F me ganó la respuesta, agregué un poco a su respuesta en mis comentarios sobre cómo hacer que IntelliJ funcione mejor.
Tim

0

Ninguna de las otras respuestas funcionó para mí, pero al final encontré una solución aún más simple.

Abra Intellij-Idea, y en la barra superior encuentre el menú desplegable de herramientas . Luego, seleccione el botón Crear entrada de escritorio . Creará una entrada .desktop que funcione correctamente en su .local/share/applicationscarpeta, que debería ser reconocida por cualquier entorno de escritorio que esté utilizando. No hace un ícono duplicado, e incluso puede cambiar el ícono si lo desea.

Desafortunadamente, usar el nosplashargumento trae de vuelta el problema del ícono duplicado, así que no estoy seguro de cómo solucionarlo.


0

Después de la instalación de IntelliJ IDEA 05/02/2017 bajo Ubuntu 17.04 (con iconos Numix) que tenía que cambiar la línea StartupWMClass=jetbrains-ideaa StartupWMClass=jetbrains-idea-ceen el archivo .desktop del programa para el icono duplicado desaparecería.

Supongo que "ce" significa Community Edition que tengo, así que no sé por qué el valor de esta propiedad en el archivo .desktop originalmente no tenía el sufijo "ce".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.