Cinnamon: El demonio de notificación se bloquea cuando la pista `image-path` contiene un nombre de icono

Creado en 21 abr. 2018  ·  3Comentarios  ·  Fuente: linuxmint/cinnamon

''

  • Canela Canela 3.6.7
  • Distribución Linux Mint 18.3 Sylvia
  • 64 bits
    ''

Asunto

El demonio de notificación no admite nombres de iconos.

En el lado de la aplicación, uso GApplication para enviar notificaciones. Configuré un ícono 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 básicamente bloqueará mi aplicación. El bloqueo se debe a un error en glib, que se activa porque se agota el tiempo de espera de send_notification (). Se agota el tiempo porque el demonio de notificación Cinnamon ya no responde, y probablemente también se bloqueó.

Lo rastreé tanto como pude. En el lado de la persona que llama primero (es decir, glib), podemos ver que el soporte para GThemedIcon se discutió en el error 745634 y se agregó en glib ec1edef3 .

Ahora, si observa este archivo, puede ver que la implementación finalmente guardará el icono en la sugerencia image-path . Lo que nos lleva a los pasos para reproducir ...

pasos para reproducir

Entonces podemos volver a crear la llamada dbus que es enviada por g_application_send_notification() . En cuanto a la imagen, podemos usar una ruta completa (eso es lo que obtienes si la persona que llama usó GFileIcon), o simplemente el nombre del archivo sin la extensión (eso es lo que obtienes si la persona que llama usó GThemedIcon).

Establecer una ruta completa 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))"

Establecer un nombre de icono no lo hace, no se muestra ninguna notificación:

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

Otra información

Depende de usted decidir si desea admitir el icono temático o no en su demonio de notificación, pero al menos el demonio de notificación debe manejar con elegancia cualquier entrada basura enviada por aplicaciones en la sugerencia image-path .

Agregué algunos registros en el Javascript de Cinnamon y terminé aquí en el archivo 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 llamada nunca regresa porque GLib.filename_to_uri genera una excepción que no se maneja. Noté que hay algunas de estas llamadas en el archivo, donde no se manejan las excepciones.

Agregué una declaración try catch , sin embargo, la notificación aún no se muestra. No fui más lejos.

Espero que esto ayude, no dude en enviarme un ping para obtener más detalles. Salud,

Arnaud

BUG BUG REPRODUCED

Comentario más útil

@ icarter09 Sí, todavía es un problema aquí, fedora usa @itzexor WIP para solucionarlo

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

Todos 3 comentarios

@elboulangero, ¿sigues teniendo este problema?

@ icarter09 Lo siento, lo descubrí solo mientras realizaba algunas pruebas en una máquina virtual Cinnamon, después de que el usuario informara un bloqueo con Goodvibes en Cinnamon. Yo no ejecuto Cinnamon, así que no puedo decirlo.

Dicho esto, creo que puedes probar los "Pasos para reproducir" anteriores para ver si sigue siendo un problema.

salud

@ icarter09 Sí, todavía es un problema aquí, fedora usa @itzexor WIP para solucionarlo

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

¿Fue útil esta página
0 / 5 - 0 calificaciones