Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Почему в GNOME 45+ бейджи не исчезают после перезапуска оболочки

Linux и DevOps

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-скрипты или просто игнорируешь бейджи?

Оцените статью
ctrllife.ru
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x