Warum werden einige offene Anwendungen im Unity-Launcher als Fragezeichen angezeigt?

22

Ich habe ein Problem mit ein paar Programmen, die Launchers in Unity haben, aber nach dem Start ein separates Symbol erstellen. Kann der Launcher die Fenster verfolgen, die er erzeugt, um die Organisation zu verbessern? Oder ist das ein Fehler in Unity selbst?

Bildbeschreibung hier eingeben

Es spielt möglicherweise keine Rolle, aber dieses spezielle Programm ist ein Monoprogramm, und das erzeugte Symbol wird als Bedienfeld aufgeführt.

Andrew Redd
quelle
@ j-johan-edwards: Ich bin nicht sicher, mit welchem ​​Programm ich verknüpfen soll, aber es ist KeePass2 im Software Center verfügbar.
Andrew Redd
In einigen Fällen können Sie dies beheben, indem Sie die StartupWMClassEigenschaft im Desktop- Startprogramm
Glutanimate

Antworten:

23

Was ist los

Probleme wie diese beziehen sich auf das Application Matching Framework von Unity. Um die technischen Details zu vereinfachen, sind Programmfenster und Anwendungen zwei getrennte Dinge für Ubuntu. Ubuntu muss 'raten', welche Anwendung ein bestimmtes Fenster besitzt. Und manchmal schlägt diese Vermutung fehl, und im Launcher wird ein Fragezeichen angezeigt.

Der Fehler kann folgende Ursachen haben:

  1. Ein Fehler in BAMF (das oben erwähnte Framework für den Anwendungsabgleich).
  2. Eine fehlerhafte Anwendungsbeschreibung (auch bekannt als ".desktop" -Datei).
  3. Das Fehlen jeglicher Anwendungsbeschreibung. Ausführbare Dateien, die Windows starten, verfügen nicht über diese Metadaten.

Die in der Frage gezeigte Anwendung (KeePass2) weist ein Typ 1-Problem auf, das dem entsprechenden Bug-Tracker gemeldet wurde .

Beispiele für Probleme

Die folgenden Beispiele sind technisch und richten sich an Programmierer, die möchten, dass ihre eigene Anwendung ordnungsgemäß im Ubuntu-Launcher angezeigt wird.

Problem 3 - Keine Anwendungsbeschreibung

Damit eine Anwendung in Unity integriert werden kann, dh im Dash durchsuchbar und im Launcher platziert ist, muss ein Desktop-Eintrag vorhanden sein. Solche Einträge in der platziert /usr/share/applications/, /usr/local/share/applications/und $HOME/.local/share/applications/(die beiden letzteren zur Software von Drittanbietern, systemweite und benutzer nur jeweils sind). Sie enden mit einer .desktopErweiterung und folgen diesem Grundformat:

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

Dieser Eintrag startet ein Programm durch Aufrufen der Execausführbaren Datei. Wenn dieses Programm ein Fenster oder ein Dialogfeld anzeigt, stellt Unity fest, dass die ausführbare Datei zu dieser Anwendungsbeschreibung gehört, und verwendet die angegebenen Nameund Iconim Launcher.

Dies ist ein Beispiel für Barebones. Die formale Spezifikation deckt viele erweiterte Funktionen ab.

Problem 2 - Fehlerhafte Anwendungsbeschreibung

Nehmen wir an, dass dies my_app.desktopin einem gültigen Anwendungsverzeichnis vorhanden ist, aber:

  • /file/path/of/my/icon existiert nicht im Dateisystem.
  • /file/path/of/my/icon ist kein Bild.
  • Der Eintrag verwendet eine falsche Syntax oder ungültige Tags.

In den oben genannten Fällen kann Ubuntu das Anwendungsfenster im Launcher nicht ordnungsgemäß auflisten.

Problem 1 - Ein Fehler in BAMF

Ab Ubuntu 11.10 weist BAMF eine Reihe von Fehlern auf, die den korrekten Anwendungsabgleich verhindern. Häufige (vorübergehende) Fallstricke sind:

  • Der ExecPfad ist eher eine symbolische Verknüpfung als eine reguläre Datei
  • Die ausführbare Datei ist ein Skript, das die ausführbare Hauptdatei startet.

In diesen Fällen haben Programmierer keine andere Wahl, als eine Problemumgehung zu verwenden, z. B. das Entfernen der symbolischen Verknüpfungsabstraktion oder das direkte Verknüpfen mit der ausführbaren Datei. Beides ist in der Desktop-Eintragsspezifikation selbst nicht erforderlich.

Jjed
quelle
Eine Sache noch. Sie können .desktopDateien für dieselbe App sowohl in ~/.local/share/applications/als auch haben /usr/share/applications/. Die erste Datei überschreibt die zweite, auch wenn das Symbol nicht angegeben ist.
1

Das Fenster kann nur mit der Anwendung abgeglichen werden, wenn die Eigenschaft WM_CLASS festgelegt wurde. Um dies in X11 zu tun, verwenden Sie:

XSetClassHint( display, window, &class_hints );

Sie müssen einen Zeiger auf eine XClassHint-Struktur mit den Feldern 'res_name' und 'res_class' übergeben.

Bram
quelle
-1

Ich hatte ein paar Probleme mit 16.04, einschließlich der ausgegrauten Symbole, und manchmal wurde das Touchpad unberechenbar (Acer V15 Nitro), und das Software-Center (möglicherweise auch andere Symbole) öffnete sich nicht über das Symbol (nur über einen Terminalbefehl). Ich habe irgendwo eine Empfehlung gefunden, die Gnome-Software zu deinstallieren und neu zu installieren. Seit ich das gemacht habe ist das ganze System 100% stabil, keine ausgegrauten Icons mehr und funktioniert einwandfrei. Es sah anfangs beängstigend aus, als ich nach dieser Änderung einen Neustart durchführte - viele Systemmeldungen beim Neustart -, tun Sie dies also auf Ihr eigenes Risiko.

sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software
Steve
quelle
2
Dies hat absolut nichts mit der Frage zu tun.
Martin Thornton