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
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 commandelocate
(dans le paquet « Find utilities »), de mettre à jour sa base de données à l’aide de la commandeupdatedb
puis de trouver la commandentpdate
en tapantlocate ntpdate
.
Messages
1. Mise à jour automatique de l’horloge de l’iPhone, 6 septembre 2010, 21:39, par bollee23
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
1. Mise à jour automatique de l’horloge de l’iPhone, 7 septembre 2010, 01:33, par Paul Courbis
Merci. Pour les balises, c’est {a priori} corrigé (sauf bug d’affichage du navigateur) il faut donc mettre <string>paul.courbis.horloge</string>
2. Mise à jour automatique de l’horloge de l’iPhone, 31 août 2011, 12:21
super, merci beaucoup
3. simple version, 24 septembre 2011, 19:37, par Hendrik
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