Flux RSS des billets

Derniers billets

GCALDaemon, la solution de synchronisation

Comme pour beaucoup de personnes, le passage au payant de Spanning Sync m’avait plus que beaucoup embêté. Pour rappel, ce dernier permettait de synchroniser iCal avec le service de calendrier en ligne de la firme de Mountain View : Google Calendar.
Après maintes recherches, impossible de trouver un équivalent gratuit, jusqu’à vendredi dernier ou je suis tombé sur GCALDaemon.

Présentation du démon

GCALDaemon est un programme Java – donc indépendant de l’OS – qui permet une synchronisation dans les deux sens entre Google Calendar et tout type de calendrier compatible iCalendar. Sa fonction principale est la synchronisation de calendriers, mais GCALDaemon fait bien plus : Gmail notifier, importer un carnet d’adresse, convertisseur de feed RSS, etc.

Que me faut-il pour l’utiliser :

  1. L’envirronement Java 1.5 Runtime (ou plus récent)
  2. Un compte Gmail
  3. Une application de calendrier compatible iCal (Apple iCal, Sunbird)

Procédure d’installation

  1. Installation de GCALDaemon (Java 1.5 est requis) :
    $ cd /usr/local/sbin
    $ sudo unzip /downloads/gcaldaemon-linux-1.x.zip
    $ sudo chgrp -R admin /usr/local/sbin/GCALDaemon
    $ sudo chmod -R g+w /usr/local/sbin/GCALDaemon
    $ sudo chmod 755 /usr/local/sbin/GCALDaemon/bin/*.sh
    
  2. Afin de différencier le nouveau calendrier que l’on va créer pour être utilisé avec GCALDaemon et les fichiers relatifs au(x) calendrier(s) déjà présents dans iCal, il suffit d’appliquer un label de couleur à tous les dossiers sous ~/Library/Application Support/iCal/Sources.
  3. Lancer iCal, et créer un nouveau calendrier avec un nom distinct, par exemple ‘Google’.
  4. Quitter iCal, et aller voir le nouveau dossier sans label sous ~/Library/Application Support/iCal/Sources

    $ cd ~/Library/Application Support/iCal/Sources
    
  5. Ouvrir le fichier de configuration gcal-daemon.cfg :

    $ cd /usr/local/sbin/GCALDaemon/conf
    $ vi gcal-daemon.cfg
    
  6. Ajouter le chemin complet vers le fichier corestorage.ics du nouveau dossier sans label fraîchement crée (sans le ~ ) pour la variable file.ical.path :

    # Full path of the local iCalendar file
    file.ical.path=/Users/*/Library/Application Support/iCal/Sources/*.calendar/corestorage.ics
    
  7. Ajouter votre adresse email pour la variable file.google.username :

    # Gmail user (your full email address)
    file.google.username=example@gmail.com
    
  8. Encoder votre mot de passe Gmail à l’aide du script password-encoder.sh. Copier le mot de passe encodé :

    $ cd /usr/local/sbin/GCALDaemon/bin
    $ ./password-encoder.sh
    
  9. Ajouter votre mot de passe encodé pour la variable file.google.password :

    # Gmail password (use password encoder!)
    file.google.password=31260V7mc34jV22c
    
  10. Copier l’URI iCal de votre calendrier privé Google. Vous la trouverez dans la page de configuration de Google Calendar :
    Configuration Google Calendar
  11. Ajouter l’URI iCal pour la variable file.private.ical.url, sans le protocole et sans le nom de domaine :

    # URL (without hostname) of the Google Calendar's private ical file
    file.private.ical.url=/calendar/ical/example%40gmail.com/private-495c0f1bfg/basic.ics
    
  12. Mettre la variable file.enabled à true :

    # Enable iCalendar file listener/synchronizer
    file.enabled=true
    
  13. Démarrer GCALDaemon à l’aide de standalone-start.sh. L’affichage qui suit vous indique un fonctionnement normal :

    $ ./standalone-start.sh
    INFO | GCALDaemon V1.0 beta 8 starting...
    INFO | Local time zone is Pacific Standard Time.
    INFO | HTTP server disabled.
    INFO | RSS/ATOM feed converter disabled.
    INFO | Start listening file /Users/user/Library/.../iCal/corestorage.ics...
    INFO | File listener started successfully.
    INFO | LDAP server disabled.
    INFO | Gmail notifier disabled.
    INFO | Sendmail service disabled.
    
  14. Démarrer iCal. Les nouveaux éléments ajoutés, modifiés ou effacés à iCal seront désormais automatiquement mis-à-jour dans Google Calendar.

Démarrer le daemon automatiquement avec launchd

A ce stade, le daemon doît être lancé à la main, pour automatiser cette tâche et que GCALDaemon soit lancé à chaque démarrage de la machine, nous allons ajouter un élément au launchd d’OS X.

La procédure est la suivante :

  1. S’il n’existe pas, créer ~/Library/LaunchAgents
  2. Puis éditer, un fichier avec l’extension .plist comme suit (dans mon exemple, mon fichier s’appelle net.feub.gcaldaemon.plist) :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
    <string>net.feub.gcaldaemon</string>
    <key>ProgramArguments</key>
    <array>
    <string>/usr/local/sbin/GCALDaemon/bin/standalone-start.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    </dict>
    </plist>
    

    Télécharger le fichier .plist

  3. Démarrer le service comme ceci :

    # launchctl load ~/Library/LaunchAgents/net.feub.gcaldaemon.plist
    
  4. Et voilà, votre daemon est démarré et le sera à chaque démarrage de votre Mac.
    Je ne m’étendrai pas sur le fonctionnement de launchd qui fera certainement l’objet d’un prochain article.

    Note : cette commande launchctl permet de gérer le daemon launchd à la demande, il ne sera ensuite bien sur pas nécessaire de la taper, car launchd lancera notre script à l’ouverture de la session de l’utilisateur.

    ^.^

    • Publié dans : mac

9 réponses

  1. alex dit :

    En voilà un bon tuto! J’essaie de m’y mettre dès ce soir pour te dire si j’ai bien tout pigé. Sans pratique, c’est un peu difficile d’être critique.

  2. f. dit :

    C’est sur que c’est moins ‘direct’ que Spanning Sync, mais une fois en place ça marche. Et pourquoi pas commencer un projet Cocoa de GUI pour GCALDaemon ;) On peut rêver.

  3. alex dit :

    En voilà une bonne idée! Si tu as besoin d’aide, je m’y essaierais bien…

  4. Grégoire dit :

    Salut, c’est pas vraiment un commentaire mais plus une question…

    Vu que je suis une buse (et c’est peu dire) en prog, je me demandais si c’était possible de synchroniser plus d’un agenda avec ce programme ?

    Merci

    Greg

  5. f. dit :

    Tes questions sont les bienvenues.
    Pour te répondre, tu peux parfaitement synchroniser plusieurs calendriers, j’en ai moi-même trois.
    Si par ‘je suis une buse’, tu veux dire que GCALDaemon te fait un peu peur car il faut taquiner la ligne de commande, je te dis qu’il n’y a rien de sorcier, si tu suis tout bien pas à pas, c’est très simple, juste un peu long. Et ça marche nickel.

  6. Steph dit :

    Tu peux simplifier encore le tuto en fesant comme l’auteur sur SourceForge et inviter les utilisateur à modifier le fonctionnement launchd en utilisant l’excellent programe du Suedois Peter Borg déjà auteur de Smultron (editeur de texte ++ )  , à savoir Lingon ->  http://lingon.sourceforge.net/

  7. f. dit :

    Merci pour la précision.
    Je connaissais Lingon, mais je ne l’ai jamais essayé, ne voulant pas “m’encombrer” d’une appli cocoa de plus juste pour faire ce boulot. Je vais peut-être l’essayer quand même.

  8. Thierry dit :

    Salut, peux-tu préciser comment synchroniser plusieurs calendriers ?
    Merci.

  9. f. dit :

    Il te suffit de faire la même chose que pour ton premier calendrier, en suffixant le nom de tes variables de façon incrémentale, comme ceci :

    # Premier calendrier
    file.ical.path=/Users/*/Library/Application Support/iCal/Sources/*.calendar/corestorage.ics
    file.google.username=example@gmail.com
    file.google.password=xxxxxxxxxxxxxx
    file.private.ical.url=/calendar/ical/example@gmail.com/private-xxxxxxxxxxxxxx/basic.ics

    # Deuxième calendrier
    file.ical.path2=/Users/*/Library/Application Support/iCal/Sources/*.calendar/corestorage.ics
    file.google.username2=account@gmail.com
    file.google.password2=xxxxxxxxxxxxxx
    file.private.ical.url2=/calendar/ical/495c0f1495c0f1/private-xxxxxxxxxxxxxx/basic.ics

    # Troisième calendrier
    file.ical.path3=/Users/*/Library/Application Support/iCal/Sources/*.calendar/corestorage.ics
    file.google.username3=gmailuser@gmail.com
    file.google.password3=xxxxxxxxxxxxxx
    file.private.ical.url3=/calendar/ical/otheruser@gmail.com/private-xxxxxxxxxxxxxx/basic.ics

eXTReMe Tracker