Desktop notifications

State of the Art

Build version: 0.30.0 - v0.30.0

eventd was started to bring notifications from a IRC client on a remote server to an SSH-connected desktop computer.

Desktop notifications are often bubbles, appearing on the screen when an event happen (connection of a buddy, low battery, network connection loss, etc.).

Still, you had to use a notification daemon on the desktop computer to display them.
I searched the available daemons to chose the best one me with features I needed.
Since none fitted my needs, I decided to create my own bubbles directly in eventd.

Here is a little summary of the current state of the notifications world.

The different kind of notifications

Freedesktop.org notifications (specification)

They are simple notifications, accessible using an unified interface. They are available on many platforms, but mainly widespread under GNU/Linux.

They are composed by at least a summary which describe the event as short as possible.
Optionally, they can have a body, longer, to give details, an icon, an image or even actions.

They are available directly via D-Bus or using the libnotify library which is ported in many langages.

eventd can be interfaced with this specification.

Growl (project website)

A notifications system popular under Mac OS X. It looks a lot like the Freedesktop.org notifications.

Growl uses its own protocol, GNTP, which is integrated with Cocoa via the Growl SDK.

eventd does not have a GNTP interface yet.

Snarl (project website)

Snarl is similar to Freedesktop.org notifications and Growl, but is developped for Windows.

eventd will not have a Snarl interface.

Guifications 3 (project website)

Guifications was a plugin for Pidgin which displays notifications. Guifications 3 aimed to provide these notification to all applications.

eventd will not have a Guifications 3 interface.

Implementations and theming

Freedesktop.org notifications

It is currently the most spread interface in the available GNU/Linux systems. It has more implementations than the others.

notification-daemon (Git repository)

The historical implementation. There were really few evolutions since the start of the project.

Many themes are available but they are not really tweakable. Bubbles are interactives (the user can click on them to dismiss them) and handle actions (buttons displaying).

notify-osd (Launchpad page)

Notify-OSD was developped for Ubuntu. It provides non-intrusives and non-interactives notifications (bubbles hides on mouse overing).
Non interactives bubbles do not allow actions.

Notify-OSD does not support theming and have neutral bubbles (white text on grey background).

GNOME-Shell (project website)

In the GNOME 3 desktop environment, a part of the GNOME-Shell manage notifications.
A dedicated auto-hiding zone at the bottom of the screen shows up briefly when an event happen.
If the source application does not hint the Shell to do otherwise, it will “stock” the notification in this zone, on the right, to allow the user to get it back later. It is designed this way to avoid distraction for the user without losing information.
GNOME-Shell supports actions

Theming is integrated in the GNOME-Shell theme which is quite good.

Alternatives environments

Many desktop environments or alternatives window managers exist in the FOSS community. Some will integrate or recommend notification-daemon ou Notify-OSD, while others ship their own solution.

Alternatives stand-alone tiny daemons

They are mainly designed for minimalistic environments such as tiling window managers.

Environment oriented implementations

notification-daemon-xfce (project website)
A port of the original notification-daemon available for XFCE
xfce4-notifyd, the XFCE Notification Daemon (project website)
A daemon written for XFCE 4
Hildon Desktop
Designed for Maemo, which implies embedded hardware, so little screen
Awesome (project website)
Awesome has an internal implementation of the Freedesktop.org notifications

Growl

Growl has really flexible theming.

Snarl

Snarl has some defaut styles and each notification can use a different style.

eventd and the notification-daemon plugin

eventd has an official plugin to display notifications, notification-daemon.

notification-daemon implementation allows it to have multiple display backends, each linked to its supported targets.
notification-daemon plugin has a per-event bubble theming. This way, each event can draw independently a bubble with a different colour, font, image size limit, etc.

Backends

Currently, four backends are available: wayland, xcb, win and fbdev. Cairo is used to draw the bubbles.

The Wayland backend
This one uses Wayland and the wayland-wall notification-area protocol.
The XCB backend
This one uses the XCB library to draw bubbles in a classic graphical X environment.
The Windows® backend
This one works using Microsoft® Windows® API, tested on Windows® 10.
The Linux framebuffer backend
This backend uses the video framebuffer provided specifically by the Linux kernel to allow notifications in a virtual terminal.

Theming

eventd is designed to let the configuration all in user’s hands. Therefore, each backend must support or properly ignore specified configurations.

Cairo bubble features

The basic bubble, Cairo-drawn, supports a title, a message, an image and an icon. Both an image and an icon can be drawn simultaneously.
Several layouts are available: