vdirsyncer, khal et khard
— informatique, outils — ~6mn de lecture
Récemment (début novembre), je me suis mis à khal et khard pour avoir mes contacts et calendriers sur mon PC, et donc aussi à vdirsyncer pour synchroniser entre mon téléphone et mon PC. Étant donné que ça avait trainé parce que j’avais la flemme de bidouiller du fichier de config, je vais faire un billet explicatif pour réduire la charge de travail de celleux qui étaient dans mon cas. Et puis j’ai que ça à foutre de mon Noël de toute façon.
Vdirsyncer
Bon déjà, le premier truc à faire c’est configurer vdirsyncer
pour avoir les contacts et le calendrier synchro sur le PC.
Bah pour ça je vous laisse installer le bousin avec votre gestionnaire de paquets (dans mon cas, un bon vieux sudo pacman -S vdirsyncer
).
Et on est parti pour éditer le fichier ~/.config/vdirsyncer/config
CalDAV
J’ai commencé à faire ce truc pour le calendrier principalement donc je vais commencer par CalDAV. On commence par lui dire qu’est-ce qu’il faut sync
[pair calendar]
a = "calendar_remote"
b = "calendar_local"
collections = ["from a", "from b"]
↑ Donc, ce qu’il faut sync, c’est a
et b
. On verra tout à l’heure comment on définit calendar_remote
et calendar_local
.
Pour les collections, si vous voulez tous les calendriers de votre remote
et si vous voulez garder leur nom, gardez la ligne telle quelle. Sinon, la ligne est un peu plus complexe, et dans mon cas elle ressemble à ça :
collections = [["perso", "personal", "perso"], ["birthdays", "204A-5BE86680-9-54AB6500", "birthdays"], ["fac", "1A7A-5BE86280-9-10EFDBC0", "fac"], ["edt", "183C-5BEC0B00-B-75C9D80", "edt"]]
↑ C’est parce que j’utilise le CalDAV de mon registrar, Gandi, et bien que le nom des calendriers soit modifiable, leur id ne l’est pas. Hors ce que vdirsyncer va synchro c’est les id, donc si je gardais le ["from a", "from b"]
, mes calendriers locaux se seraient appelés par exemple 204A-5BE86680-9-54AB6500
et c’est pas franchement pratique.
Du coup cette ligne collections
elle se décompose comme ça : c’est une liste de triplets, et chaque triplet est de la forme [id-local, nom-remote, nom-local]. L’id-local c’est un nom qu’on veut donner à la paire pour s’y retrouver ; nom-remote, c’est le nom du calendrier distant ; et nom-local c’est le nom qu’on veut lui donner localement.
Et voilà on a fait le plus dur, le reste c’est plus compréhensible.
# Calendars also have a color property
metadata = ["displayname", "color"]
↑ Ce qu’on veut sync comme métadonnées sur nos calendriers, ici le nom et la couleur.
Et je vous parlais qu’on allait voir comment on déclare calendar_local
et calendar_remote
, nous y voilà !
[storage calendar_local]
type = "filesystem"
path = "~/.vdirsyncer/calendars/"
fileext = ".ics"
↑ Localement, on a juste besoin de lui donner où est-ce qu’on va stocker notre bousin, et sous quel format et c’est plié
[storage calendar_remote]
type = "caldav"
url = "l'url de votre calendrier"
username = "username"
password.fetch = ["command", "la-commande", "les", "arguments", "potentiels"]
↑ Remotement, il nous faut l’url du calendrier, le nom d’utilisateur, et le mot de passe, rien de bien folichon. Et comme on est pas des gorets, on met pas notre mot de passe en clair dans le fichier de configuration, donc on lui donne une commande pour aller le recupérer dans notre gestionnaire de mot de passe favori
Et puis si on est des gorets, bah on fait comme ça ↓
password = "lemotdepasse"
Et on a fini pour le CalDAV !
Passons au CardDAV, du coup
CardDAV, du coup
[pair contacts]
a = "contacts_local"
b = "contacts_remote"
collections = ["from a", "from b"]
↑ On commence comme pour CalDAV, sauf que cette fois j’ai pas besoin de collections cheloues
metadata = ["displayname"]
↑ Je synchronise que le nom de mes contacts (je vous avoue que j’ai juste copié-collé cette ligne)
[storage contacts_local]
type = "filesystem"
path = "~/.vdirsyncer/contacts/"
fileext = ".vcf"
↑ Toujours rien de folichon, c’est exactement pareil que le calendar_local
[storage contacts_remote]
type = "carddav"
url = "l'url de vos contacts"
username = "votre nom"
password.fetch = ["command", "la-commande", "arguments"]
Et voilà c’est fini, rien n’a changé pour ces bouts la
Et nous voilà finis avec vdirsyncer !
Il nous reste plus qu’à lancer un petit vdirsyncer discover
pour qu’il trouve les nouveaux trucs à sync, puis ensuite vdirsyncer sync
pour les synchroniser
À noter que si vous êtes comme moi sur ArchLinux, il faut downgrade le paquet python-idna
en version inférieur à 2.8, sinon vdirsyncer ne fonctionne pas.
Khal
Bon donc khal c’est un petit outil en ligne de commande pour gérer son calendrier. J’en suis pas archi fan parce que Python et les runtime errors débiles, mais sinon c’est un excellent outil.
Et du coup, go le configurer.
Comment ça se présente ? Je déclare un calendrier par… calendrier que j’ai, pour pouvoir choisir la couleur avec laquelle ça s’afficher. À noter le dernier type=birthdays
qui permet d’aller chercher les anniversaires dans les contacts, et ça c’est cool. ↓
[calendars]
[[perso]]
path = ~/.vdirsyncer/calendars/perso
color = dark blue
[[fac]]
path = ~/.vdirsyncer/calendars/fac
color = dark red
[[edt]]
path = ~/.vdirsyncer/calendars/edt
[[birthdays]]
path = ~/.vdirsyncer/calendars/birthdays
color = yellow
[[birthdays_contacts]]
type=birthdays
path = ~/.vdirsyncer/contacts/personal/
color = yellow
Ensuite viennent les histoires de format d’affichage et du fuseau horaire, je suis resté sur du très classique ↓
[locale]
timeformat = %H:%M
dateformat = %d/%m
longdateformat = %d/%m/%Y
datetimeformat = %d/%m %H:%M
longdatetimeformat = %d/%m/%Y %H:%M
local_timezone = Europe/Paris
Pareil, ça j’ai absolument pas touché parce que la giga flemme et ça me va très bien comme ça ↓
[view]
agenda_day_format = "{bold}{name}, {date-long}{reset}"
agenda_event_format = "{calendar-color}{cancelled}{start-end-time-style} {title}{repeat-symbol} | {location}{reset}"
bold_for_light_color = False
event_format = "{calendar-color}{cancelled}{start}-{end} {title}{repeat-symbol} | {location}{reset}"
event_view_always_visible = True
frame = color
Et enfin les petits paramètres par défaut, on s’en bat franchement les gonades ↓
[default]
default_calendar = "perso"
highlight_event_days = True
show_all_days = True
timedelta = 7d
Et c’est fini pour khal, et on attaque la dernière ligne droite, qui ne posera pas plus de souci que le reste
Khard
Allez on rentre direct dans le vif du sujet, on lui dit où aller chercher nos contacts ↓
[addressbooks]
[[contacts]]
path = ~/.vdirsyncer/contacts/personal/
Les trucs par défaut ↓
[general]
debug = no
default_action = list
editor = vim
merge_editor = vim
Et j’ai absolument pas touché au reste, j’ai laissé les commentaires qui étaient là ↓
[contact table]
# display names by first or last name: first_name / last_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# sort by first or last name: first_name / last_name
sort = last_name
# localize dates: yes / no
localize_dates = yes
[vcard]
# extend contacts with your own private objects
# these objects are stored with a leading "X-" before the object name in the vcard files
# every object label may only contain letters, digits and the - character
# example:
# private_objects = Jabber, Skype, Twitter
private_objects = Jabber, Skype, Twitter
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no
Eeeeet voilà c’est fini, normalement tout marche bien ! Et si ça marche pas, bah vous pouvez toujours passer un petit message par mail ou autre, j’essayerais de vous aider si j’ai le temps.
Il n'y a pas de commentaire sur ce blog, donc si vous voulez réagir à cet article, n'hésitez pas à venir m'en parler sur le Fediverse, Twitter ou par mail. Des bisouxes !