Synchronisation de l’heure Ubuntu avec un GNSS USB

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
Brancher le GNSS USB

Vérifiez le port attribué avec :

[57964.763937] cdc_acm 2-3:1.0: ttyACM0: USB ACM device

Notez le port, par exemple : /dev/ttyACM0

Configurer 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

Ca fonctionne !

Configurer Chrony pour utiliser GNSS

Ajoutez en bas du fichier :

# Source GPS via gpsd
refclock SHM 0 offset 0.5 delay 0.2 refid GPS
Vérifier la synchronisation
Activer et redémarrer les services
Verifier
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
 .-- 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
● 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.

 

En discuter sur le forum…