Vdirsyncer pour synchroniser CalDAV & CardDAV sur votre poste
Si comme moi, vous avez un serveur comme Baïkal pour gérer vos contacts et vos agendas, vous vous demandez peut-être comment les synchroniser sur votre ordinateur sans utiliser une application comme Thunderbird ou Évolution…
Eh bien, récemment, j'ai découvert Vdirsyncer. Une application en ligne de commande, qui sert justement à ça. C'est l'équivalent CardDAV / CalDAV de ce qu'est OfflineIMAP ou Isync pour les boîtes courriels.
Vdirsyncer se connecte à une source distante pour importer, puis synchroniser les données en local. Les événement de votre calendrier sont par exemple, importés au format standard iCalendar (.ics). Tandis que les contacts sont des fichiers vCard (.vcf). D'autres formats sont aussi disponibles.
Si vous avez un téléphone Android, vous connaissez peut-être DAVx5, qui fait à peu près la même chose.
Des paquets d'installation sont disponibles pour les principales distributions GNU/Linux, ainsi que pour Mac OS, NetBSD, etc. Sinon, installer directement avec les gestionnaires de paquets pour python pipx ou pip.
Pour moi, c'est sous OpenBSD avec pkg_add
:
doas pkg_add -v vdirsyncer
Exemple de configuration
D'abord dans votre $HOME
, il faut créer le répertoire et fichier de
configuration de vdirsyncer:
mkdir .vdirsyncer/ && touch .vdirsyncer/config
Puis les répertoires qui acueilleront les fichiers iCalendar et vCard:
mkdir -p .calendars/nomducalendrier/
mkdir -p .contacts/nomducarnet/
Bloc CalDAV
[general]
status_path = "~/.vdirsyncer/status/"
# -------
# CALDDAV
# -------
[pair my_calendar]
a = "my_calendar_local"
b = "my_calendar_remote"
collections = ["from a", "from b"]
[storage my_calendar_local]
type = "filesystem"
path = "~/.calendars/"
fileext = ".ics"
[storage my_calendar_remote]
type = "caldav"
auth = "digest"
url = "https://monserveur.com/baikal/dav.php/calendars/mon_id/nom_du_calendrier/"
username = "mon_id"
password.fetch = ["command", "~/get-mdp-dav"]
Dans la section [general]
, il faut ajouter la propriétée
status_path
. Le dossier status
contient des fichiers qui serviront
aux métadonnées de synchronisation. Vous n'avez pas besoin de le
créer, l'application s'en charge.
La section [pair ...]
elle, décrit certaines relations ou
comportement qui serviront à la découvrabilité et la synchronisation.
Ensuite les deux autres sections sont pour les paramètres des stockages local et distant.
Pour Baikal je devais renseigner la propriété optionnelle auth
, dans
votre cas cela ne sera peut-être pas nécessaire. À vérifier.
Et finalement, plutôt que mettre le mot de passe en claire dans le
fichier de configuration, j'utilise password.fetch
, pour exécuter un
script shell qui va récupérer mon mot de passe stocker quelque part
sur ma machine:
password.fetch = ["command", "~/get-mdp-dav"]
Une fois que votre configuration vous semble au point, il vous reste à
la tester en lançant la commande discover
, comme ceci:
vdirsyncer discover
Et si par bonheur vous n'avez aucune erreur, alors il est temps de synchroniser vos données:
vdirsyncer sync
Bloc CardDAV
Bon, pour les carnets d'adresses c'est sensiblement la même chose. Il vous suffit de mettre les bons identifiants et les bons chemins:
# -------
# CARDDAV
# -------
[pair my_contacts]
a = "my_contacts_local"
b = "my_contacts_remote"
collections = ["from a", "from b"]
metadata = ["hs"]
[storage my_contacts_local]
type = "filesystem"
path = "~/.contacts/"
fileext = ".vcf"
[storage my_contacts_remote]
type = "carddav"
auth = "digest"
url = "https://monserveur.com/baikal/dav.php/addressbooks/mon_id/moncarnet/"
username = "mon_id"
password.fetch = ["command", "~/get-mdp-dav"]
Comme tout à l'heure, vous devenez lancer un vdirsyncer discover
et
un vdirsyncer sync
, lorsque votre configuration est au point.
Synchroniser à l'heure
À l'aide d'une cron job (crontab
-e
), vous pouvez lancer la synchronisation à la fréquence que vous le
souhaitez. Pour moi, c'est à l'heure pile:
0 * * * * /usr/local/bin/vdirsyncer sync
Notez que le chemin vers la commande peut différer selon le système d'exploitation.
Ma configuration complète
[general]
status_path = "~/.vdirsyncer/status/"
# -------
# CALDDAV
# -------
[pair my_calendar]
a = "my_calendar_local"
b = "my_calendar_remote"
collections = ["from a", "from b"]
[storage my_calendar_local]
type = "filesystem"
path = "~/.calendars/"
fileext = ".ics"
[storage my_calendar_remote]
type = "caldav"
auth = "digest"
url = "https://monserveur.com/baikal/dav.php/calendars/mon_id/nom_du_calendrier/"
username = "mon_id"
password.fetch = ["command", "~/get-mdp-dav"]
# -------
# CARDDAV
# -------
[pair my_contacts]
a = "my_contacts_local"
b = "my_contacts_remote"
collections = ["from a", "from b"]
metadata = ["hs"]
[storage my_contacts_local]
type = "filesystem"
path = "~/.contacts/"
fileext = ".vcf"
[storage my_contacts_remote]
type = "carddav"
auth = "digest"
url = "https://monserveur.com/baikal/dav.php/addressbooks/mon_id/moncarnet/"
username = "mon_id"
password.fetch = ["command", "~/get-mdp-dav"]
L'utilisation
Une fois que tout se synchronise bien entre votre serveur et votre ordinateur personnel, il ne vous reste plus qu'à vous amusez. Remarquez, votre utilisation de vdirsyncer peut tout simplement se limiter au fait d'avoir des copies locales de sauvegardes de votre calendrier et de cotre carnet d'adresses. Sinon, toute application pouvant tirer profit des formats iCalendar ou vCard, peut en principe interagir avec votre nouvelle installation.
Mais histoire de rester dans le domaine de la ligne commande, je peux vous en proposer deux qui sont souvent associés au nom de vdirsyncer…
Khal
Khal peut lire et écrire des événements/calendriers dans les dossiers synchronisés par vdirsyncer. Il a aussi un mode interactif qui permet de parcourir et d'éditer à la fois.
Pour avoir la liste des commandes et options consulter le site web ou
l'aide (khal --help
).
Et la configuration de base est plutôt simple, et doit être placée
dans $HOME/.config/khal/config
:
[calendars]
[[hs_calendar_local]]
path = ~/.calendars/*
type = discover
[[hs_contacts_local]]
path = ~/.contacts/*
type = discover
[locale]
timeformat = %H:%M
dateformat = %Y-%m-%d
longdateformat = %Y-%m-%d
datetimeformat = %Y-%m-%d %H:%M
longdatetimeformat = %Y-%m-%d %H:%M
[default]
default_calendar = default
Khard
Bon vous l'aurez deviné, Khard est un gestionnaire de carnet d'adresses. À l'instar de Khard, il permet de lister et d'éditer. Sa configuration est dans la même veine que ce que nous avons vu jusqu'à maintenant:
[addressbooks]
[[default]]
path = ~/.contacts/default/
[general]
debug = no
default_action = list
editor = emacsclient, -r, -a, emacs,
merge_editor = vimdiff
[contact table]
display = first_name
group_by_addressbook = no
reverse = no
show_nicknames = no
show_uids = yes
show_kinds = no
sort = last_name
localize_dates = yes
preferred_phone_number_type = pref, cell, home
preferred_email_address_type = pref, work, home
Conclusion
Je ne suis pas encore un utilisateur de longue date, mais je suis enthousiaste par la découverte de vdirsyncer. Tout simplement parce que je cherchais ce genre d'outil depuis un certain temps. L'utilisation de formats simples et standardisés est un gros plus lorsqu'on veut interagir avec ses données sous plusieurs plateformes et applications.
Sinon je suis un utilisateur d'Emacs, entre autres pour lire et rédiger mes courriels (mu4e) et tenir des todo lists (org-mode). Et j'ai découvert deux extensions pour cet environnement, qui interfacent Khal et Khard… Ce qui fera peut-être l'objet d'une suite à ce billet.