La commande timedatectl de Linux vous permet de définir l’heure, la date et le fuseau horaire de votre horloge système et de votre horloge en temps réel. Prenez un moment et nous vous montrerons comment tout cela fonctionne.

Tout est relatif

Le traitement du temps par votre ordinateur est l’une de ces choses que l’on pourrait croire assez simples. Du moins, jusqu’à ce que vous commenciez à vous y intéresser.

Qu’est-ce que l’époque Unix, et comment fonctionne le temps Unix ?

L’horloge du système Linux compte le nombre de secondes depuis l’époque d’Unix. C’était à 00:00:00 le 1er janvier 1970, UTC. UTC est l’abréviation de temps universel coordonné, mais on dit généralement temps universel coordonné ou simplement temps universel. Il s’agit de la norme de temps par laquelle le monde gère et régule le temps. Les différents fuseaux horaires appliquent un décalage à l’UTC pour obtenir leur heure locale. Certains fuseaux horaires sont en avance sur l’UTC et d’autres en retard.

L’horloge système des ordinateurs Linux est basée sur un logiciel. Évidemment, elle ne peut pas fonctionner lorsque l’ordinateur est éteint. Une autre horloge, une horloge matérielle en temps réel soutenue par une batterie, est capable de fonctionner lorsque l’ordinateur est éteint. Son but est d’indiquer à l’horloge système l’heure qu’il est lorsque Linux démarre. À moins que l’accès à un serveur NTP (Network Time Protocol) ne soit possible.

Les serveurs NTP sont des serveurs qui fournissent des informations précises sur l’heure aux ordinateurs qui en font la demande. Si vous démarrez votre ordinateur ou votre portable et qu’il n’y a pas d’accès à Internet – ou qu’il n’a pas été configuré pour utiliser des serveurs NTP – l’horloge en temps réel est utilisée pour amorcer l’horloge système au lieu d’un serveur NTP.

L’horloge système est toujours en UTC. Toute application qui a besoin d’acquérir l’heure locale doit :

Accéder à l'horloge système et obtenir l'UTC
savoir dans quel fuseau horaire elle se trouve et appliquer le décalage correct
prendre en compte l'heure d'été ou d'hiver en vigueur.

La conversion de l’UTC en heure locale est effectuée par l’application, et non par l’horloge système. Ou, plus précisément, la conversion est effectuée par les bibliothèques d’heure et de date auxquelles l’application est liée. C’est pourquoi il est vital que votre ordinateur sache dans quel fuseau horaire il se trouve, quelle est l’heure UTC, combien de secondes se sont écoulées depuis l’époque Unix et si l’heure d’été est en vigueur.

Pourquoi le système systemd de Linux divise toujours après toutes ces années ?

Sur les distributions Linux basées sur systemd, nous utilisons la commande timedatectl pour voir ou modifier ces paramètres et valeurs.

Démarrer avec timedatectl

Pour voir les données et l’heure actuelles ainsi que d’autres valeurs, utilisez la commande timedatectl avec l’opérateur status.

timedatectl status

Sortie de la commande timedatectl avec l’opérateur status

En fait, vous pouvez laisser tomber l’opérateur status et vous obtiendrez toujours la même sortie.

timedatectl

Le résultat de la commande timedatectl sans opérateur.

Les deux jeux de résultats montrent :

Heure locale : L'heure que l'ordinateur pense être, en fonction de son fuseau horaire.
Temps universel : L'heure UTC.
Heure RTC : L'heure utilisée par l'horloge en temps réel. Généralement, il s'agit de l'heure UTC.
Fuseau horaire : Informations concernant le fuseau horaire configuré.
Synchronisation de l'horloge système : Si l'horloge système est synchronisée avec un serveur NTP.
Service NTP : Si le service NTP de l'ordinateur est actif.
RTC en TZ local : si l'horloge en temps réel utilise l'heure locale au lieu de l'UTC.

Vous pouvez voir combien de fuseaux horaires la commande timedatectl prend en charge en tapant :

timedatectl list-timezones | wc -l

Compter les fuseaux horaires de la commande timedatectl

C’est beaucoup plus qu’il n’y a de fuseaux horaires dans le monde. Si nous envoyons la sortie dans grep et filtrons les entrées pour « America » et l’envoyons dans less, nous pouvons faire défiler une liste plus facile à gérer.

timedatectl list-timezones | grep « America/ » | less

Filtrage des fuseaux horaires américains avec grep

En examinant cette liste, vous verrez que « America » est pris dans son sens le plus large possible. La deuxième chose que vous remarquerez est que la plupart des entrées ne sont pas des fuseaux horaires réels.

Liste des fuseaux horaires « américains » en moins

Pour aller plus loin : 5 systèmes d’exploitation Linux pour smartphones à installer sur votre appareil

Réglage du fuseau horaire

Si vous regardez la liste non filtrée des fuseaux horaires supportés par timedatectl, vous verrez des lieux ainsi que des fuseaux horaires. Pour définir un fuseau horaire, vous pouvez le spécifier par son nom comme EST ou GMT, ou vous pouvez choisir un lieu dans le même fuseau horaire que vous, comme Londres ou New York.

La réinitialisation de votre fuseau horaire n’est pas quelque chose que vous ferez souvent, mais vous avez peut-être déménagé ou vous travaillez à l’extérieur pendant un certain temps et vous voulez localiser votre ordinateur portable. Si vous devez réinitialiser votre fuseau horaire, choisissez un emplacement dans le fuseau horaire que vous souhaitez utiliser.

Nous allons régler cet ordinateur sur l’heure des montagnes, qui est le même fuseau horaire que celui d’Edmonton. Nous verrons ensuite comment les paramètres ont changé.

timedatectl set-timezone « America/Edmonton » (en anglais)

timedatectl

Nouveaux paramètres de fuseau horaire et d’heure

Notre fuseau horaire a été modifié, notre heure locale a changé et notre décalage par rapport à l’UTC a augmenté.

Réglage manuel de l’heure et de la date

Bien qu’il soit possible de régler manuellement l’heure et la date, vous n’en aurez généralement pas besoin. L’utilisation de la synchronisation temporelle et du protocole NTP est le meilleur moyen de conserver l’heure et la date exactes de votre ordinateur. Si vous essayez de modifier la date ou l’heure de votre ordinateur, vous obtiendrez probablement une erreur, vous indiquant que la synchronisation temporelle est en cours.

timedatectl set-time 10:30:00

Message d’erreur car la synchronisation du temps est en vigueur

Utilisez cette commande pour désactiver le service de synchronisation du temps :

sudo systemctl stop systemd-timesyncd.service

Vous pouvez définir l’heure, la date ou les deux en utilisant l’opérateur timedatectl set-time. Les dates sont dans l’ordre année-mois-jour YYY-MM-DD, et l’heure est dans l’ordre heures-minutes-secondes HH:MM:SS. Nous allons définir l’heure et la date avec cette commande :

timedatectl set-time « 2022-01-30 10:30:00 »

Nous allons ensuite vérifier que les changements ont bien eu lieu, en utilisant timedatectl.

timedatectl

Réglage manuel de l’heure et de la date

La date et l’heure ont changé. Notez également que l’ordinateur utilise une fausse heure UTC. On nous informe également que l’horloge du système n’est pas synchronisée et que le service NTP est inactif.

Si vous avez accès à Internet, dès que vous rétablissez le service de synchronisation de l’heure, l’heure est récupérée et tous les détails sont correctement réinitialisés.

sudo systemctl start systemd-timesyncd.service

timedatectl

Redémarrer le service NTP et restaurer les valeurs correctes de l’heure

Pour aller plus loin : 11 Distros Linux qui supportent toujours l’architecture 32 bits

RTC : UTC ou LTZ ?

Il est possible que votre horloge en temps réel soit réglée sur l’heure de votre fuseau horaire local plutôt que sur l’heure UTC – c’est possible, mais déconseillé. Si vous effectuez ce changement, vous verrez un avertissement sur les effets désastreux que cela pourrait avoir sur votre système à l’avenir.

La raison pour laquelle nous vous montrons cette méthode est que vous pourriez rencontrer une machine qui a des problèmes étranges avec ses paramètres d’heure. Voici comment remettre l’horloge en temps réel sur UTC.

Tout d’abord, nous devons la régler sur le fuseau horaire local.

timedatectl set-local-rtc 1

Ensuite, nous demanderons à timedatectl son statut.

timedatectl

Réglage de l’horloge en temps réel sur le fuseau horaire local, et l’avertissement qui l’accompagne

Je pense qu’ils ont été clairs.

Pour rétablir l’horloge en temps réel sur UTC, utilisez cette commande :

timedatectl set-local-rtc 0

Réglez-le et oubliez-le

À moins que vous n’ayez commis une erreur lors de l’installation de votre distribution Linux, ou que vous ne déménagiez, il n’y a généralement aucune raison de modifier les paramètres de votre horloge système et de votre horloge temps réel.

Réglez l’horloge système sur votre fuseau horaire, l’horloge temps réel sur UTC, et assurez-vous que votre système interroge un serveur de protocole de temps réseau. C’est l’état par défaut après la plupart des installations.

Si tout est réglé, les systèmes horaires de votre ordinateur s’occuperont d’eux-mêmes.