Um am PC über das Festnetz zu telefonieren verwende ich das Linux-Programm Twinkle. Es ist so konfiguriert, dass es auf die FritzBox als VoIP-Telefon zugreift.
Was mir bis jetzt gefehlt hat, war ein Zugriff von Twinkle auf meine Kontakte im Nextcloud. Mit vdirsyncer und einem kleinen Skript klappt dies jetzt auch.
Hier eine kurze Anleitung.
vdirsyncer
Um die Kontakte lokal als .vcf-Datei auf meinen Rechner zu bekommen, nutze ich vdirsyncer. Die Installation ist bei den meisten Linux-Distributionen mit
sudo apt-get install vdirsyncer
schnell erledigt. Anschließend muss die Konfiguration in der Datei ~/.config/vdirsyncer/config angelegt werden.
[general]
status_path = "~/.vdirsyncer/status/"
[pair kontakte]
a = "kontakte_lokal"
b = "kontakte_remote"
collections = ["from a", "from b"]
[storage kontakte_lokal]
type = "filesystem"
path = "~/.pim/contacts"
fileext = ".vcf"
[storage kontakte_remote]
type = "carddav"
url = "https://SERVER"
auth = "basic"
username = "USER"
password = "PASSWORT"
read_only = true
Über pair werden die lokalen mit den Server-Kontakten zur Synchronisation verknüpft. Die storage-Einträge legen den Speicherort und den Zugriff darauf fest. Um sicher zu gehen, dass die Kontakte auf dem Server nicht überschrieben werden, habe ich sie mit „read_only“ versehen.
Falls der Server ein selbst-signiertes Zertifikat verwendet, kann man über den verify_fingerprint die Zertifikatsprüfung umgehen.
Hier gibt es eine detaillierte Beschreibung von vdirsyncer.
Vor der Synchronisation lässt man über
vdirsyncer discover
den Server nach Adressbüchern durchsuchen. Bei erstmaliger Ausführung muss man bestätigen, dass das oder die Adressbücher lokal angelegt werden.
Die eigentliche Synchronisation startet man mit dem Befehl
vdirsyncer sync
Nun liegen die Kontakte lokal unter ~/.pim/contacts/<name_des_adressbuchs>/ als .vcf-Dateien.
Erstellen des Twinkle-Adressbuchs
Das Adressbuch von Twinkle ist in der Datei ~/.twinkle/twinkle.ab zu finden. Jede Zeile stellt einen Eintrag dar.
# first_name|infix_name|last_name|sip_address|remark
Für das Parsen der .vcf-Dateien und das Erstellen der Adressbuch-Datei habe ich mir ein kleines Skript erstellt.
#!/bin/bash
# Ermittelt Vorname und Nachname in einer vcf-Datei, die als Parameter übergeben wird
function finde_name() {
datei_suche=$1
nachname_gefunden=`awk -F: '{ if ($1=="N") {print $2}}' $datei_suche | head -1 | cut -d';' -f 1|tr -d "\015"`
vorname_gefunden=`awk -F: '{ if ($1=="N") {print $2}}' $datei_suche | head -1 | cut -d';' -f 2|tr -d "\015"`
}
# Holen der vcf-Dateien vom Server
vdirsyncer sync
# Datei-Aufbau als erste Zeile schreiben
echo '# first_name|infix_name|last_name|sip_address|remark' > ~/.twinkle/twinkle.ab
# Durch alle vcf-Dateien laufen
for file in $(ls ~/.pim/contacts/contacts/*.vcf); do
# Vor- und Nachname finden
finde_name "$file"
# Alle Telefonnummern suchen
for nummer_gefunden in $(awk -F\; '{ if ($1=="TEL") {print $2 $3}}' $file | cut -d':' -f 2|tr -d [:blank:]|tr -d "\015"); do
# Jede Telefonnummer als einzelnen Eintrag in das Telefonbuch schreiben
echo "$vorname_gefunden||$nachname_gefunden|sip:$nummer_gefunden@fritz.box|" >> ~/.twinkle/twinkle.ab
done
done
Zum Ermitteln des Kontakt-Namens verwendet das Skript den Eintrag N in der vcf-Datei. Dies entspricht dem detaillierten Namen. Der „friendly name“ FN in den Kontakten wird ignoriert.
In der Zeile, in der der Adressbucheintrag geschrieben wird, muss fritz.box gegebenenfalls durch den Sip-Server ersetzt werden.
Achtung! Das Skript überschreibt beim Ausführen das Twinkle-Adressbuch.