Kalender und Adressbücher zwischen Linux Konsole und Android synchronisieren
Geschrieben von Eric Scheibler am 14.10.2014
Kalender und Adressbücher enthalten sensible Daten. Es empfiehlt sich daher, diese nicht in die Cloud hochzuladen. Um die Datensätze dennoch zwischen mehreren Endgeräten synchron zu halten, muss ein eigener Kalender- und Adressbuchserver betrieben werden.
Dieser Artikel geht zunächst auf die Einrichtung des Kalender- und Adressbuchservers ein und stellt anschließend Kalender- und Adressbuchanwendungen für die Linux Konsole und das Android Betriebssystem vor.
Der Artikel wurde zuletzt am 13.08.2025 aktualisiert.
Inhaltsverzeichnis
Kalender- und Adressbuchserver
Bei der Wahl der Serveranwendung kann man sich unter anderem zwischen OwnCloud, Baïkal und Darwin Calendar Server entscheiden.
Ich habe Baïkal ausgewählt, weil es einfach einzurichten ist und eine simple und weitestgehdnd barrierefreie Weboberfläche mitbringt, auf der man seine Kalender und Adressbücher bequem verwalten kann.
Baïkal
Für den Betrieb von Baïkal wird ein Webserver benötigt. Ich verwende
nginx. Auf der Projektwebseite finden
sich ausführliche Tutorials für die gängigen Linux Distributionen. Daher
gehe ich auf die Einrichtung von nginx an dieser Stelle nicht weiter
ein, sondern stelle nur beispielhaft meine Konfigurationsdatei für
pim.example.org
zur Verfügung:
server {
listen *:443 ssl;
listen [::]:443 ssl;
server_name pim.example.org;
root /var/www/baikal/html;
index index.php;
charset utf-8;
# ssl
ssl_certificate /etc/letsencrypt/live/USER_NAME/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/USER_NAME/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# php
location ~ ^(.+\.php)(.*)$ {
# php socket
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
}
}
Im weiteren Verlauf dieses Tutorials wird vorausgesetzt, dass der Webserver verschlüsselte Verbindungen via SSL akzeptiert und Php Skripte ausführen kann.
Baïkal benötigt außerdem sqlite:
sudo apt install sqlite3 php-sqlite3
Nun den aktuellen Release von der Baïkal Releases Webseite herunterladen und in das Webserververzeichnis entpacken. Anschließend folgt man der Installationsanleitung auf der Baïkal Webseite.
Mit dem Besuch von https://pim.example.org/baikal/html/ startet man anschließend Baïkals Einrichtungsassistent und legt u. a. ein Admin Passwort fest. Nach Abschluss des Assistenten loggt man sich als Admin ein und legt einen neuen Benutzer an. Für diesen Benutzer lassen sich dann beliebig viele Adressbücher und Kalender erstellen.
Für später: Baïkal Upgrade Tutorial
DynDNS
Wenn der Server zu Hause betrieben wird, ist die Einrichtung einer DynDNS Domain von Vorteil. So ist der Server auch von unterwegs aus zu erreichen.
Ich nutze dafür den Dyndns Dienst meines Domainverwalters inwx.de und ddclient.
Ein Auszug aus meiner ddclient Config Datei
"/etc/ddclient.conf
mit den relevanten Details für
inwx.de:
# general
protocol=dyndns2
server=dyndns.inwx.com
ssl=yes
# pim.example.org
login='DYNDNS_USER_NAME'
password='DYNDNS_PASSWORD'
pim.example.org
Du kannst natürlich auch einen anderen Dyndns Anbieter bzw. Client verwenden oder dir Dyndns komplett sparen, indem du deinen Caldavserver direkt auf einem gemieteten Server aus der Cloud mit einer festen IP, z.B. von Hetzner installierst.
Wer hingegen gar keine Möglichkeit hat, einen eigenen Caldav/Carddav Server zu betreiben, kann auf datenschutzfreundliche Anbieter wie beispielsweise mailbox.org zurückgreifen.
Linux Konsole
In diesem Abschnitt folgen die Instruktionen für die Linux Konsole. Dieser Artikel bezieht sich dabei vornehmlich auf Debian aber die vorgestellten Programme sollten auch unter den meisten anderen Distributionen lauffähig sein.
Zunächst werden die Kalender und Adressbücher mit dem Programm vdirsyncer vom Server auf den Client übertragen. Anschließend folgt die Vorstellung einer Adressbuch-, sowie einer Kalenderanwendung. Beide Programme sind ausschließlich für die Konsole vorgesehen und benötigen keine GUI.
Weitere Infos unter pimutils.org.
Voraussetzungen
Alle im Folgenden verwendeten Programme benötigen python3 und pip.
Ich empfehle die Installation der Programme in einer python virtual environment. Auf diese Weise können auf einem System verschiedene Versionen eines Python Moduls verwendet werden, ohne dass sie sich gegenseitig stören. Des weiteren kann ein installiertes Programm rückstandslos entfernt werden. Dazu muss lediglich der Ordner mit der virtuellen Pyhton Umgebung gelöscht werden.
Zunächst wird ein Verzeichnis für die virtuellen Umgebungen angelegt:
mkdir ~/.virtualenvs
Außerdem wird ein Unterverzeichnis für die ausführbaren Dateien gebraucht:
mkdir ~/.virtualenvs/bin
Das Verzeichnis muss schließlich noch der Pfadvariable der Shell hinzugefügt werden. Beispiel für die ZSH:
vim ~/.zshrc
[...]
# add ~/.virtualenvs/bin to the path variable
if [ -d "$HOME/.virtualenvs/bin" ] ; then
PATH="$HOME/.virtualenvs/bin:$PATH"
fi
[...]
Anschlißend die virtuelle Umgebungen erstellen:
python3 -m venv ~/.virtualenvs/pim
Programme installiert man nun wie folgt:
source ~/.virtualenvs/pim/bin/activate
pip install MODULE_NAME
deactivate
Wer das Aktivieren der virtuellen Umgebung vergisst, installiert das gewünschte Python Modul stattdessen systemweit.
Vdirsyncer
Vdirsyncer dient zur Synchronisation der Termine und Kontakte zwischen Client und Server. Die Installation erfolgt durch:
source ~/.virtualenvs/pim/bin/activate
pip install Vdirsyncer
# lege den symlink an (path variable siehe oben)
ln -s ~/.virtualenvs/pim/bin/vdirsyncer ~/.virtualenvs/bin
deactivate
Als nächstes muss die Beispielkonfigurationsdatei heruntergeladen:
mkdir ~/.config/vdirsyncer/
wget -O ~/.config/vdirsyncer/config "https://raw.githubusercontent.com/pimutils/vdirsyncer/refs/heads/main/config.example"
und das Programm konfiguriert werden:
vim ~/.config/vdirsyncer/config
Der Inhalt der Config Datei sollte etwa folgendermaßen aussehen:
# An example configuration for vdirsyncer.
[general]
# A folder where vdirsyncer can store some metadata about each pair.
status_path = "~/.config/vdirsyncer/status/"
# CARDDAV
[pair contacts]
a = "contacts_local"
b = "contacts_remote"
collections = ["familie", "freunde"]
conflict_resolution = "a wins"
[storage contacts_local]
type = "filesystem"
path = "~/.contacts/"
fileext = ".vcf"
encoding = "utf-8"
[storage contacts_remote]
type = "carddav"
url = "https://pim.example.org/dav.php"
auth = "digest"
verify = "/etc/ssl/certs/ca-certificates.crt"
username = "YOURUSERNAME"
password = "YOURPASSWORD"
# CALDAV
[pair calendars]
a = "calendar_local"
b = "calendar_remote"
collections = ["calendar", "feiertage", "geburtstage"]
conflict_resolution = "a wins"
[storage calendar_local]
type = "filesystem"
path = "~/.calendars/"
fileext = ".ics"
encoding = "utf-8"
[storage calendar_remote]
type = "caldav"
url = "https://pim.example.org/dav.php"
auth = "digest"
verify = "/etc/ssl/certs/ca-certificates.crt"
username = "YOURUSERNAME"
password = "YOURPASSWORD"
In der obigen Beispielkonfiguration wurden neben dem Standardkalender bereits zwei weitere Kalender (Feiertage und Geburtstage) angelegt. Bei den URL’s müssen lediglich noch der Hostname und der verwendete Benutzername ersetzt werden. Ein abweichender Kalender- und Adressbuchserver benötigt gegebenenfalls auch ein etwas anderes URL Schema.
Sofern ein selbst signiertes SSL Zertifikat für die Absicherung des Kalenderservers verwendet wird, muss dieses clientseitig bereitgestellt werden. Dazu wird das Zertifikat auf den Client kopiert und im Ordner /etc/ssl/local abgelegt (siehe “verify” Option in der vdirsyncer Konfigurationsdatei). Der Ordner ist gegebenenfalls zuvor zu erstellen.
Nach der Konfiguration erfolgt die manuelle Synchronisation mittels:
vdirsyncer discover
vdirsyncer sync
Schließlich empfiehlt es sich, einen Cronjob anzulegen, der die Kalender und Adressbücher stündlich synchronisiert:
crontab -e
[...]
0 * * * * $HOME/.virtualenvs/bin/vdirsyncer sync
Weitere Informationen über vdirsyncer sind hier zu finden.
Khard
Khard ist eine Konsolenanwendung zur Verwaltung von Kontaktinformationen im vCard-Format. Mit khard können neue Kontakte angelegt und bisherige Kontakte angezeigt, bearbeitet und gelöscht werden. Des weiteren kann khard als externes Adressbuch in das E-Mail Programm Mutt integriert werden.
Khard wird folgendermaßen installiert:
source ~/.virtualenvs/pim/bin/activate
pip install khard
# lege den symlink an (path variable siehe oben)
ln -s ~/.virtualenvs/pim/bin/khard ~/.virtualenvs/bin
deactivate
Als nächstes muss khard’s
Beispielkonfigurationsdatei nach
~/.config/khard/khard.conf
kopiert und angepasst
werden.
Die “addressbooks” Sektion enthält die Pfade zu allen, in der vdirsyncer Config spezifizierten Adressbüchern. Zusätzlich muss u. a. der Pfad zu einem häufig verwendeten Texteditor angegeben werden. Dieser wird für die Bearbeitung der Kontakte benötigt.
Mit dem folgenden Befehl können nun alle verfügbaren Kontakte in einer Übersicht angezeigt werden:
khard list
Ohne weitere Parameter werden die Kontakte aus allen Adressbüchern angezeigt. Eine Filterung ist folgendermaßen möglich:
khard list -a familie,freunde
Auch eine Suche ist möglich:
khard list max
Die Übersicht zeigt nur die erste Telefonnummer und E-Mail Adresse an. Mit dem Details-Befehl lassen sich alle unterstützten Informationen abrufen
khard details max
Ein neuer Kontakt ist wie folgt anzulegen:
khard new -a freunde
Das Formular für das Erstellen des neuen Kontakts öffnet sich im angegebenen Texteditor. Nach dem Ausfüllen und Speichern wird der neue Kontakt angelegt. Um den Vorgang abzubrechen genügt es, beim Schließen der Datei die Änderungen nicht zu speichern.
Mit den Befehlen
khard edit
und
khard remove
kann der erstellte Kontakt bearbeitet bzw. gelöscht werden. Nach
jeder Änderung muss die Synchronisation mittels
vdirsyncer sync
manuell ausgeführt werden.
Khard kann u.a. auch als externes Adressbuch für dem E-Mail Client Mutt dienen. Alles weitere dazu findest du in khards Dokumentation.
Khal
Khal ist eine Kalenderanwendung für die Linux Konsole. Mit khal können Termine im CalDAV-Format angezeigt, erstellt und gelöscht werden. Khal greift auf die lokalen Dateien im .ics Format zu, welche zuvor von vdirsyncer übertragen wurden.
Installation:
source ~/.virtualenvs/pim/bin/activate
pip install khal
# lege den symlink an (path variable siehe oben)
ln -s ~/.virtualenvs/pim/bin/khal ~/.virtualenvs/bin
# configure
mkdir ~/.config/khal
khal configure
deactivate
Der Aufbau der Konfigurationsdatei ähnelt dem von khard und sollte selbsterklärend sein. Nach erfolgreicher Konfiguration können die Termine für die nächste Woche wie folgt angezeigt werden:
khal list today 7D
Oder auch nur ein Kalender:
khal list today 7D -a feiertage
Mit dem folgenden Befehl wird ein einmaliger Termin am 09.11. des aktuellen Jahres angelegt, welcher um 14:00 beginnt und 16:00 endet:
khal new -a calendar -l "optionaler Ort" 09.11. 14:00 16:00 Titel des Termins
Dies erstellt einen ganztägigen, sich jährlich wiederholenden Termin am 19.02.,
khal new -a geburtstage -r yearly 19.02. Geburtstag von Max
Weitere Informationen über khal gibt’s [https://lostpackets.de/khal/).
Kalender importieren
Einige Webseiten bieten ihre Kalender im CalDAV-Format als Abonnement an. Diese können dann beispielsweise unter Android oder iOS hinzugefügt werden. Dann werden sie allerdings nicht vom heimischen Kalenderserver verwaltet und stehen somit nicht unter Linux zur Verfügung. Der folgende Abschnitt beschreibt anhand eines Feiertage-Kalenderabonnements für Deutschland den Import ganzer Kalender unter Verwendung der Linux Konsole.
Unter www.feiertage-kalender.de können alle deutschen Feiertage für die nächsten Jahre im CalDAV-Format heruntergeladen werden. Das Ergebnis ist allerdings eine einzelne Datei, welche alle Termine enthält. Da der calendarserver nur einen Termin pro Datei unterstützt muss die heruntergeladene Datei zuvor aufgeteilt werden. Das kannst du hier erledigen. Wähle bei “Number of events per file:” 1 aus und hake die Checkbox “Export as single ZIP file (instead of multiple .ics files)” an.
Nun wechselst du in das lokale Verzeichnis deines Feiertagekalenders, entpackst das heruntergeladene .zip Archiv und startest die Synchronisation:
cd ~/.calendars/feiertage
unzip ~/downloads/feiertage.zip
vdirsyncer sync
Android
Android bringt von Haus aus keinen CalDAV und CardDAV Support mit. Ich nutze dafür die App DAVx⁵ aus dem Google Play Store.
Nach der Installation öffnet man die App und fügt sein oben eingerichtetes Konto für die Caldav/Carddav Synchronisation hinzu.
- Mit URL und Benutzername anmelden
- Basis-URL: https://pim.example.org/dav.php \ Benutzername und Passwort wie oben angegeben
- Nach dem erfolgreichen Anlegen des Kontos musst du noch festlegen, welche Kalender und Adressbücher ab sofort automatisch synchronisiert werden sollen.
Für das Anzeigen der synchronisierten Termine eignet sich die bereits installierte Kalender App und das zugehörige Widget für den Startbildschirm. Für die optimale Nutzung mit dem Screen Reader Talkback empfhielt sich der Wechsel des Kalenderlayouts auf “Terminübersicht.