it-swarm.com.de

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

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?

enter image description here

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

22
Andrew Redd

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 Anwendungsvergleich).
  2. Eine fehlerhafte Anwendungsbeschreibung (aka '.desktop' Datei).
  3. Das Fehlen jeglicher Anwendungsbeschreibung. Ausführbare Dateien, die Windows starten, verfügen nicht über diese Metadaten.

Die in der Frage (KeePass2) gezeigte Anwendung weist ein Typ 1-Problem auf, das an den 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 werden in den /usr/share/applications/, /usr/local/share/applications/ und $HOME/.local/share/applications/ abgelegt (die beiden letzteren gelten für Software von Drittanbietern, systemweit bzw. nur für Benutzer). Sie enden mit einer .desktop -Erweiterung 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, indem er die ausführbare Datei Exec aufruft. Wenn dieses Programm ein Fenster oder einen Dialog anzeigt, stellt Unity fest, dass die ausführbare Datei zu dieser Anwendungsbeschreibung gehört, und verwendet die angegebenen Werte Name und Icon im Launcher.

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

Problem 2 - Fehlerhafte Anwendungsbeschreibung

Nehmen wir an, dass my_app.desktop in 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 Exec -Pfad ist ein symbolischer Link und keine 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.

23
Jjed

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.

1
Bram