Информирование о событиях#
Подсистема регистрации событий#
В ОС Astra Linux реализована подсистема регистрации событий, которая собирает информацию о событиях, выполняет ее регистрацию и предоставляет инструменты для просмотра собранных данных и реагирования на события. Регистрация событий безопасности выполняется с учетом требований ГОСТ Р 59548-2022.
Подсистема регистрации событий включает следующие основные компоненты.
1. Менеджер и маршрутизатор событий syslog-ng — основная служба подсистемы регистрации событий, которая реализована в соответствии со стандартом Syslog. Принимает информацию о событиях из различных источников (события от auditd, собственные подключаемые модули, файлы, прикладное ПО и др.), выполняет фильтрацию и обработку полученных данных, регистрирует системные события в журнал /parsec/log/astra/events.
Модуль syslog-ng-mod-astra — модуль для syslog-ng, выполняющий дополнительную обработку и фильтрацию событий.
3. astra-event-watcher — служба уведомления пользователя о системных событиях, обработанных менеджером syslog-ng. Передача данных выполняется с использованием DBus.
Примечание
Реализация заданных для реагирования действий осуществляется модулем KNotifications. Демон astra-event-watcher получает информацию только о событиях, для которых настроено реагирование. Перечень системных событий и параметры уведомлений таких событий определены в файле /usr/share/knotifications5/astra-event-watcher.notifyrc.
Служба astra-event-watcher, запущенная от имени пользователя, реагирует только на те события, которые настроены для данного пользователя. Для этого служба отслеживает сигнал, передаваемый syslog-ng по DBus всем заинтересованным приложениям. В сигнале также передается список имен пользователей и имен групп, для которых требуется реакция на событие. Параметры уведомлений для определенного пользователя могут быть переопределены в файле /home/<имя_пользователя>/.config/astra-event-watcher.notifyrc. Интерактивно файл может быть настроен пользователем с помощью «Центра уведомлений» в меню настройки специальных действий для системных событий.
astra-event-diagnostics — инструмент диагностики подсистемы регистрации событий (описание инструмента приведено в п. 6.5.3 “Руководство по КСЗ. Часть 1”).
Настройка регистрации событий#
Графический киоск#
Для управления syslog-ng используются графические утилиты fly-admin-events («Настройка регистрации системных событий» — запуск требует прав администратора) и fly-event-viewer («Журнал системных событий»). Описание использования утилит приведено в электронной справке, отобразить которую можно из меню утилиты
.«Настройка регистрации системных событий» позволяет задавать и редактировать правила аудита (настройки фильтрации системных событий) и управление журналами регистрации событий.
Примечание
В электронной справке «Настройки регистрации системных событий» описаны:
настройка журналирования системных событий (размер журнала, место хранения и др.);
включение/выключение уведомлений о событиях для указанных пользователей;
способы уведомления о событиях.
«Журнал системных событий» позволяет просматривать записи из журнала системных событий /parsec/log/astra/events, выполнять их печать и экспорт.
Информирование (оповещение) о событиях осуществляется с помощью утилиты fly-notifications («Центр уведомлений»), реализующая вывод сообщений для пользователя на рабочем столе. Пакет добавлен в репозитории AstraLinux начиная с оперативного обновления 1.7.1. Описание утилиты приведено в электронной справке. Подробное описание подсистемы регистрации событий приведено в РУСБ.10015-01 97 01-1.
Для установки программы «Центр уведомлений» необходимо выполнить команду:
sudo apt install fly-notifications
Примечание
В электронной справке «Центра уведомлений» описаны:
настройка всплывающих уведомлений (расположение, время отображения и др.);
задание режима “Не беспокоить” (уведомления не отображаются на экране);
управление уведомлениями приложений (от зарегистрированных источников, расположенных в каталоге /usr/share/knotifications5/ в файлах *.notifyrc).
Системный киоск#
Для управления регистрацией событий могут использоваться инструменты командной строки astra-admin-events (просмотр списка регистрируемых событий) и astra-event-viewer (журнал событий). Порядок использования инструментов приведен на соответствующих страницах помощи:
astra-admin-events -h
astra-event-viewer -h.
Для просмотра с помощью инструмента astra-admin-events списка регистрируемых событий необходимо выполнить от администратора команду без параметров:
astra-admin-events
В выводе списка событий значение «1» — событие регистрируется, значение «0» — событие не регистрируется.
Информирование пользователя#
Предложены два типа уведомлений для оповещения пользователей о регистрируемых в системе событиях (подробнее об экранных уведомлениях можно посмотреть в статье):
Desktop уведомление — сообщение пользователю, соответствующее спецификации Desktop Notifications Specification;
OSD (on screen display) оповещения — специальный механизм уведомления пользователя об уже случившемся событии, без ожидания действий со стороны пользователя.
Создание пользовательских уведомлений#
Дефолтные параметры уведомлений (стиль, тайм-аут и др.) заданы на сервере уведомлений fly-notifications.
В соответствии с базовой спецификацией Desktop Notifications Specification, структура уведомления задается полями:
заголовок (summary) — обязательно для заполнения,
тело уведомления (body),
имя отправившего уведомление приложения (appName),
иконка уведомления (appIcon),
тайм-аут показа уведомления (timeout),
действия (actions — данная функция поддерживается сервером уведомлений),
подсказки (hints) для предоставления дополнительных данных,
идентификатор предыдущего уведомления (replaces_id) для замены уже отправленного уведомления.
Примечание
Подробнее о DBus API для работы с уведомлениями можно посмотреть в статье.
С помощью структуры hints рекомендуется задавать 2 дополнительных поля (не обязаны присутствовать при отправке уведомления):
класс событий (category);
тип срочности (urgency) для разделения уведомлений по их критичности (выделяют три вида критичности — информация, уведомление и предупреждение).
Примечание
Критические уведомления (предупреждения) не скрываемы и требуют от пользователя выполнение действия (закрытия).
Для тела (body) уведомлений поддерживается примитивное отображение HTML текста: bold, italic, underline, hyperlink, image. Для summary HTML текст не поддерживается. Реализация более продвинутого HTML текста не рекомендуется спецификацией Desktop Notifications Specification.
В уведомлении можно передавать действия, которые будут отображаться в виде кнопок. Пользователь может нажать любое действие и текущее уведомление должно закрыться, передав какое действие нажал пользователь. Так же можно передавать в уведомлении действие по умолчанию (default action), которое не будет отображена как кнопка, а нажатие на данное уведомление будет отправляться приложению, с последующем закрытием уведомления.
Desktop уведомления#
Основные принципы работы службы отправки desktop уведомлений:
передача данных уведомлений осуществляется по DBus, по сессионной шине;
приложения выступают в роли клиента, всю работу выполняет сервер уведомлений (fly-notifications), который является приложением отображающим уведомления пользователю;
все desktop уведомления для пользователя передаются прямо серверу уведомлений.
Правила работы с desktop уведомлениями:
не рекомендуется передавать в уведомлениях пароли или другую важную информацию (на стороне сервера возможно хранение содержимого уведомлений в файле);
допустима отправка короткого уведомления с ключевой информацией для пользователя с предоставлением возможности просмотра более подробной информации в вашем приложении;
рекомендуется перепроектирование всех уведомлений, отображаемых через системный трей (например, QSystemTrayIcon::showMessage(…) в некоторых Fly приложениях), на desktop уведомления с помощью KNotification.;
для root приложений рекомендуется понизить уровень прав доступа (AL не поддерживает работу desktop уведомлений от root приложений) — перевести приложение под работу обычного пользователя или создать пользовательские приложения, задача которых будет передача оповещений от root приложения текущим пользователям (пользовательские приложения стартуют при входе пользователя в систему).
Жизнь уведомления после отправки#
После отправки вашим приложением desktop уведомления нужно помнить о возможности выполнения следующих действий:
пользователь может закрыть (close) отправленное уведомление;
возможно выполнение закрытия (close) отправленного уведомления на стороне отправителя, если информация в отправленном уведомлении стала недействительной или устарела;
отправленное приложение можно заменить (replace) на стороне отправителя;
пользователь может выполнить действие по умолчанию (default action), если у отправленного уведомления они есть;
пользователь может нажать на действие (action), если у отправленного уведомления они есть.
Создание уведомлений с помощью KNotification#
Для удобной работы с desktop уведомлениями используется модуль KNotification — кроссплатформенная библиотека из графической оболочки KDE. Модуль соответствует спецификации Desktop Notifications Specification и расширяет стандартные возможности по работе с уведомлениями для пользователя (официальная документация по данному KDE модулю). Рекомендуется использовать данный класс для создания desktop уведомлений, поскольку события таких уведомлений можно журналировать, используя fly-notifications.
Библиотека используется для уведомления пользователя о событии в приложении. Структура сообщения соответствует спецификации Desktop Notifications Specification и расширена за счет возможности задания флагов из перечня (описание класса уведомления приведено здесь):
CloseOnTimeout — дефолтный флаг, определяяющий закрытие сообщения по таймауту (значение таймаута задано в файле настроек fly-notifications);
Persistent — взаимоисключающий флаг с предыдущим, сообщение остается на экране, пока не будет закрыто пользователем;
LoopSound — зацикливать звук уведомления пока сообщение не будет закрыто;
SkipGrouping — не группировать уведомление с другими;
CloseWhenWindowActivated — уведомление будет автоматически закрыто, если пользователь перейдет в окно основного приложения;
DefaultEvent — создание стандартного KDE события, которое не будет событием приложения (без создания desktop уведомления).
В KNotification нельзя задавать время “истекания” (expire_timeout), так как в KDE указано, что это пользовательская настройка и сам пользователь настроит его под себя. Рекомендуется задавать срочность (urgency) оповещений чтобы разграничить уведомления по важности.
KNotification можно использовать в QML. Пример использования модуля представлен в приложенном архиве <https://disk.astralinux.ru/s/NmkptbgbxAFSMyW/download?path=%2FCode/notification&files=qt-simple-knotifications.tar.gz>.
Для работы вашего приложения с desktop уведомлениями необходимо задать notifyrc файл. В notifyrc файле для вашего приложения определяются события, для которых будут создаваться уведомления. Рекомендуется разграничить типы событий, а не создавать одно единственное событие для всех уведомлений, чтобы пользователь мог отключать определённые типы уведомлений вашего приложения или настраивать (персонализировать) их под себя.
Предупреждение
Имя файла notifyrc должно соответствовать передаваемому в сообщении имени компоненты, генерирующей событие (по умолчанию соответствует имени приложения). По имени файла происходит фильтрация уведомлений для отображения. Файл должен располагаться в директории /usr/share/knotifications5/ (запись в директории ведется администратором).
Пример содержания файла app-test-kde-notifications.notifyrc:
[Global]
Name=App-test-kde-notifications
Comment=Test application KDE notifications
[Event/test-event]
Name=Test event happend
Name[ru]=Возникновение тестового события
Action=Popup
Широковещательные уведомления#
Широковещательные уведомления — это Desktop уведомления для группы локальных пользователей. Такие уведомления удобно использовать для администрирования систем в изолированных локальных сетях, для информирования работающих пользователей о каком либо событии. По умолчанию в fly-notifications не работают широковещательные уведомления, но администратор или пользователь может их включить. Из-за того что широковещательные уведомления посылаются нескольким пользователям, то из-за определённых архитектурных решений, нет поддержки для отслеживания состояния отправленных уведомлений, в том числе не поддержки действий(actions) в широковещательных уведомлениях.
Для включения широковещательных уведомлений в fly-notifications необходимо создать конфигурационные файлы по путям «~/.config/fly-notificationsrc» и «/etc/xdg/fly-notificationsrc» со следующим содержимым:
[Notifications]
ListenForBroadcasts=true
Особенности широковещательных уведомлений:
можно передать список UID пользователей, которым необходимо показывать уведомление (“uids”);
не возвращает id уведомления (no “return_id”), то есть нельзя отследить уведомления после его отправки;
нельзя заменить уже посланное уведомление (“replaces_id” not support);
не поддерживает действия в уведомлении (no actions);
отправленные широковещательные уведомления видны всем пользователям, так как используется системная DBus шина, из-за чего лучше не передавать через него приватную информацию для одного или нескольких пользователей.
Список полей в широковещательных уведомлениях:
appName - название приложения;
appIcon - имя иконки приложения;
summary - заголовок уведомления;
body - текст уведомления;
hints - особые свойства для уведомления;
timeout - время показа уведомления;
uids - группа пользователей для которых данное уведомление, если поле “uids” не заданно, то широковещательное уведомления показывается всем пользователям.
Поле “actions” не поддерживается, так как нет возможности отследить нажатие пользователя на действие(action).
Для проверки правильности настроек можно создать тестовое уведомление с помощью команды:
gdbus emit --system --object-path / --signal org.kde.BroadcastNotifications.Notify "{'app[Notifications]
ListenForBroadcasts=trueIcon': <'network-disconnect'>, 'body': <'Please contact system administration if you cannot find your stuff.'>, 'summary': <'Cannot restore network shares'>, 'uids': <['0', '1000', '1337']>}"
OSD оповещения#
Сервис “fly-notify-osd-service” представляет реализацию всплывающих уведомлений о некоторых событиях с внешних устройств и изменении настроек сервиса (API модуля представлено ниже). Суть реализации информирования заключается в показе и скрытии короткого сообщения непродолжительное время на экране.
Примечание
Индикатор — окно для OSD оповещения.
Система Desktop уведомлений и OSD оповещений должны работать отдельно друг от друга, так как:
содержание OSD оповещений не нужно хранить, если пользователь на них не среагировал, в отличии от Desktop уведомлений;
с индикаторами не подразумевается взаимодействие пользователя, кроме информирования пользователя (пользователь не может сам скрыть индикатор или по другому повлиять на индикатор).
Примеры, когда могут отображаться OSD оповещения:
Пользователь изменил яркость монитора;
Пользователь изменил яркость клавиатуры;
Пользователь изменил громкость звука;
Пользователь изменил громкость микрофона;
Пользователь изменил громкость медиа проигрывателя;
Пользователь изменил текущую раскладку клавиатуры;
Пользователь изменил текущий виртуальный рабочий стол;
Пользователь включил/выключил режим «Не беспокоить» в «Центре уведомлений».
Основные принципы OSD#
Индикатор располагается на главном экране.
Стилистика (цветовая палитра, стиль иконок) индикатора должна соответствовать стилистике панели задач.
Индикатор появляется на 1800 миллисекунд, после чего автоматически скрывается.
Если пришло новое OSD оповещение, во время показа предыдущего, то содержимое индикатора заменяется, таймер скрытия перезапускается.
Все события ввода пользователя должны игнорироваться для индикатора: пользователь не должен иметь возможности взаимодействовать с индикатором.
Если содержимое OSD оповещения не влезает, то в конце содержимого должно присутствовать многоточие (…).
OSD оповещения не должны перекрываться Desktop уведомления: OSD оповещение приоритетнее Desktop уведомления.
Способы использования функционала#
Реализация OSD оповещения находится в пакете “fly-notify-osd-service”, в утилите “/usr/bin/fly-notify-osd-service”. Исполняемый файл “/usr/bin/fly-notify-osd-service” (далее сервис) запускается при входе пользователя, и останавливается при завершении графической сессии. Во время работы сервиса можно отправлять данные для отображения OSD оповещений пользователю. В пакете “fly-notify-osd-service” ещё присутствует программа “fly-notify-osd-cat”, используя аргументы запуска программы, для отправки OSD оповещений запущенному процессу “fly-notify-osd-service” по DBus соединению.
Предложены 2 метода использования функционала:
используя DBus соединение — для этого в notifyrc файле приложения задать ServiceName = «org.kde.plasmashell», ObjectPath = «/org/kde/osdService»;
с помощью программы fly-notify-osd-cat (рекомендуется использовать DBus соединение).
В основном существует два типа OSD оповещений:
Показ прогресс бара, с указанным процентом (с иконкой или без иконки);
Показ текстового сообщения (с иконкой или без иконки).
Функция |
Наименование |
Параметры |
---|---|---|
brightnessChanged <целое число> |
Показание изменения яркости в процентах |
Целочисленное значение, в диапазоне [0, 100] |
keyboardBrightnessChanged <целое число> |
Показание изменения яркости клавиатуры в процентах |
Целочисленное значение, в диапазоне [0, 100] |
volumeChanged <целое число> |
Показание изменения громкости в процентах |
Целочисленное значение, в диапазоне [0, 100] |
microphoneVolumeChanged <целое число> |
Показание изменения громкости микрофона в процентах |
Целочисленное значение, в диапазоне [0, 100] |
mediaPlayerVolumeChanged <целое число> <строка> <строка> |
Показание изменения громкости в медиаплеере в процентах |
Первый аргумент — целочисленное значение, в диапазоне [0, 100]; второй агрумент — пользовательское имя медиаплеера; третий аргумент — имя иконки (может быть пустым) |
kbdLayoutChanged <строка> |
Показание изменения раскладки клавиатуры |
Название новой раскладки клавиатуры |
virtualDesktopChanged <строка> |
Показание изменения текущего виртуального рабочего стола |
Название нового рабочего стола |
touchpadEnabledChanged <логическое значение> |
Показание изменения сенсорной панели вкл/выкл |
Логическое значение («0», «1», «true», «false») |
wifiEnabledChanged <логическое значение> |
Показание изменения Wi-Fi вкл/выкл |
Логическое значение («0», «1», «true», «false») |
bluetoothEnabledChanged <логическое значение> |
Показание изменения bluetooth вкл/выкл |
Логическое значение («0», «1», «true», «false») |
wwanEnabledChanged <логическое значение> |
Показание изменение wwan(мобильный интеренет) вкл/выкл |
Логическое значение («0», «1», «true», «false») |
virtualKeyboardEnabledChanged <логическое значение> |
Показание изменения виртуальной клавиатуры вкл/выкл |
Логическое значение («0», «1», «true», «false») |
showText <строка> <строка> |
Показать пользователю текстовое сообщение со значком |
Первый аргумент — имя иконки (может быть пустым); второй аргумент — текстовое сообщение |
showProgressBar <строка> <целое число> |
Показать пользователю индикатор выполнения со значком |
Первый аргумент — имя иконки (может быть пустым); второй аргумент — целочисленное значение, в диапазоне [0, 100] |
Создание уведомления с помощью библиотеки qdbus:
qdbus org.kde.plasmashell /org/kde/osdService showProgressBar firefox "10"
Примечание
Пример использования функции в программе fly-notify-osd-cat:
fly-notify-osd-cat --brightnessChanged 100
Появится уведомлении о яркости экрана монитора 100%, однако сама яркость экрана не изменится.
XML формат для DBus соединения#
К сервису “fly-notify-osd-service”, можно подключиться по DBus соединению, ниже представлено XML описание DBus соединения:
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.kde.osdService">
<signal name="osdProgress">
<arg name="icon" type="s" direction="out"/>
<arg name="percent" type="i" direction="out"/>
<arg name="additionalText" type="s" direction="out"/>
</signal>
<signal name="osdText">
<arg name="icon" type="s" direction="out"/>
<arg name="text" type="s" direction="out"/>
</signal>
<method name="brightnessChanged">
<arg name="percent" type="i" direction="in"/>
</method>
<method name="keyboardBrightnessChanged">
<arg name="percent" type="i" direction="in"/>
</method>
<method name="volumeChanged">
<arg name="percent" type="i" direction="in"/>
</method>
<method name="microphoneVolumeChanged">
<arg name="percent" type="i" direction="in"/>
</method>
<method name="mediaPlayerVolumeChanged">
<arg name="percent" type="i" direction="in"/>
<arg name="playerName" type="s" direction="in"/>
<arg name="playerIconName" type="s" direction="in"/>
</method>
<method name="kbdLayoutChanged">
<arg name="layoutName" type="s" direction="in"/>
</method>
<method name="virtualDesktopChanged">
<arg name="currentVirtualDesktopName" type="s" direction="in"/>
</method>
<method name="touchpadEnabledChanged">
<arg name="touchpadEnabled" type="b" direction="in"/>
</method>
<method name="wifiEnabledChanged">
<arg name="wifiEnabled" type="b" direction="in"/>
</method>
<method name="bluetoothEnabledChanged">
<arg name="bluetoothEnabled" type="b" direction="in"/>
</method>
<method name="wwanEnabledChanged">
<arg name="wwanEnabled" type="b" direction="in"/>
</method>
<method name="virtualKeyboardEnabledChanged">
<arg name="virtualKeyboardEnabled" type="b" direction="in"/>
</method>
<method name="showText">
<arg name="icon" type="s" direction="in"/>
<arg name="text" type="s" direction="in"/>
</method>
<method name="showProgressBar">
<arg name="icon" type="s" direction="in"/>
<arg name="percent" type="i" direction="in"/>
</method>
</interface>
</node>
Мониторинг DBus соединения#
dbus-monitor#
Основным инструментом, который отображает информацию о полученных сигналах по DBus является утилита dbus-monitor (подробнее см. по ссылке).
Параметры system и session позволяют dbus-monitor отслеживать системную или сессионную (запускается при входе пользователя) шины соответственно. Если ни одна из них не указана, dbus-monitor отслеживает сессионную шину.
Для начала мониторинга необходимо выполнить в терминале команду:
dbus-monitor
При этом перехватываются все сигналы всех сервисов. Для фильтрации сигналов дополнительно передается строка с заданными значениями фильтров. Например, для вывода пользовательских уведомлений используется команда (отслеживается только сигнал Notify из сервиса Notifications):
dbus-monitor --session "sender=org.freedesktop.Notifications,path=/org/freedesktop/Notifications,member=Notify"
busctl#
Утилита busctl используется для исследования взаимодействия с объектной системой DBus. При вызове без параметров отображает список всех узлов, подключенных к системной шине (при указании параметра –user показывает узлы пользовательской шины).
Например, с помощью команды ниже можно отобразить интерфейсы, методы, свойства и сигналы указанного объекта (OSD сервис):
busctl --user introspect org.kde.plasmashell /org/kde/osdService
Для мониторинга пользовательских уведомлений D-Bus можно использовать команду, представленную ниже.
busctl --user --match="interface='org.freedesktop.Notifications'" monitor
Персонализация уведомлений#
Общие настройки «Центра уведомлений» сохраняются в файле /home/<имя_пользователя>/.config/flynotifyrc (если файла нет, применяются дефолтные настройки). Настройки конкретных приложений сохраняются в этот же каталог с именами этих приложений (см. ниже пример файла app-test-kde-notifications.notifyrc).
Журналирование событий#
С помощью «Центра уведомлений» (fly-notification) можно настроить журналирование событий из пользовательского приложения в текстовый файл. При возникновении события в файл будет записана строка, содержащая класс сообщения (KNotify), дату и время записи, текст сообщения (body). Для задания файла журналирования требуется перейти в настройки «Центра уведомлений» (нажать иконку колокольчика на панели задач и открыть вкладку настроек). После создания конфигурационного файла приложения .notifyrc в каталоге /usr/share/knotifications5/ на вкладке «Настройка приложений» отобразится имя приложения и станет доступна возможность его настройки.
Для определенности пусть имя приложения будет app-test-kde-notifications.
Для настройки журналирования событий необходимо перейти по кнопке Настроить типы уведомлений (кнопка доступна, если в файле .notifyrc задан хотя бы один тип событий). Имена событий задаются в поле Name или Name[ru] notifyrc файла.
После подтверждения изменений будет создан конфигурационный файл в каталоге /home/<имя_пользователя>/.config/app-test-kde-notifications.notifyrc со следующим содержимым:
[Event/test-event]
Action=Popup|Logfile
Execute=
Logfile=file:///home/<имя_пользователя>/<указанный файл журналирования>
Sound=
TTS=
Настройка звука уведомления и выполнения программы#
Дополнительно на вкладке «Модуль настройки системы» можно задать выполнение программы при возникновении события и воспроизведение заданного звука.
Включение/выключение уведомлений#
Настройка «Центра уведомлений» позволяет отключить все уведомления приложения (чек-бокс “Включить уведомления” на вкладке «Настройка приложений») или показывать уведомления в определенный промежуток времени.
Также можно настроить отображение только определенных типов событий от приложения (чек-бокс “Включить уведомления” на вкладке «Модуль настройки системы»).
Настройка уведомлений о системных событиях#
Вышеперечисленные настройки (в пункте «Персонализация уведомлений») применимы только к оповещениям от пользовательских приложений.
Все системные события журналируются и доступны для просмотра в «Журнале системных событий».
Типы регистрируемых системных событий задаются в приложении «Настройка регистрации системных событий» (для запуска требуются права администратора). В приложение доступна настройка конфигурации журналирования: ротация журналов, задание дополнительного журнала (подробнее см. в электронной справке).
Демонстрация работы#
В приложенном архиве содержатся 3 примера создания уведомлений:
приложение для создания журналируемых desktop оповещений с помощью KNotification;
приложение для уведомлений пользователя с помощью QDBusMessage;
архив с bash-скриптами создания desktop уведомлений (с помощью notify-send/gdbus) и OSD уведомлений (с помощью qdbus).