Kurztipp: smartd mit Desktop-Benachrichtigungen ausstatten

Marvin Gülker · 17.11.2019

Der Beitrag erklärt, wie smartd(8) so konfiguriert werden kann, daß statt E-Mails Desktop-Benachrichtigungen erzeugt werden.

Kategorien: Software

Die Smartmontools sind eine Programmsammlung zur Überprüfung der Selbstdiagnosedaten (sog. S.M.A.R.T.-Daten) von Festplatten. Zu ihnen gehört neben dem Hauptwerkzeug smartctl(1) vor allem auch der Daemon smartd(8), welcher die S.M.A.R.T.-Daten der konfigurierten Festplatten ständig überwacht und bei Auffälligkeiten Alarm schlägt. Eine typische Konfiguration in der /etc/smartd.conf kann so aussehen:

/dev/sda -a -n standby -m johndoe@example.com

Der Schalter -m sorgt dafür, daß smartd(8) bei Veränderung der S.M.A.R.T.-Werte eine E-Mail an die übergebene E-Mail-Adresse (johndoe@example.com) schickt. Das ist auf Server-Systemem meist kein Problem. Auf Desktop-Systemen gilt allerdings, daß eine Infrasturktur zum automatisierten Versand von E-Mails oft nicht vorhanden ist: weder existiert das Programm sendmail(1) bzw. hat keine sinnvolle Konfiguration, noch ist das von smartd(8) benötigte mail(1) installiert. Das liegt daran, daß bei Desktop-Systemen der Informationsfluß zum Nutzer ein anderer ist, denn schließlich sitzt der Nutzer meist ohnehin am System. Heute kommen dafür meist Desktop-Benachrichtigungen zum Einsatz, welche smartd(8) aber ärgerlicherweise nicht von Haus aus unterstützt.

Doch gibt es eine Möglichkeit. Das Programm notify-send(1) ist bei Debian im Paket libnotify-bin enthalten und dient dazu, Desktop-Benachrichtigungen auf der Kommandozeile zu erzeugen. Das erfordert allerdings, daß auf dem System ein Benachrichtigungs-Daemon (notification daemon) läuft. Alle großen Desktop-Umgebungen gewährleisten dies; wer auf eine Desktop-Umgebung verzichtet und lieber selbst Hand anlegt, kann auf dunst zurückgreifen, welches, nebenbei gesagt, auch sehr gut zu dmenu paßt.

notify-send(1) kann mit smartd(8) genutzt werden. Schlüssel dazu ist die Konfigurationsdirektive -M exec, mit der man smartd(8) ein alternatives E-Mail-Programm übergeben kann. Statt für den Versand von E-Mails kann man dies zur Erzeugung einer Desktop-Benachrichtigung mithilfe von notify-send(1) nutzen. Dazu lege man ein Skript /usr/local/bin/smartd-message mit folgendem Inhalt an (wobei johndoe durch den eigenen Nutzernamen zu ersetzen ist):

#!/bin/bash
su johndoe -c "/usr/bin/notify-send -i drive-harddisk -u critical 'SMART-Fehler auf $SMARTD_DEVICE entdeckt (Diagnose: $SMARTD_FAILTYPE)'"

Zunächst wechselt dieses Skript mit su(1) auf den Nutzer, dem die Desktop-Benachrichtigung angezeigt werden soll; das Beispiel geht von einem Einbenutzer-System aus und müßte für Mehrbenutzersysteme entsprechend angepaßt werden. Aufgerufen wird sodann notify-send(1), wobei folgendes gilt:

Man weise diesem Skript Auführ-Berechtigung zu:

# chmod a+x /usr/local/bin/smartd-message

Zuletzt ist smartd(8) zu konfigurieren. Dazu bearbeite man die /etc/smartd.conf so, daß in allen Fällen, in denen eine Option -m für eine Gerätezeile übergeben wird, auch eine Option -M exec mit dem Pfad zu dem soeben angelegten Skript hinzutritt. Dies kann aussehen wie folgt:

/dev/sda -a -n standby -m johndoe -M exec /usr/local/bin/smartd-message

Die Übergabe von -m ist notwendig, weil smartd(8) -M sonst ignoriert. Theoretisch könnte man den Wert von -m im Skript auswerten, weil smartd(8) ihn als Umgebungsvariable übergibt, aber das oben gezeigte Skript macht davon keinen Gebrauch, d.h. der Wert von -m (johndoe) wird in dieser Konfiguration ignoriert und kann auf eine beliebige Zeichenkette gesetzt werden.

Nach einem Neustart des Daemons wird smartd(8) statt E-Mails nunmehr Desktop-Benachrichtigungen verschicken. Testen kann man das, indem man zusätzlich noch -M test an die Konfiguration anfügt:

/dev/sda -a -n standby -m johndoe -M exec /usr/local/bin/smartd-message -M test

smartd(8) verschickt dann beim Start eine „E-Mail“ (= Desktop-Benachrichtigung). Wird diese angezeigt, ist die Konfiguration erfolgreich und die Option -M test kann wieder aus der Konfiguration entfernt werden.