Mutt mit offlineimap synchronisiert sehr praktisch Mails von IMAP auf den lokalen Rechner. Wünschenswerte wäre auch, Kalender und Kontakte ebenfalls von Servern auf den Rechner zu synchronisieren und so auch den Bestand mit dem Smartphone synchron zu halten, wenn das den selben Server nutzt. Dafür eignen sich CalDAV und CardDAV.

Voraussetzungen

Diese Anleitung ist nur für Linux und wohl auch für diejenigen am hilfreichsten, die gerne alles auf der Kommandozeile machen. Die Befehle sind erst mal alle für Ubuntu 16.04 geschrieben, wer was anderes einsetzt, kennt sich aber sicher mit den jeweiligen Befehlen für die eigene Distribution aus.

Weitere Voraussetzung ist, dass der Server, gegen den man synchronisieren möchte, CalDAV und CardDAV anbietet. Das ist z.B. bei GMail der Fall, bei ownCloud/nextCloud, SoGo und sogar bei Microsoft Exchange-Servern, wenn man DavMail dazwischenschaltet.

Installation

Die drei zugrundeliegenen Programme basieren allesamt auf Python. Dabei bietet es sich dann an, ein virtualenv für das Projekt anzulegen. Dadurch werden die Python-Pakete in ihren neuesten Versionen heruntergeladen, aber in eine eigene lokale Umgebung installiert, damit nicht das System von wild installierten Paketen durcheinander gebracht wird.

sudo apt-get install virtualenv
mkdir -p ~/.virtualenvs
virtualenv -p python3 ~/.virtualenvs/pim
~/.virtualenvs/pim/bin/pip install khal khard vdirsyncer

PATH nicht vergessen

Um nicht jedes Mal den vollen Pfad zu vdirsyncer, khal und khard angeben zu müssen, sollte noch ein Eintrag in der PATH-Variablen zur .bashrc hinzugefügt werden:

export PATH=$PATH:~/.virtualenvs/pim/bin

Konfiguration

Das Projekt besteht aus mehreren Komponenten. vdirsyncer synchronisiert die Daten eines CalDAV/CardDAV-Accounts mit lokalen Verzeichnissen voller .ics- und .vcf-Dateien. Dadurch werden Kontakte und Termine fast universell lesbar, auch mit den beiden bereits installierten Programmen khal für Kalender und khard für Kontakte.

vdirsyncer

Die Konfiguration wird im Heimverzeichnis angelegt, nämlich in der Datei ~/.config/vdirsyncer/config. Wer schon mal offlineimap konfiguriert hat, wird sich schnell in der Konfiguration zurechtfinden:

Kontakte

[general]
status_path = ~/.config/vdirsyncer/status/

[pair privat_kontakte]
a = "privat_kontakte_lokal"
b = "privat_kontakte_remote"
collections = ["from a", "from b"]

[storage privat_kontakte_lokal]
type = "filesystem"
path = "~/.pim/contacts"
fileext = ".vcf"

[storage privat_kontakte_remote]
type = "carddav"
url = "http://example.com/carddav/url"
auth = "basic"
username = "[email protected]"
password = "password"

Diese Konfiguration ist natürlich anzupassen. In der URL muss hier dann auch die eigene Mailadresse eingetragen werden. Benutzername und Passwort bei username bzw. password sind natürlich auch korrekt zu hinterlegen. Möchte man dabei keine Passwörter im Klartext in der Konfigurationsdatei hinterlegen, kann man die Anleitung zur Verwendung von Passwortspeichern auf der Homepage von vdirsyncer befolgen, um das Passwort aus dem systemeigenen Passwortspeicher (z.B. gnome-keyring) abzufragen.

Kalender

Die Konfiguration der Kalender-Synchronisation verläuft ähnlich. In die selbe Datei ~/.config/vdirsyncer/config ist also zu schreiben:

[pair privat_kalender]
a = "privat_kalender_lokal"
b = "privat_kalender_remote"
collections = ["from a", "from b"]
metadata = ["color"]

[storage privat_kalender_lokal]
type = "filesystem"
path = "~/.pim/calendars/"
fileext = ".ics"

[storage privat_kalender_remote]
type = "caldav"
url = "http://example.com/caldav/url"
auth = "basic"
username = "[email protected]"
password = "password"

Konfiguration testen

Um die Konfiguration zu testen und die Ordnerstruktur für die verschiedenen hinterlegen Kalender anzulegen, sowie die Kalender-Farben herunterzuladen, sind einige Befehle einmalig nötig:

vdirsyncer discover
vdirsyncer metasync

Synchronisieren!

Und los! Kalendereinträge und Kontakte werden wie folgt synchronisiert:

vdirsyncer sync

Frontends

Für die Kommandozeile gibt es zwei recht stabile Frontends: khal und khard, die haben wir bereits installiert.

Khal für Kalender

Die Basiskonfiguration für khal wird interaktiv vorgenommen:

khal configure

Die gestellten Fragen sind selbsterklärend. Obwohl die Einrichtung zwar die Verwendung von vdirsyncer erkennt, muss im Anschluss dennoch die Sammlung der Kalender angepasst werden, so dass in der Datei ~/.config/khal/config die Sektion [calendars] wie folgt aussieht:

[calendars]

[[calendars]]
path = ~/.pim/calendars/*
type = discover

Der Eintrag, welcher auf den Pfad der Kontakte verweist, sollte gelöscht werden. Die Sektion [locale] kann bleiben, wie sie ist.

Khard für Kontakte

Die Konfiguration für khard läuft über die Konfigurationsdatei ~/.config/khard/khard.conf

[addressbooks]
[[personal]]
path = ~/.pim/contacts/personal/

[general]
debug = no
default_action = list
editor = vim
merge_editor = vimdiff

[contact table]
# display names by first or last name: first_name / last_name
display = first_name
show_nicknames = no
# sort by first or last name: first_name / last_name
sort = last_name

[vcard]
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = yes

Interessant ist wieder die Sektion [addressbooks]. Hier muss pro Adressbuch auf dem Server eine Sektion nach dem folgenden Schema angelegt werden:

[[personal]]
path = ~/.pim/contacts/personal

Wie genau die Adressbücher und deren Pfade aussehen, findet man am besten über das Dateisystem heraus:

ls ~/.pim/contacts/

Jeder Unterordner repräsentiert ein Adressbuch auf dem Server. Gibt es keine Unterordner, gibt man für path nur ~/.pim/contacts/ an.

Benutzung

Synchronisation

Wie oben schon erwähnt, sollte man vdirsyncer in regelmäßigen Abständen laufen lassen. Dazu bietet sich natürlich ein cronjob oder ein systemd timer an, wenn man das nicht jedes Mal von Hand machen möchte. Hat man neue Kalender hinzugefügt, sollte vdirsyncer discover && vdirsyncer metasync ausgeführt werden. Hat man neue Adressbücher auf dem Server hinzugefügt, sollte auch vdirsyncer discover ausgeführt und anschließend wie oben beschrieben die Konfiguration angepasst werden.

Der Befehl zum Starten einer Synchronisation lautet schlicht vdirsyncer sync.

Kalender

Möchte man nur schnell auf der Kommandozeile sehen, was in der nächsten Zeit so los ist, genügt die Eingabe khal.

Für eine interaktive Oberfläche verwendet man stattdessen ikhal.

Um Funktionen wie Suche oder den Import aus einer .ics-Datei direkt aufzurufen, bietet khal einige Schalter. Die erklären sich ganz gut von selbst in der Hilfe-Funktion: khal --help.

Kontakte

Etwas weniger poliert ist khard, wobei das Tool auch mit etwas mehr Komplexität umgehen muss. Es gibt hier keine interaktive Funktion, es passiert alles auf der Kommandozeile:

  • Liste aller Kontakte: khard
  • Suche in den Kontakten: khard ls suchbegriff
  • Neuen Kontakt anlegen: khard new
  • Liste aller Befehle: khard --help

mutt

Verwendet man mutt für Mails, bietet sich eine Integration von khard als Adressbuch an. Dazu sind folgende Konfigurationseinstellungen in der .muttrc sinnvoll:

set query_command= "khard email --parsable --search-in-source-files %s"
bind editor <Tab> complete-query
bind editor ^T    complete
macro index,pager A \
    "<pipe-message>khard add-email<return>" \
        "add the sender email address to khard"

Beim Eintippen der Mailadresse beim Senden einer neuen Mail kann dann auch Tab-Vervollständigung genutzt werden. Drückt man entweder in der Liste der Mails oder beim Betrachten einer Mail A, fügt man die markierte Mailadresse als neuen Kontakt hinzu.