Ce que fait RunAsDate est le suivant :
RunAsDate intercepte les appels de l'API du noyau qui renvoie la date et l'heure actuelles (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime) et remplace la date/heure actuelle par la date/heure que vous spécifiez.
Sous Linux, vous avez quelques options pour accomplir la même chose :
-
Si vous pouvez obtenir une version Windows du programme, vous pourrez peut-être exécuter RunAsDate sous Wine (mais attention au bogue récent).
-
Trouvez une bibliothèque wrapper pour faire cela, ou écrivez la vôtre. Certaines options sont données ci-dessous.
-
Utilisez une machine virtuelle. C'est exagéré, mais comme un système d'exploitation dans une machine virtuelle invitée est complètement séparé de l'hôte sous-jacent, vous pouvez définir son heure système sur quelque chose de complètement différent. Il peut être plus rapide à configurer que les autres options.
L'option 2 peut être accomplie par différentes méthodes, selon ce que vous essayez d'exécuter. La réponse de DaveParillo ci-dessous renvoie à une approche DIY qui explique les différentes méthodes et inclut le code d'un exécutable. Certaines autres options incluent :
-
datefudge
, disponible dans les dépôts Debian/Ubuntu et ailleurs. -
Module perl Time-Fake, également dans les référentiels Debian en tant que package
libtime-fake-perl
. -
Bibliothèque de préchargement FakeTime (alias
libfaketime
, lien freshmeat), une bibliothèque qui peut intercepter les appels système dans des binaires liés dynamiquement. Disponible dans les dépôts Debian pour Squeeze et Sid.
J'ai eu le même problème pour trouver une alternative à RunAsDate dans Linux Ubuntu, et je suis venu à cette solution.
J'ai créé un lanceur du programme que je veux utiliser avec RunAsDate. Si le logiciel que vous souhaitez utiliser s'appelle Foo, créez un fichier sur votre bureau appelé Foo.desktop et modifiez-le à l'aide de gedit ou d'un éditeur de texte similaire. Ajoutez-y ensuite les lignes de code suivantes :
[Desktop Entry]
Name=Foo
Comment=Runs the Foo application
Exec=sh -c "sudo date --set '01 Jan 2008 12:00:00'; path/to/Foo; sudo timedatectl set-ntp no; sudo timedatectl set-ntp yes;"
Icon=path/to/icon.png
Terminal=true
Type=Application
StartupNotify=true
Il vous suffit de modifier les informations Nom, Commentaire et Icône avec vos ressources réelles.
L'option Exec modifie la date système de la session pendant que vous utilisez l'application, puis lorsque vous avez terminé, resynchronisez automatiquement la date système.