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
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
(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.
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.
- Dunst (project website)
- dmenu-ish notification-daemon
- twmn (project website)
- a notification system for 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 has really flexible theming.
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.
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.
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.
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:
- icon on the background of the bubble
- small icon overlaying the image; when no image is provided, we fallback using the icon alone
- icon on the opposite side to the image