Accueil > Divers (et d’été) > Informatique > Autour de l’Iphone > Mise à jour automatique de l’horloge de l’iPhone

Mise à jour automatique de l’horloge de l’iPhone

dimanche 22 août 2010, par Paul Courbis

Il est facile de faire en sorte que votre iPhone se synchronise régulièrement à un serveur ntp (Network Time Protocol) pour corriger les dérives de l’horloge interne. Voici comment procéder...

Prérequis

  • un iPhone jailbreaké ;
  • un accès ssh à l’iPhone (il faut installer le package OpenSsh dans Cydia, disposer d’un client ssh sur votre machine de bureau et connecter les deux sur le même réseau) ;
  • un éditeur de fichiers textes sur l’iPhone (vim, disponible sur Cydia par exemple) ou un logiciel de transfert de fichiers sftp (pour éditer les fichiers sur votre PC avant de les télécharger sur le téléphone).
    
    

    Installation

  • Commencer par installer le logiciel « ntpdate » disponible sur Cydia (source BigBoss). Il s’agit d’un logiciel graphique permettant de régler manuellement l’horloge de l’iPhone mais qui installe aussi l’utilitaire « ntpdate » (commande en ligne) ;
  • Connectez vous à votre iPhone sous root via ssh (mot de passe par défaut : alpine) et créez le fichier /var/root/ReglageHorloge contenant :
    #!/bin/sh
    DIR=/private/var/stash/Applications/NTPdate.app/bin
    $DIR/ntpdate ntp1.jussieu.fr
  • Si vous voulez conserver une trace des mises à jour, vous pouvez utiliser la version suivante qui conservera l’historique des ajustements de l’horloge dans le fichier /var/root/ntpdate.log :
    #!/bin/sh
    DIR=/private/var/stash/Applications/NTPdate.app/bin
    $DIR/ntpdate ntp1.jussieu.fr >> /var/root/ntpdate.log 2>&1
  • Rendez ce script exécutable via la commande :

       chmod a+x  /var/root/ReglageHorloge

  • A ce stade, vous pouvez en tester le fonctionnement en tapant en ligne de commande : /var/root/ReglageHorloge
  • Créez le fichier /Library/LaunchDaemons/paul.courbis.horloge.plist contenant :
    <?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>paul.courbis.horloge</string>
       <key>ProgramArguments</key>
       <array>
         <string>/var/root/ReglageHorloge</string>
       </array>
       <key>StartCalendarInterval</key>
       <dict>
         <key>Minute</key>
         <integer>0</integer>
       </dict>
     </dict>
    </plist>

    ATTENTION : il semble que certains navigateurs (comme Chrome) affichent parfois incorrectement le code ci-dessus en omettant d’afficher certaines balises. Le texte « paul.courbis.horloge » doir être encadré par des balises ouvrantes et fermantes de type « string » soit <string>paul.courbis.horloge</string>.

  • Activez cette tâche planifiée par la commande (en une seule ligne)
    launchctl load /Library/LaunchDaemons/paul.courbis.horloge.plist

Dorénavant votre iPhone se connectera toutes les heures (à l’heure pile) pour synchroniser l’horloge avec le serveur ntp de Jussieu....

Vous pouvez changer la fréquence de cette mise à jour en modifiant le bloc :

<dict>
 <key>Minute</key>
 <integer>0</integer>
</dict>

Par exemple en le remplaçant par

<dict>
 <key>Hour</key>
 <integer>7</integer>
 <key>Minute</key>
 <integer>30</integer>
</dict>

Pour une connexion tous les matins à 7 heures 30 minutes.

Ou par

<array>
 <dict>
   <key>Hour</key>
   <integer>7</integer>
   <key>Minute</key>
   <integer>30</integer>
 </dict>
 <dict>
   <key>Hour</key>
   <integer>19</integer>
   <key>Minute</key>
   <integer>30</integer>
 </dict>
</array>

Pour une synchronisation le matin à 7 heures 30 et le soir à 19 heures 30...

Remarques :

  • en cas de modification du fichier plist, lancer la commande :
    launchctl unload <p>/Library/LaunchDaemons/paul.courbis.horloge.plist
    avant de recharger le job par :
    launchctl load /Library/LaunchDaemons/paul.courbis.horloge.plist
  • selon les versions d’iOS, le chemin d’accès à la commande ntpdate peut varier. Le plus simple est d’installer la commande locate (dans le paquet « Find utilities »), de mettre à jour sa base de données à l’aide de la commande updatedb puis de trouver la commande ntpdate en tapant locate ntpdate.

Messages

  • Bonjour, et merci pour ce tuto très sympa.

    Une petite remarque : dans le fichier .plist, il manque les balises < string > et < /string > autour de « paul.courbis.horloge », sinon c’est nickel !

    merci

  • Hello ! Sorry, I don’t speak any French but I figure you could run this through some translator :

    The above is much easier without the shell script. Just create a .plist file like above but change the following :

    under <key>ProgramArguments</key> put

    <array>
    <string>/private/var/stash/Applications/NTPdate.app/bin/ntpdate</string>
    <string>time.fu-berlin.de</string>
    </array>

    The first <string> argument is the command you want to run the second is the parameter being used (in our case the time server you want to synchronise with).

    If you want logging, add the following :

    <key>StandardErrorPath</key>
    <string>/var/root/ntperror.log</string>
    <key>StandardOutPath</key>
    <string>/var/root/ntpout.log</string>

    Instead of specifying a time to run, you can set an interval :
    Remove the <key>StartCalenderInterval</key> section and add the following :

    <key>StartInterval</key>
    <integer>3600</integer>

    3600 means this will run every 3600 seconds (= 1 hour).

    You can also set

    <key>RunAtLoad</key>
    <true/>

    which means (if I understood correctly) the program will be run when you boot your iphone. I am not sure if this will actually work because your phone might not be connected to the internet at the time this job is first run. alternatively you could create a second plist file with a different Label and an interval of maybe 120 seconds that is set to only run once with :
    <key>LaunchOnlyOnce</key>
    <true/>

    so that the job is run once on boot but with a delay of XXX seconds. (Don’t use RunAtLoad in the second script)

    For further references look at the man page for launchd.plist
    http://developer.apple.com/library/...

    Cheers

    Hendrik

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Les spams donneront systématiquement lieu à dépôt de plainte. Les messages peu aimables ou comportant trop de fautes d'orthographe seront purement et simplement supprimés sans publication. Aucune obligation de publication ne pourra être opposée au webmaster, sauf éventuel droit de réponse dûment justifié.
ipv6 ready ipv6 test
Suivre ce site :
Recommander cette page :
Bookmark and Share
Traduire :