Cinnamon: Notifikasi daemon crash ketika petunjuk `image-path` berisi nama ikon

Dibuat pada 21 Apr 2018  ·  3Komentar  ·  Sumber: linuxmint/cinnamon

```

  • Kayu Manis Kayu Manis 3.6.7
  • Distribusi Linux Mint 18.3 Sylvia
  • 64 bit
    ```

Isu

Daemon notifikasi tidak mendukung nama ikon.

Di sisi aplikasi, saya menggunakan GApplication untuk mengirim notifikasi. Saya mengatur ikon menggunakan kode jenis ini:

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

Kode ini pada dasarnya akan membuat crash aplikasi saya. Error tersebut disebabkan oleh bug di glib, yang dipicu karena waktu send_notification() habis. Waktunya habis karena daemon notifikasi Cinnamon tidak membalas lagi, dan mungkin juga mogok.

Saya melacak itu sebanyak yang saya bisa. Di sisi pemanggil terlebih dahulu (mis. glib), kita dapat melihat bahwa dukungan untuk GThemedIcon dibahas di Bug 745634 , dan ditambahkan di glib ec1edef3 .

Sekarang jika Anda melihat ke dalam file ini, Anda dapat melihat bahwa implementasi pada akhirnya akan menyimpan ikon di petunjuk image-path . Yang membawa kita ke langkah-langkah untuk mereproduksi ...

Langkah-langkah untuk mereproduksi

Jadi kita bisa membuat ulang panggilan dbus yang dikirim oleh g_application_send_notification() . Untuk gambar, kita bisa menggunakan path lengkap (itulah yang Anda dapatkan jika penelepon menggunakan GFileIcon), atau hanya nama file tanpa ekstensi (itulah yang Anda dapatkan jika penelepon menggunakan GThemedIcon).

Menyetel jalur lengkap berfungsi:

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

Menyetel nama ikon tidak, tidak ada pemberitahuan yang ditampilkan:

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

Informasi lainnya

Terserah Anda untuk memutuskan apakah Anda ingin mendukung Ikon Bertema atau tidak di daemon notifikasi Anda, tetapi setidaknya daemon notifikasi harus menangani dengan baik setiap input sampah yang dikirim oleh aplikasi di petunjuk image-path .

Saya menambahkan beberapa log di Javascript Cinnamon, dan saya berakhir di sini di file js/ui/notificationDaemon.js :

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

Panggilan ini tidak pernah kembali karena GLib.filename_to_uri memunculkan pengecualian yang tidak ditangani. Saya perhatikan bahwa ada beberapa panggilan ini dalam file, di mana pengecualian tidak ditangani.

Saya menambahkan pernyataan try catch , namun pemberitahuan tetap tidak ditampilkan. Aku tidak pergi lebih jauh.

Semoga ini bisa membantu, jangan ragu untuk ping saya untuk lebih jelasnya. Bersulang,

Arnaud

BUG BUG REPRODUCED

Komentar yang paling membantu

@icarter09 Ya itu masih menjadi masalah di sini, fedora menggunakan @itzexor WIP untuk memperbaikinya

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

Semua 3 komentar

@elboulangero apakah Anda masih mengalami masalah ini?

@ icarter09 Maaf saya menemukan itu hanya saat melakukan beberapa pengujian di Cinnamon VM, setelah pengguna melaporkan kerusakan dengan Goodvibes di Cinnamon. Saya tidak menjalankan Cinnamon sendiri jadi saya tidak bisa mengatakannya.

Ini dikatakan, saya pikir Anda dapat mencoba "Langkah-langkah untuk mereproduksi" di atas untuk melihat apakah itu masih menjadi masalah

Bersulang

@icarter09 Ya itu masih menjadi masalah di sini, fedora menggunakan @itzexor WIP untuk memperbaikinya

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat