Cinnamon: O daemon de notificação falha quando a dica `image-path` contém um nome de ícone

Criado em 21 abr. 2018  ·  3Comentários  ·  Fonte: linuxmint/cinnamon

`` `

  • Canela Canela 3.6.7
  • Distribuição Linux Mint 18.3 Sylvia
  • 64 bits
    `` `

Emitir

O daemon de notificação não oferece suporte a nomes de ícones.

No lado do aplicativo, eu uso o GApplication para enviar notificações. Eu defino um ícone usando este tipo de código:

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

Este código basicamente travará meu aplicativo. A falha é devido a um bug no glib, que é disparado porque o tempo limite de send_notification () se esgota. O tempo limite é atingido porque o daemon de notificação do Cinnamon não responde mais e provavelmente também travou.

Eu rastreei isso o máximo que pude. No lado do chamador primeiro (ou seja, glib), podemos ver que o suporte para GThemedIcon foi discutido no Bug 745634 e adicionado na glib ec1edef3 .

Agora, se você olhar para este arquivo, verá que a implementação salvará o ícone na dica image-path . O que nos leva às etapas para reproduzir ...

Passos para reproduzir

Portanto, podemos recriar a chamada dbus que é enviada por g_application_send_notification() . Quanto à imagem, podemos usar um caminho completo (é o que você obtém se o chamador usa GFileIcon) ou simplesmente o nome do arquivo sem a extensão (é o que você obtém se o chamador usou GThemedIcon).

Definir um caminho completo funciona:

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))"

A configuração de um nome de ícone não, nenhuma notificação é exibida:

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

Outra informação

Cabe a você decidir se deseja oferecer suporte ao ícone temático ou não em seu daemon de notificação, mas pelo menos o daemon de notificação deve lidar com qualquer entrada de lixo que é enviada por aplicativos na dica image-path .

Adicionei alguns logs no Javascript do Cinnamon, e acabei aqui no arquivo js/ui/notificationDaemon.js :

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

Esta chamada nunca retorna porque GLib.filename_to_uri levanta uma exceção que não é tratada. Percebi que há alguns desta chamada no arquivo, onde as exceções não são tratadas.

Eu adicionei um extrato try catch , mas a notificação ainda não é exibida. Eu não fui mais longe.

Espero que isso ajude, sinta-se à vontade para me enviar um ping para obter mais detalhes. Saúde,

Arnaud

BUG BUG REPRODUCED

Comentários muito úteis

@ icarter09 Sim, ainda é um problema aqui, o fedora usa @itzexor WIP para corrigi-lo

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

Todos 3 comentários

@elboulangero, você ainda está tendo esse problema?

@ icarter09 Desculpe, descobri isso apenas enquanto fazia alguns testes em uma VM Cinnamon, depois que o usuário relatou um travamento com Goodvibes no Cinnamon. Eu não administro o Cinnamon, então não posso dizer.

Dito isso, acho que você pode tentar as "Etapas para reproduzir" acima para ver se ainda é um problema

Felicidades

@ icarter09 Sim, ainda é um problema aqui, o fedora usa @itzexor WIP para corrigi-lo

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

Esta página foi útil?
0 / 5 - 0 avaliações