title: Почему значки в Ubuntu Dock не сбрасываются после перезапуска GNOME
description: GNOME 45+ сохраняет уведомления между сессиями. Dock показывает бейджи даже после выхода или перезапуска — это фича, а не баг.
Почему значки в Ubuntu Dock не сбрасываются после перезапуска GNOME
Если после gnome-shell --replace
или даже полного выхода из сессии значки приложений в Ubuntu Dock продолжают показывать «непрочитанные» уведомления — это не баг. Это новое поведение GNOME 45+, и ниже объясняется, как оно работает.
Уведомления теперь не сбрасываются при перезапуске Shell
До GNOME 42 перезапуск оболочки (через gnome-shell --replace
или выход/вход) сбрасывал состояние уведомлений. Сейчас — нет.
GNOME 45 и новее сохраняет уведомления в памяти и восстанавливает их после перезапуска интерфейса.
Как это работает:
- GNOME Shell хранит уведомления в JS-объекте
NotificationDaemon
, в массивеthis._notifications
. - Этот объект не уничтожается при перезапуске Shell — так как
gnome-shell --replace
перезапускает только UI, но неgnome-session
. - Также не очищаются ExtensionState и ShellDBus — внутренние состояния продолжают «думать», что уведомления ещё активны.
Ubuntu Dock может кешировать бейджи отдельно
Ubuntu использует форк Dash to Dock, встроенный в систему как Ubuntu Dock. Он умеет отображать бейджи для приложений (например, непрочитанные сообщения или прогресс).
Иногда он отображает эти бейджи независимо от состояния nautilus
или других приложений, т.к. сам кеширует их статус.
Что считается «закрытым» уведомлением?
GNOME считает уведомление «закрытым» только если оно удалено из памяти NotificationDaemon.
Метод clearAllNotifications()
вызывается только кнопкой «Очистить» в шторке уведомлений. Никакое другое действие — закрытие окна, перезапуск Shell, чтение уведомления — не очищает массив уведомлений в Shell.
this._notificationDaemon.clearAllNotifications();
💥 Почему бейджи не исчезают
- Перезапуск
gnome-shell
не очищает массив уведомлений. - Даже если окна закрыты, приложения завершены, а
nautilus
перезапущен — уведомление в памяти живо. - Ubuntu Dock читает эти «живые» уведомления и продолжает показывать бейдж.
✅ Как решить проблему
Решение одно — ручное очищение уведомлений.
1. Открой шторку уведомлений (Super + M)
2. Нажми кнопку "Очистить"
Это вызовет clearAllNotifications()
и обновит статус во всей оболочке, включая Dock.
Выводы
- GNOME 45+ сохраняет уведомления между перезапусками интерфейса.
- Ubuntu Dock может отображать устаревшие бейджи, если не очищать уведомления вручную.
- Для полного сброса — используй кнопку «Очистить» в шторке уведомлений.
А у тебя так же?
Расскажи, сталкивался ли ты с подобным поведением на своём дистрибутиве? Как ты с этим борешься — пишешь свои shell-скрипты или просто игнорируешь бейджи?