Cinnamon: Absturz des Benachrichtigungs-Daemons, wenn der Hinweis `image-path` einen Symbolnamen enthält

Erstellt am 21. Apr. 2018  ·  3Kommentare  ·  Quelle: linuxmint/cinnamon

```

  • Zimt Zimt 3.6.7
  • Distribution Linux Mint 18.3 Sylvia
  • 64-Bit
    ```

Problem

Der Benachrichtigungs-Daemon unterstützt keine Symbolnamen.

Auf der Anwendungsseite verwende ich GApplication, um Benachrichtigungen zu senden. Ich habe ein Symbol mit diesem Code gesetzt:

icon = g_themed_icon_new("edit-copy");
g_notification_set_icon(notif, icon);
g_application_send_notification(app, "notif-id", notif);

Dieser Code wird im Grunde meine Anwendung zum Absturz bringen. Der Absturz ist auf einen Fehler in glib zurückzuführen, der ausgelöst wird, weil send_notification() abläuft. Es läuft eine Zeitüberschreitung ab, weil der Cinnamon-Benachrichtigungs-Daemon nicht mehr antwortet und wahrscheinlich auch abgestürzt ist.

Das habe ich so gut es ging verfolgt. Auf der Anruferseite zuerst (dh glib) können wir sehen, dass die Unterstützung für GThemedIcon in Bug 745634 besprochen und in glib ec1edef3 hinzugefügt wurde.

Wenn Sie sich nun diese Datei ansehen, können Sie sehen, dass die Implementierung das Symbol letztendlich im image-path Hinweis speichert. Was uns zu den Schritten zur Reproduktion führt...

Schritte zum Reproduzieren

So können wir den von g_application_send_notification() gesendeten dbus-Aufruf neu erstellen. Für das Bild können wir entweder einen vollständigen Pfad verwenden (diesen erhalten Sie, wenn der Aufrufer GFileIcon verwendet hat) oder einfach den Dateinamen ohne die Erweiterung (diesen erhalten Sie, wenn der Aufrufer GThemedIcon verwendet hat).

Das Festlegen eines vollständigen Pfads funktioniert:

IMAGE=/usr/share/icons/Adwaita/48x48/actions/edit-copy.png
python -c "import dbus; print dbus.Bus().call_blocking(\
    'org.freedesktop.Notifications', \
    '/org/freedesktop/Notifications', \
    'org.freedesktop.Notifications', \
    'Notify', \
    'susssasa{sv}i', \
    ('appname', 0, '', 'summary', 'body', [], {'image-path': '$IMAGE'}, -1))"

Das Festlegen eines Symbolnamens funktioniert nicht, es wird keine Benachrichtigung angezeigt:

IMAGE=edit-copy
python -c ... # copy-paste the snippet above

Andere Informationen

Es liegt an Ihnen zu entscheiden, ob Sie Themed Icon in Ihrem Benachrichtigungs-Daemon unterstützen möchten oder nicht, aber zumindest sollte der Benachrichtigungs-Daemon jede Junk-Eingabe, die von Anwendungen im image-path Hinweis

Ich habe einige Protokolle im Cinnamon Javascript hinzugefügt und bin hier in der Datei js/ui/notificationDaemon.js :

       } else if (hints['image-path']) {
           return textureCache.load_uri_async(GLib.filename_to_uri(hints['image-path'], null), size, size);

Dieser Aufruf wird nie zurückgegeben, da GLib.filename_to_uri eine Ausnahme auslöst, die nicht behandelt wird. Mir ist aufgefallen, dass es einige dieser Aufrufe in der Datei gibt, bei denen Ausnahmen nicht behandelt werden.

Ich habe eine try catch Anweisung hinzugefügt, die Benachrichtigung wird jedoch immer noch nicht angezeigt. Ich ging nicht weiter.

Hoffe das hilft dir, ping mich gerne für weitere Details. Prost,

Arnaud

BUG BUG REPRODUCED

Hilfreichster Kommentar

@icarter09 Ja, es ist immer noch ein Problem hier, Fedora verwendet @itzexor WIP, um es zu beheben

https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f

Alle 3 Kommentare

@elboulangero hast du dieses Problem immer noch?

@icarter09 Tut mir leid, das habe ich erst beim Testen in einer Cinnamon-VM herausgefunden, nachdem der Benutzer einen Absturz mit Goodvibes auf Cinnamon gemeldet hatte. Ich betreibe Cinnamon selbst nicht, also kann ich es nicht sagen.

Davon abgesehen können Sie die obigen "Schritte zur Reproduktion" ausprobieren, um zu sehen, ob es immer noch ein Problem ist

Prost

@icarter09 Ja, es ist immer noch ein Problem hier, Fedora verwendet @itzexor WIP, um es zu beheben

https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen