Pourquoi certaines applications ouvertes apparaissent-elles comme des «points d'interrogation» dans le lanceur Unity?

22

J'ai un problème avec quelques programmes qui ont des lanceurs dans l'unité mais qui créent ensuite une icône distincte après leur lancement. Est-il possible pour le lanceur de suivre les fenêtres qu'il crée pour mieux organiser? Ou est-ce un bug dans Unity lui-même?

entrez la description de l'image ici

Cela n'a peut-être pas d'importance, mais ce programme spécifique est un programme mono et l'icône générée est répertoriée en tant que panneau.

Andrew Redd
la source
@ j-johan-edwards: Je ne sais pas à quel programme se connecter, mais c'est KeePass2 disponible dans le Software Center.
Andrew Redd,
Dans certains cas, vous pouvez remédier à cela en définissant la StartupWMClasspropriété dans le lanceur de bureau de l'application: askubuntu.com/questions/36434/…
Glutanimate

Réponses:

23

Que ce passe-t-il

Des problèmes comme celui-ci sont liés au cadre de correspondance des applications d'Unity. Pour simplifier les détails techniques, les fenêtres de programme et les applications sont deux choses distinctes pour Ubuntu. Ubuntu doit «deviner» quelle application possède une fenêtre particulière. Et parfois, cette supposition échoue, et un point d'interrogation apparaît dans le lanceur.

L'échec peut être dû à:

  1. Un bogue dans BAMF (le cadre de correspondance d'application mentionné ci-dessus).
  2. Une description d'application défectueuse (également appelée fichier «.desktop»).
  3. L'absence de toute description d'application. Les exécutables qui lancent des fenêtres n'ont pas intrinsèquement ces métadonnées.

L'application indiquée dans la question (KeePass2) souffre d'un problème de type 1 qui a été signalé au programme de suivi des bogues approprié .

Exemples de problèmes

Les exemples ci-dessous sont techniques, destinés aux programmeurs qui souhaitent que leur propre application s'affiche correctement dans le lanceur Ubuntu.

Problème 3 - Aucune description d'application

Pour qu'une application s'intègre à Unity, c'est-à-dire qu'elle puisse être recherchée dans Dash et placée dans le lanceur, elle doit avoir une entrée de bureau. Ces entrées sont placées dans le /usr/share/applications/,, /usr/local/share/applications/et $HOME/.local/share/applications/(les deux derniers étant pour les logiciels tiers, à l'échelle du système et utilisateur uniquement respectivement). Ils se terminent par une .desktopextension et suivent ce format de base:

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

Cette entrée démarre un programme en appelant l' Execexécutable. Chaque fois que ce programme affiche une fenêtre ou une boîte de dialogue, Unity remarquera que son exécutable "appartient" à cette description d'application, et utilisera le donné Nameet Icondans le lanceur.

Ceci est un exemple simple. La spécification formelle couvre de nombreuses fonctionnalités avancées.

Problème 2 - Description d'application défectueuse

Supposons qu'il my_app.desktopexiste dans un répertoire d'application valide, mais:

  • /file/path/of/my/icon n'existe pas dans le système de fichiers.
  • /file/path/of/my/icon n'est pas une image.
  • l'entrée utilise une syntaxe incorrecte ou des balises non valides.

Dans tous les cas ci-dessus, Ubuntu ne pourra pas lister correctement la fenêtre d'application dans le lanceur.

Problème 1 - Un bogue dans BAMF

Depuis Ubuntu 11.10, BAMF a un certain nombre de bogues qui empêchent une correspondance correcte des applications. Les pièges courants (temporaires) comprennent:

  • Le Execchemin étant un lien symbolique plutôt qu'un fichier normal
  • L'exécutable est un script qui lance l'exécutable principal.

Dans ces cas, les programmeurs n'ont d'autre choix que d'utiliser une solution de contournement, telle que la suppression de l'abstraction du lien symbolique ou la liaison directe avec l'exécutable. Aucun de ces éléments n'est requis par la spécification d'entrée de bureau elle-même.

Jjed
la source
Encore une chose. Vous pouvez avoir des .desktopfichiers pour la même application à la fois dans ~/.local/share/applications/et /usr/share/applications/. Le premier fichier remplace le second même si l'icône n'y est pas spécifiée.
1

La fenêtre ne peut être mise en correspondance avec l'application que si la propriété WM_CLASS a été définie. Pour ce faire dans X11, vous utilisez:

XSetClassHint( display, window, &class_hints );

Vous devez passer un pointeur vers une structure XClassHint avec les champs 'res_name' et 'res_class'.

Bram
la source
-1

J'ai eu quelques problèmes avec 16.04, y compris les icônes grisées et parfois le pavé tactile devenait erratique (Acer V15 nitro) et le centre logiciel (peut-être d'autres icônes aussi) ne s'ouvrait pas à partir de l'icône (uniquement à partir d'une commande de terminal). J'ai trouvé une recommandation quelque part pour désinstaller et réinstaller le logiciel gnome. Depuis que je l'ai fait, l'ensemble du système est stable à 100%, ne contient plus d'icônes grisées et fonctionne parfaitement. Cela semblait effrayant au départ lorsque j'ai redémarré après ce changement - beaucoup de messages système au redémarrage - alors faites-le à vos risques et périls.

sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software
Steve
la source
2
Cela n'a absolument rien à voir avec la question.
Martin Thornton