Auf dem Handy benutze ich aCalendar+ zur Verwaltung meiner Termine und die Kontakte-Anwendung von Lineage-OS. Allerdings habe ich schon öfter einen Totalverlust bei meinen Basteleien mit dem Handy erlitten, weshalb die Sicherung der Kontakte und Termine außerhalb des Handys notwendig ist. Für die Kontakte geht es recht einfach zu Fuß über die App: Im Menü gibt es den Export als vcard in den internen Speicher, von wo aus man die Datei contacts.vcf sich auf den Rechner kopieren kann.

Um auch die Termine sichern zu können und alles ohne händischen Aufwand zu erreichen, bietet sich der Abgleich mit einem CalDAV/CardDAV-Server an. Natürlich kann man auch den Google-Kalender verwenden, aber mein Ziel ist es, die Daten bei mir zu haben.

Xandikos auf dem Server

Auf dem Server wollte ich eine schlanke Lösung haben und ungern Owncloud oder Nextcloud installieren. Als Lösung habe ich Xandikos gefunden, das sowohl CardDAV als auch CalDAV mit mehreren Kalendern und Adressbüchern unterstützt. Xandios ist sehr einfach gehalten und besitzt daher weder Benutzerverwaltung noch Authentifizierung oder Verschlüsselung. Das Programm lauscht standardmäßig auf localhost:8080, so dass man angenehm einen Reverse-Proxy wie Nginx oder Apache verwenden kann, um darüber die Verschlüsselung und Authentifizierung umzusetzen.

Zur Speicherung der Daten verwendet Xandikos einfache Dateien in einem Git-Repository, so dass man auf dem Server auch eine Historie hat oder ggf. alte Zustände rekonstruieren kann.

Xandikos ist für mich ein gutes Beispiel schlanker und flexibler Software.

Startscript für Systemd

Mit dem Debian-Paket kommt leider keine Einbindung ins System, aber über Systemd kann man das recht einfach erreichen. Ich habe das Verzeichnis /var/local/xandikos erstellt (um potentiellen, zukünftigen Konflikten in /var/lib aus dem Weg zu gehen und weil /var/local bei mir automatisch im Backup enthalten ist) und mit systemctl edit --full --force xandikos.service folgende Konfigurationsdatei für Systemd angelegt. Der Einfachheit halber lasse den Dienst unter meinem Benutzerkonto laufen und ihn direkt am Netzwerk lauschen.

[Unit]
Description=Xandios CardDAV/CalDAV service
Documentation=man:xandikos(1)
After=systemd-networkd.service network.target

[Service]
Type=simple
ExecStart=/usr/bin/xandikos --defaults -l 0.0.0.0 -d /var/local/xandikos
User=joerg
Group=daemon

[Install]
WantedBy=multi-user.target

Danach den Dienst mit systemctl start xandikos starten und für den automatischen Start beim Starten des Systems mit systemctl enable xandikos aktivieren.

DAVdroid zum Übertragen auf den Server

Für den Abgleich mit dem Server habe ich auf dem Handy die App DAVdroid über F-Droid installiert. Bei der Einrichtung des Kontos habe ich die IP-Adresse des Servers mit dem Port 8080 http://10.0.0.1:8080/ verwendet und bei Benutzername und Passwort habe ich ein paar Zeichen eingegeben.

Über DAVdroid wurden Kalender und Adressbuch erkannt und ich konnte weitere Kalender und Adressbüchern hinzufügen, so dass sich Termine und Kontakte besser gliedern lassen. In aCalendar+ und Kontakte wurde die Quellen auch erkannt.

DAVdroid gleicht bei Änderungen auf dem Handy die Einträge direkt mit dem Server ab bzw. fragt regelmäßig beim Server nach dortigen Neuerungen. Über die Einstellungen von DAVdroid (nicht die des Kontos) kann man auch bestimmen, dass dies nur über ein festes WLAN passiert, sollte der Server nicht zentral über das Internet erreichbar sein.

Gesamtbewertung und Ausblick

Mit den zwei Programmen Xandikos und DAVdroid bin ich recht zügig zu einer einfachen Lösung gekommen, ohne mich durch Konfigurationen riesiger Softwarepakete quälen zu müssen. Jedoch ist dabei auch der Spielraum für einen Ausbau mit verschlüsselter Kommunikation und Authentifizierung über Nginx gegeben.

Wie und ob man diese Lösung auch für mehrere Benutzer ausbauen kann, weiß ich (noch) nicht, aber spätestens an gemeinsam genutzten Ressourcen könnte es zu Ende sein oder man nutzt die Möglichkeit von Symlinks auf die Git-Repositories in den jeweiligen Benutzerverzeichnissen auf dem Server – wenn's klapp, wäre das wieder ein Beispiel für »Einfache Lösungen skalieren«. Bei Xandikos gibt es auch Überlegungen zu Multi-User-Unterstützung.

Vorteil des Low-Level-Zugangs über Git

Da Xandikos für jeden Kalender ein Git-Repository anlegt und auch die ics-Dateien direkt auf der Festplatte liegen, kann man auf dem Server auch eingreifen und diese direkt bearbeiten. So hatte ich zum Beispiel einen Termin in einer Serie abgesagt, aber mit aCalendar+ konnte ich diesen Termin nicht wieder hinzunehmen. Im Git konnte ich aber einfach ein revert des Commits der Terminänderung vornehmen, neu synchronisieren und damit den alten Zustand erlangen.