Synchronisation de l’heure Ubuntu avec un GNSS (GPS) USB
Ce guide explique comment configurer un GNSS USB sur Ubuntu pour synchroniser l’heure système via Chrony.
C’est particulièrement utile sur des machines sans accès à Internet ou pour les systèmes embarqués nécessitant une horloge précise sans NTP.
Matériel nécessaire
- Une clé USB GNSS / GPS compatible Linux (par exemple un module u-blox, GlobalSat BU-353S4, VK-172 ou équivalent)
- Un ordinateur ou Raspberry Pi sous Ubuntu
- Une connexion Internet pour l’installation initiale (facultative ensuite)
- Accès root ou sudo

https://s.click.aliexpress.com/e/_oDF9A44
Installer les paquets nécessaires
sudo apt update
sudo apt install gpsd gpsd-clients chrony
Brancher le GNSS USB
Vérifiez le port attribué avec :
dmesg | grep tty
[57964.763937] cdc_acm 2-3:1.0: ttyACM0: USB ACM device
Notez le port, par exemple : /dev/ttyACM0
Configurer gpsd
sudo nano /etc/default/gpsd
Remplacez ou ajustez les lignes suivantes :
START_DAEMON="true"
GPSD_OPTIONS="-n"
DEVICES="/dev/ttyACM0"
USBAUTO="true"
GPSD_SOCKET="/var/run/gpsd.sock"
Tester la réception GNSS
cgps -s

Ca fonctionne !
Configurer Chrony pour utiliser GNSS
sudo nano /etc/chrony/chrony.conf
Ajoutez en bas du fichier :
# Source GPS via gpsd
refclock SHM 0 offset 0.5 delay 0.2 refid GPS
Vérifier la synchronisation
chronyc sources -v

Activer et redémarrer les services
sudo systemctl enable gpsd
sudo systemctl restart gpsd
sudo systemctl restart chrony
sudo systemctl enable chrony
Verifier
chronyc tracking
Reference ID : B97DBE7A (ntp-nts-2.ps5.canonical.com)
Stratum : 3
Ref time (UTC) : Tue Jul 22 17:39:24 2025
System time : 0.000004856 seconds fast of NTP time
Last offset : +0.000070911 seconds
RMS offset : 0.000070911 seconds
Frequency : 0.346 ppm fast
Residual freq : +0.304 ppm
Skew : 0.140 ppm
Root delay : 0.024464320 seconds
Root dispersion : 0.000821041 seconds
Update interval : 64.8 seconds
Leap status : Normal
chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#? GPS 0 4 0 - +0ns[ +0ns] +/- 0ns
^? f4hxn-Standard-PC-i440FX> 0 8 0 - +0ns[ +0ns] +/- 0ns
^* ntp-nts-2.ps5.canonical.> 2 6 377 54 +170us[ +343us] +/- 12ms
^+ ntp-nts-3.ps5.canonical.> 2 6 377 52 +86us[ +86us] +/- 13ms
^- ntp-nts-2.ps6.canonical.> 2 6 377 52 -2358us[-2358us] +/- 74ms
^- ntp-nts-3.ps6.canonical.> 2 6 377 53 +3646us[+3646us] +/- 77ms
^- ntp-nts-1.ps6.canonical.> 2 6 377 53 +908us[ +908us] +/- 72ms
systemctl status chrony
● chrony.service - chrony, an NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chrony.service; enabled; preset: e>
Active: active (running) since Tue 2025-07-22 19:37:08 CEST; 9min ago
Invocation: 7c6eed03adc445559fe84507a9dc053a
Docs: man:chronyd(8)
man:chronyc(1)
man:chrony.conf(5)
Main PID: 1068335 (chronyd)
Tasks: 2 (limit: 3980)
Memory: 1.5M (peak: 2.7M)
CPU: 92ms
CGroup: /system.slice/chrony.service
├─1068335 /usr/sbin/chronyd -F 1
└─1068336 /usr/sbin/chronyd -F 1
Grâce à ce guide, votre système Ubuntu utilise désormais un GPS USB comme source de temps fiable via gpsd et chrony. Cette configuration est idéale pour les environnements sans accès à Internet ou pour assurer une synchronisation horaire précise de manière autonome.
Une fois en place, tout fonctionne automatiquement au démarrage, sans intervention manuelle.