Für E-Mails gibt es Offlineimap, um Mails von Servern auf den lokalen Rechner herunterzuladen und sie mit dem Server synchron zu haben. Wie man sich offlineimap und mutt mit IMAP einrichtet, erkläre ich in einem anderen Blog-Post.

Hier folgt nun die Erklärung, wie man Kontakte von ownCloud auf den lokalen Rechner synchronisiert. Dazu wird, analog zum Maildir lokal ein Verzeichnis von ical- und vCard-Dateien angelegt, auf die man mit verschiedenen Clients zugreifen kann. Außerdem erkläre ich die Einrichtung von Clients für die Kommandozeile (cli) und die Integration in mutt.

Voraussetzungen

Zuallererst benötigen wir den SSL-Fingerprint des entfernten Servers. Wer sich ein kostenpflichtiges SSL-Zertifikat gekauft hat, kann diesen Schritt überspringen – alle anderen und wer wirklich auf Nummer sicher gehen möchte, können jedoch den Fingerprint des Zertifikats in der Konfiguration schon im Vorfeld festlegen.

In der Bildergalerie ist vorgeführt, wie man den Fingerprint mit Firefox ermittelt:

SSL Fingerprint

Bitte den SHA1-Fingerabdruck gut notieren.

Die Anleitung ab sofort basiert auf Debian 8.1, funktioniert genau so aber auch unter Ubuntu. Wer eine andere Distribution einsetzt, muss die Kommandos natürlich entsprechend anpassen.

Wir brauchen:

  • virtualenvwrapper um die Python-Bibliotheken und -Programme vom restlichen System fernzuhalten
  • lxml
  • python
  • openssl
  • xslt1
  • Compiler usw.

Um diese Pakete unter Debian zu installieren, genügt folgender Befehl:

apt-get install virtualenvwrapper libxml2-dev python-dev libssl-dev libxslt1-dev build-essential

Nachdem die auf dem System notwendigen Bibliotheken so installiert wurden, erstellen wir die abgeschlossene Python-Umgebung für die Programme. Wir verwenden dafür virtualenv. Dadurch haben wir den Vorteil, dass die zu installierenden Bibliotheken und Programme unabhängig von den restlichen auf dem System laufen können und wir so weder Unordnung im System verursachen noch in Abhängigkeitsprobleme und Versionskonflikte kommen.

Um die virtuelle Umgebung zu erstellen und die Programme zu installieren, verwenden wir den folgenden Befehl:

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
mkvirtualenv pim
pip install vdirsyncer keyring khal khard

Installiert werden vdirsyncer zum Synchronisieren der PIM-Dateien, keyring, um Passwörter statt unsicher in der Konfigurationsdatei lieber sicher im system-eigenen Passwortspeicher ablegen zu können und die Beiden Programme khal und khard, zum Zugriff auf den Kalender bzw. die Kontakte.

Die Befehle sind allerdings nur innerhalb der isolierten Python-Umgebung verfügbar. Um sie auch außerhalb zur Verfügung zu stellen, müssen kleine Änderungen am Suchpfad vorgenommen werden:

mkdir ~/.bin/
ln -s ~/.virtualenvs/pim/bin/{vdirsyncer,khal,khard,ikhal} ~/.bin/
echo PATH="~/.bin/:$PATH" >> ~/.bashrc

Konfiguration

Zunächst erstellen wir ndie notwendigen Verzeichnisse:

mkdir -p ~/.config/{vdirsyncer,khal,khard}
mkdir -p ~/.local/share/vdirsyncer

Es folgt die Konfiguration der Synchronisation. Dazu bearbeiten wir ~/.config/vdirsyncer/config. Dabei ist das folgende Beispiel natürlich den eigenen Bedürfnissen anzupassen:

[general]
status_path = ~/.local/share/vdirsyncer/

[pair Kontakte]
a = kontakte_lokal
b = kontakte_remote
collections = ["from b"]

[storage kontakte_lokal]
type = filesystem
path = ~/.pim/kontakte/
fileext = .vcf

[storage kontakte_remote]
type = carddav
url = https://URL-ZUM-OWNCLOUD-SERVER/remote.php/carddav/
verify_fingerprint = "SHA1-FINGERPRINT" # kann man auch rauslassen, wenn man ein SSL-Zertifikat gekauft hat
username = OWNCLOUD-USERNAME

[pair Kalender]
a = kalender_lokal
b = kalender_remote
collections = ["from b"]

[storage kalender_lokal]
type = filesystem
path = ~/.pim/kalender/
fileext = .ics

[storage kalender_remote]
type = caldav
url = https://URL-ZUM-OWNCLOUD-SERVER/remote.php/caldav/
username = OWNCLOUD-USERNAME
verify_fingerprint = "SHA1-FINGERPRINT"

Um die Konfiguration zu testen und die verfügbaren Adressbücher und Kontaktlisten abzuspeichern, verwenden wir:

vdirsync discover

Dabei wird auch das Passwort für die Synchronisation abgefragt, was gegebenenfalls im Passwortspeicher des Systems hinterlegt wird. Während des Vorgangs werden auch einige Fehlermeldungen angezeigt, nach denen verschiedene Verzeichnisse nicht existieren. Die Frage, ob diese erstellt werden sollen, muss natürlich mit Ja beantwortet werden.

Hat alles ohne weitere Schwierigkeiten geklappt, können sogleich alle Kontakte und Termine synchronisiert werden:

vdirsyncer sync

Jetzt sollten in ~/.pim/kontakte und ~/.pim/kalender Verzeichnisse mit den jeweiligen Daten liegen. Um auf diese bequem von der Kommandozeile aus zugreifen zu können, konfigurieren wir nun khal und khard. Die Namen der jeweiligen finden wir auf der Kommandozeile heraus:

find ~/.pim -maxdepth 2 -mindepth 2 -type d|cut -d'/' -f2,3|sed 's/\//: /'

Zu bearbeiten sind als nächstes die Konfigurationsdateien. Wie immer sind sie an die eigenen Bedürfnisse anzupassen:

Für khal:

[calendars]
    [[default]]
    path = ~/.pim/kalender/defaultcalendar/
    color = light red

    [[geburtstage]]
    path = ~/.pim/kalender/contact_birthdays/
    color = yellow
    readonly = true

für khard:

[addressbooks]
    [[kontakte]]
    path = ~/.pim/kontakte/kontakte/

[general]
editor = /usr/bin/vim
default_country = Germany
default_action = list
show_nicknames = no

Die Namen der jeweiligen Sektionen zwischen doppelten eckigen Klammern, also etwa [[kontakte]] entsprechden der Ausgabe des vorhin ausgeführten find-Befehls.

Verwendung

Synchronisiert werden Kontakte und Kalender mit

vdirsyncer sync

Der Kalender kann einmalig angezeigt werden mit khal oder im interaktiven Modus mit ikhal verwendet werden. Kontakte sind eher zum Durchsuchen gedacht, etwa so:

khard -s Heinle

mutt

Um die synchronisierten Kontakte bequem direkt aus mutt verwenden zu können, muss die Konfiguration von “mutt` angepasst werden. Die folgenden Änderungen sind an ~/.muttrc vorzunehmen:

set query_command = "khard mutt --search '%s'"
macro index, pager A \
  "<pipe-message>khard add-email<return>" \
  "add the sender email address to khard"

Andere Vorkommnisse von query_command müssen natürlich gelöscht oder auskommentiert werden. Wer meine Anleitung zum Betrieb von mutt verwendet hat, nimmt die erste Änderung in ~/.mutt/config.d/account vor, löscht set_query_command aus ~/.mutt/config.d/gmail und fügt die zweite Änderung in ~/.mutt/config.d/bindings hinzu.

Nun können aus mutt mit der Taste Q (großes Q!) Adressen gesucht werden und mit A (großes A!) aus der Mail-Übersicht oder einer Mail heraus Adressen zum Adressbuch hinzugefügt werden.