Espace tutos dev’ & informatique 🐧

Débloquer la modification de l’heure des machines virtuelles VirtualBox

Publié le
Article sur comment désactiver la synchronisation du temps entre hôte et invité dans Virtualbox

Introduction

J’ai récemment eu à tester le comportement d’une application à différentes dates dans une machine virtuelle VirtualBox. Cela aurait dû être aussi simple que changer l’heure du système virtuel, lancer le logiciel et tester, mais en fait non 😅

Pour vous éviter à votre tour de perdre votre temps à comprendre pourquoi la machine virtuelle refuse de changer d’heure malgré vos réglages, lisez donc cet article.

Note : les commandes ont été testées dans VirtualBox 6.1.30, avec un hôte et un invité Windows 10

Help, je n’arrive pas à changer l’heure de ma machine virtuelle

Stopper la récupération de l’heure sur internet dans la VM

Avant de regarder les spécificités de VirtualBox, il est important de s’assurer que le système d’exploitation de la machine virtuelle est bien configuré pour tenir compte d’une modification manuelle de l’heure. En effet, la plupart des OS modernes récupèrent par défaut leur heure depuis un serveur de temps appelé aussi serveur NTP (pour Network Time Protocol), soit interdisent la modification de l’heure par l’utilisateur, ou soit la réinitialisent à intervalle régulier.

La procédure dépend du système d’exploitation virtuel, et demande d’avoir les droits administrateur. Dans le cas de Windows 10, il faut aller dans les réglages de date et heure dans l’application Paramètres, et décocher deux cases Définir l’heure automatiquement et Définir le fuseau horaire automatiquement. Cela ressemble à ça :

Désactivation de la synchro temps NTP dans Windows 10
Désactivation de la synchro temps NTP sous Windows 10

L’heure change mais se réinitialise quasi instantanément

A partir du moment où la récupération automatique de l’heure est désactivée le système virtuel devrait vous laisser changer l’heure sans rechigner… En théorie !

Si vous avez installé les additions d’invité VirtualBox dans la machine virtuelle (recommandé), alors vous risquez de vous retrouver face à une situation étrange : vous pouvez bien changer l’heure, mais cette dernière se réaligne sur celle du système physique instantanément, ou après quelques secondes.

Il ne s’agit pas d’un bug mais d’une fonctionnalité, comme précisé dans le lien ci-dessus : « Time synchronization. With the Guest Additions installed, Oracle VM VirtualBox can ensure that the guest’s system time is better synchronized with that of the host ».

Voyons donc comment désactiver ça et reprendre le contrôle sur l’heure dans la machine virtuelle.

Utiliser la commande VBoxManage pour désactiver la synchro host/guest de l’heure

La méthode recommandée pour désactiver la synchronisation de l’heure entre la machine virtuelle et la machine physique est d’utiliser la commande VBoxManage de VirtualBox pour ajouter une entrée de configuration GetHostTimeDisabled à la machine virtuelle.

Pour lancer la commande il faut utiliser la console ou l’interpréteur de commande du système physique. Par exemple, sous Windows 10, faites un clic droit sur le bouton du Menu Démarrer, choisissez Interpréteur de commandes ou Windows Powershell, et saisissez dans la console qui apparait (remplacer Nom de la VM par le nom de la machine virtuelle dans la liste de VirtualBox) :

cd "C:\Program Files\Oracle\VirtualBox"
VBoxManage.exe setextradata "Nom de la VM" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

Sur un système Linux il n’est pas nécessaire de préciser le dossier où est installée la commande :

$ VBoxManage setextradata "Nom de la VM" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

En cas d’erreur un message s’affichera décrivant le problème (commande introuvable, nom de machine virtuel incorrect). Si tout se passe bien rien de spécial ne s’affichera :

Commande VBoxManage pour ajouter GetHostTimeDisabled

On peut désormais lancer la machine virtuelle et changer l’heure à l’intérieur sans qu’elle ne soit remise sur celle de la machine physique par VirtualBox.

💡  Pour réactiver la synchronisation du temps réexécutez la commande mais remplacez le 1 à la fin par un zéro.

Alternative #1 : modifier le fichier VBOX et ajouter GetHostTimeDisabled

Si vous ne pouvez pas utiliser la commande VBoxManage, vous pouvez modifier vous même le fichier de machine virtuelle (c’est ce que fait la commande de toute façon). Il s’agit d’un fichier doté d’une extension VBOX, qui peut être trouvé en faisant un clic droit sur la machine dans la liste de VirtualBox, et en choisissant Afficher dans l’explorateur de fichiers. Pensez à en faire une sauvegarde au cas où, c’est plus prudent.

Fichier VBOX dans l'explorateur Windows
Editer le fichier VBOX de la machine virtuel

Assurez vous que VirtualBox est fermé et que la machine virtuelle est arrêtée, puis ouvrez le fichier VBOX dans votre éditeur de texte préféré (personnellement j’utilise Visual Studio Code). Il contient du code XML décrivant la configuration de la machine virtuelle.

Dans le code, localisez la section <ExtraData></ExtraData> qui se situe à l’intérieur de la section <Machine></Machine>, et insérez-y une nouvelle ligne avec le code suivant :

<ExtraDataItem name="VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" value="1"/>

Si la section <ExtraData></ExtraData> n’existe pas déjà, il faudra la créer à l’intérieur de la section <Machine></Machine>, globalement cela devrait ressembler à la capture ci-dessous :

Ajout de GetHostTimeDisabled dans un fichier VBOX
Ajout de GetHostTimeDisabled dans un fichier VBOX

Enregistrez le fichier et fermez l’éditeur, lancez VirtualBox et démarrez la machine virtuelle, vous devriez à présent pouvoir changer l’heure sans souci.

💡  Pour réactiver la synchronisation du temps, refaites la même manipulation mais cette fois supprimez la ligne avec GetHostTimeDisabled.

Alternative #2 : désinstaller les additions d’invité VirtualBox

En dernier recours, vous pouvez désinstaller les additions d’invité VirtualBox, ce qui désactivera effectivement la synchronisation de l’heure entre la machine physique et la machine virtuelle, au prix d’autres fonctionnalités (améliorations graphiques, presse-papiers partagé et autres). La désinstallation se fait en fonction du système d’exploitation virtuel, sous Windows on peut aller dans la section Programmes et fonctionnalités du Panneau de configuration, le nom du programme à désinstaller est Oracle VM VirtualBox Guest Additions :

Désinstaller les additions invité VirtualBox
Désinstallation des additions invité VirtualBox sous Windows

Conclusion

Vous savez désormais comment changer l’heure dans vos machines virtuelles VirtualBox, j’espère que vous n’aurez pas perdu trop de temps à comprendre pourquoi une action apparemment simple ne fonctionne pas au premier abord.

Si vous avez besoin de plus d’infos ou si tout ne marche pas comme prévu, le formulaire de contact est par ici. A bientôt !

Photo de profil de Loïc Burtin Code Colibri développeur web à Dijon

A propos de l'auteur

Loïc Burtin

Développeur web indépendant, avec une tendance à couper les plumes en quatre pour que les sites se chargent plus rapidement.

Partager cet article :