mako
mako ist ein leichtgewichtiges Benachrichtigungsprogramm für Wayland-Compositoren, das die FreeDesktop Notifications Specification implementiert und sich umfangreich konfigurieren und grafisch gestalten lässt.
Installation
Das Programm ist als
mako
in extra
verfügbar, und kann von dort
mittels Pacman
installiert werden.
mako wird bei Bedarf automatisch mittels D-Bus aufgerufen wenn ein Programm eine Benachrichtigung anzeigen will. Man kann mako allerdings auch explizit starten, wenn man Zum Beispiel mehrere verschiedene Benachrichtigungssysteme installiert hat, und gezielt mako verwenden will.
Hierzu kann man wahlweise mako
in den Autostart des Compositors setzen, oder im Benutzerkontext den systemd-Service starten.
systemctl --user enable --now mako
Sofern man nur ein Benachrichtigungssystem benutzt, reicht die installation allerdings aus.
Für die Nutzung unter Sway wird empfohlen, exec mako
in die Konfiguration zu schreiben.
Verwendung
Die einfachste Art der Verwendung von mako ist das simple Senden einer Benachrichtigung, zum Beispiel mittels notify-send
aus dem Paket libnotify.
notify-send "Ich bin eine Benachrichtigung"

Diese Benachrichtigung wird standardmäßig oben rechts in der Ecke des aktiven Monitors auf allen Arbeitsflächen angezeigt. Durch anklicken der Benachrichtigung verschwindet diese wieder.
Je nachdem, in wie weit die sendenden Programme die FreeDesktop Notifications Specification umsetzen, können zudem weitere Dinge mit übergeben werden. Gemäß Spezifikation werden Icons in Standardpfaden automatisch erkannt, wenn man nur ihren Namen angibt.
notify-send -i archlinux-logo "Beispiel fürs Wiki" "Ich bin eine Benachrichtigung mit Titel, Icon, und etwas Text."

mako unterstützt standardmäßig auch einfache Textformatierung. Die optional per Spezifikation definierten Bilder und Links im Benachrichtigungstext werden von mako derzeit allerdings nicht unterstützt.
notify-send -i archlinux-logo "Beispiel fürs Wiki" "Ich bin eine Benachrichtigung mit Titel, Icon, und etwas Text."

makoctl
Das mitgelieferte Tool makoctl
erlaubt das Steuern von mako zur Laufzeit, sowie die Interaktion mit diesem.
makoctl list # Zeigt alle aktuellen Benachrichtigungen JSON-formatiert an makoctl dismiss # Bestätigt und entfernt die letzte Benachrichtigung makoctl dismiss -a # Bestätigt und entfernt alle Benachrichtigungen makoctl restore # Stellt die letzte Benachrichtigung wieder her makoctl reload # Aktualisiert die Konfiguration
makoctl
verfügt noch über diverse weitere Funktionen, dies sind allerdings für den Alltagsgebrauch die wichtigsten.
Konfiguration
Die Konfiguration von Mako geschieht Userbezogen in ~/.config/mako/config
.
mako lädt die Konfiguration nur beim ersten starten (im Regelfall also bei der ersten per D-Bus gesendeten Benachrichtigung). Man kann während des Testens mittels makoctl reload
die Konfiguration neu laden. Konfigurationsänderungen werden dabei automatisch auf aktive Benachrichtigungen angewendet.
Da die Konfiguration sehr umfangreich möglich ist, sei hier nur auf einige Optionen eingegangen.
Text wird abgeschnitten (Höhe und Breite)
Standardmäßig zeigen Benachrichtigungen nur eine gewisse Menge des Benachrichtigungstextes an, weil die Benachrichtigungsfenster in der Höhe beschränkt sind.
notify-send "Benachrichtigung mit viel Text" "Diese Benachrichtigung enthält sehr langen Text, der am Ende in der Standardkonfiguration einfach abgeschnitten wird, da das Benachrichtigungsfenster eine gewisse maximale Höhe hat."

Gerade wenn man nicht die Standardtextgröße benutzt kann es passieren, dass neben dem Titel nur einige wenige Wörter angezeigt werden. Dies kann man umgehen, indem man mako die maximale Benachrichtigungfesterhöhe mitteilt.
~/.config/mako/config
height=2000
Hier werden 2000 Pixel als maximale Höhe gesetzt, auch lange Benachrichtigungen werden damit vollständig angezeigt.
[...]

Die Breite des Benachrichtigungsfensters kann mittels width=N
angegeben werden.
~/.config/mako/config
width=500
Anders als die Höhe ist die Breite nicht der Maximalwert.
notify-send "Breite Benachrichtigung" "Das Benachrichtigungsfenster ist 500 Pixel breit."

Positionierung und Anzeige der Benachrichtigungsfenster
Standardmäßig werden die Benachrichtigungsfenster oben rechts ansortiert, wobei die neueste Benachrichtigung ganz oben steht. Es werden zudem standardmäßig die letzten 5 Benachrichtigungen angezeigt. Die Benachrichtigungen sind zudem nicht gruppiert.
notify-send --app-name foo "Benachrichtigung 1 von foo" notify-send --app-name foo "Benachrichtigung 2 von foo" notify-send --app-name foo "Benachrichtigung 3 von foo" notify-send --app-name bar "Benachrichtigung 4 von bar" notify-send "Benachrichtigung 5" notify-send "Benachrichtigung 6" notify-send "Benachrichtigung 7" notify-send "Benachrichtigung 8"

Mittels diesem Set an Konfigurationsoptionen lässt sich die Anzeige anpassen.
~/.config/mako/config
# Sortierung nach App-Name group-by=app-name # Zeige alle benachrichtigungen max-visible=-1 # Zeige Benachrichtigungen als Overlay layer=overlay # Zentriere Benachrichtigungen oben mittig anchor=top-center
Bei gleichem Set an Benachrichtigungen sieht die Anzeige nun so aus
[...]

Alle Benachrichtigungen mit dem App-Namen „foo“ werden Gruppiert, genau so wie die Fenster ohne Angabe des App-Namens gruppiert werden (notify-send
trägt sich selbst ein). Gruppierte Benachrichtigungen zeigen zudem die Anzahl der Benachrichtigungen in dieser Gruppe an, bei jedem Klick wird automatisch die nächste Benachrichtigung gezeigt.
Mittels layer
wird definiert, wo der Compositor die Fenster in relation zu normalen Fenstern darstellen soll. Mögliche Werte sind background
, bottom
, top
, und overlay
. Mit overlay
werden – sofern vom Compositor unterstützt – Benachrichtigungen noch über Fenstern im Vollbildmodus angezeigt.
Zudem setzt die Beispielkonfiguration noch, dass die Ausrichtung der Benachrichtigungen oben mittig stattfinden soll. Mögliche Werte sind hier top-
, center-
, und bottom-
in Kombination mit left
, center
, und right
für die horizontale Ausrichtung. Statt center-center
wird center
benutzt.
Anzeige von Icons anpassen
Icons werden immer aus /usr/share/icons/hicolor
und /usr/share/pixmaps
geladen und angezeigt. Will man zusätzlich noch eigene Icons laden, so kann man die Pfade in der Konfiguration entsprechend hinterlegen. Auch besteht die Möglichkeit, die Maximalgröße von Icons beschränken.
~/.config/mako/config
icon-path=/pfad/zu/de/icons/:/anderer/pfad:/noch/ein/pfad:...:... max-icon-size=13
Hierbei reicht es jedoch nicht, mittels makoctl reload
die Konfiguration neu zu laden. Die neue Icongröße wird nur für neue Benachrichtigungen nach dem Neuladen der Konfiguration benutzt.
Mittels icon-location
kann zudem die Seite des Icons bestimmt werden: left
, right
, top
, und bottom
. Dabei ist das Icon an der jeweiligen Seite immer zentriert. Eine Ausrichtung des Icons nach oben links zum Beispiel ist nicht möglich.
Mittels icons=0
kann die Anzeige von Icons zudem ganz unterdrückt werden.
notify-send -i archlinux-logo "Benachrichtigung mit Icon"

Im Beispiel wird das Icon auf 13 Pixel skaliert, was der Schriftgröße entspricht.
Inhaltsanzeige der Benachrichtigung anpassen
Mako zeigt standardmäßig nur das Icon, den Benachrichtigungstitel, und den Benachrichtigungstext an.
notify-send -i archlinux-logo -a foobar -u low -c Test "Benachrichtigung Details" "Dies ist eine Benachrichtigung, zu der mehrere Details übermittelt wurden." notify-send -u critical "ACHTUNG" "Kritische Benachrichtigung" notify-send --app-name foo "Benachrichtigung 1 von foo" notify-send --app-name foo "Benachrichtigung 2 von foo" notify-send --app-name foo "Benachrichtigung 3 von foo" notify-send --app-name bar "Benachrichtigung 4 von bar"

Man kann mittels format
und den entsprechenden Variablen die Anzeige individuell gestalten. Die Gestaltung (bzw. fast die komplette Konfiguration) kann zudem von mehreren Kriterien abhängig sein. Wenn kein Kriterium
~/.config/mako/config
format=<b>%s</b>\n<i>%a</i>\n\n%b group-by=app-name [grouped] format=<b>%s</b>\n<i>%gx %a</i> [urgency=low] format=<u>Nicht so wichtig</u>\n%s\n%b background-color=#babdb6 text-color=#2e3436 icons=0 [urgency=critical] background-color=#dd0000 text-color=#000000 font=DejaVu Sans 15 width=400 height=2000
Dies setzt verschiedene Optionen, jeweils unter unterschiedlichen Kriterien, um die jeweiligen Benachrichtigungen unterschiedlich zu formatieren.
[...]

In der Manpage (Sektion 5) werden noch diverse weitere Möglichkeiten der Formatierung und kriterienabhängigen Darstellung aufgezeigt.