¿Por qué algunas aplicaciones abiertas aparecen como "signos de interrogación" en el iniciador de Unity?

22

Tengo un problema con un par de programas que tienen lanzadores en unidad pero luego crean un ícono separado después del lanzamiento. ¿Es posible que el iniciador rastree las ventanas que genera para organizarse mejor? ¿O es esto un error en la propia Unidad?

ingrese la descripción de la imagen aquí

Puede que no importe, pero este programa específico es un programa mono, y el icono generado aparece como el panel.

Andrew Redd
fuente
@ j-johan-edwards: no estoy seguro de qué programa vincular, pero es KeePass2 disponible en el Centro de software.
Andrew Redd
En algunos casos, puede aliviar esto configurando la StartupWMClasspropiedad en el iniciador de
Glutanimate

Respuestas:

23

Qué esta pasando

Problemas como este se relacionan con el marco de coincidencia de aplicaciones de Unity. Para simplificar los detalles técnicos, las ventanas del programa y las aplicaciones son dos cosas separadas para Ubuntu. Ubuntu necesita "adivinar" qué aplicación posee una ventana en particular. Y a veces esa suposición falla, y aparece un signo de interrogación en el lanzador.

La falla puede deberse a:

  1. Un error en BAMF (el marco de coincidencia de aplicaciones mencionado anteriormente).
  2. Una descripción de aplicación defectuosa (también conocido como archivo '.desktop').
  3. La falta de una descripción de la aplicación en absoluto. Los ejecutables que ejecutan ventanas no tienen estos metadatos inherentemente.

La aplicación que se muestra en la pregunta (KeePass2) sufre un problema de tipo 1 que se ha informado al rastreador de errores apropiado .

Ejemplos de problemas

Los siguientes ejemplos son técnicos, dirigidos a programadores que desean que su propia aplicación se muestre correctamente en el iniciador de Ubuntu.

Problema 3 - Sin descripción de la aplicación

Para que una aplicación se integre con Unity, es decir, se pueda buscar en el Tablero y se coloque en el iniciador, debe tener una entrada de escritorio. Estas entradas se colocan en el /usr/share/applications/, /usr/local/share/applications/y $HOME/.local/share/applications/(siendo los dos últimos para software de terceros, de todo el sistema y usuario de sólo respectivamente). Terminan con una .desktopextensión y siguen este formato básico:

[Desktop Entry]
Type=Application
Name=My Application's Name
Icon=/file/path/of/my/icon
Exec=/file/path/of/my/executable

Esta entrada inicia un programa llamando al Execejecutable. Siempre que ese programa muestre una ventana o cuadro de diálogo, Unity notará que su ejecutable "pertenece" a la descripción de esta aplicación, y usará el dado Namey Iconen el iniciador.

Este es un ejemplo básico. La especificación formal cubre muchas características avanzadas.

Problema 2: descripción de la aplicación defectuosa

Supongamos que my_app.desktopexiste en un directorio de aplicaciones válido, pero:

  • /file/path/of/my/icon no existe en el sistema de archivos.
  • /file/path/of/my/icon No es una imagen.
  • la entrada usa una sintaxis incorrecta o etiquetas inválidas.

En cualquiera de los casos anteriores, Ubuntu no podrá enumerar correctamente la ventana de la aplicación en el iniciador.

Problema 1 - Un error en BAMF

A partir de Ubuntu 11.10, BAMF tiene una serie de errores que impiden la correcta coincidencia de aplicaciones. Las dificultades comunes (temporales) incluyen:

  • La Execruta es un enlace simbólico en lugar de un archivo normal
  • El ejecutable es un script que inicia el ejecutable principal.

En estos casos, los programadores no tienen más opción que usar una solución alternativa, como eliminar la abstracción del enlace simbólico o vincular directamente al ejecutable. Ninguno de estos es requerido por la especificación de entrada de escritorio.

Jjed
fuente
Una cosa más. Puede tener .desktoparchivos para la misma aplicación en ~/.local/share/applications/y /usr/share/applications/. El primer archivo anula al segundo incluso si el icono no está especificado en él.
1

La ventana solo puede coincidir con la aplicación si se ha establecido la propiedad WM_CLASS. Para hacer esto en X11 usas:

XSetClassHint( display, window, &class_hints );

Debe pasar un puntero a una estructura XClassHint con el campo 'res_name' y 'res_class'.

Bram
fuente
-1

Tuve algunos problemas con 16.04, incluidos los iconos en gris y, a veces, el panel táctil se volvía errático (Acer V15 nitro) y el centro de software (quizás otros iconos también) no se abría desde el icono (solo desde un comando de terminal). Encontré una recomendación en algún lugar para desinstalar y reinstalar el software gnome. Desde que hice esto, todo el sistema ha sido 100% estable, no más iconos en gris y funciona perfectamente. Parecía aterrador inicialmente cuando reinicié después de este cambio, muchos mensajes del sistema al reiniciar, así que hágalo bajo su propio riesgo.

sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software
Steve
fuente
2
Esto no tiene nada que ver con la pregunta.
Martin Thornton