Quello che fa RunAsDate è quanto segue:
RunAsDate intercetta le chiamate API del kernel che restituiscono la data e l'ora correnti (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime) e sostituisce la data/ora corrente con la data/ora specificata.
Sotto Linux hai alcune opzioni per ottenere la stessa cosa:
-
Se riesci a ottenere una versione Windows del programma, potresti essere in grado di eseguire RunAsDate sotto Wine (ma fai attenzione a un bug recente).
-
Trova una libreria wrapper per farlo o scrivi la tua. Di seguito sono riportate alcune opzioni.
-
Usa una macchina virtuale. Questo è eccessivo, ma poiché un sistema operativo nella VM guest è completamente separato dall'host sottostante, puoi impostare l'ora di sistema su qualcosa di completamente diverso. Potrebbe essere più veloce da configurare rispetto alle altre opzioni.
L'opzione 2 può essere eseguita con metodi diversi, a seconda di ciò che si sta tentando di eseguire. La risposta di DaveParillo di seguito si collega a un approccio fai-da-te che spiega i diversi metodi e include il codice per un eseguibile. Alcune altre opzioni includono:
-
datefudge
, disponibile nei repository Debian/Ubuntu e in altri luoghi. -
Modulo perl Time-Fake, anche nei repository Debian come pacchetto
libtime-fake-perl
. -
FakeTime Preload Library (alias
libfaketime
, freshmeat link), una libreria in grado di intercettare le chiamate di sistema nei binari collegati dinamicamente. Disponibile nei repository Debian per Squeeze e Sid.
Ho avuto lo stesso problema nel trovare un'alternativa a RunAsDate in Linux Ubuntu e sono arrivato a questa soluzione.
Ho creato un launcher del programma che voglio utilizzare con RunAsDate. Se il software che desideri utilizzare si chiama Foo, crea un file sul desktop chiamato Foo.desktop e modificalo utilizzando gedit o un editor di testo simile. Quindi aggiungi ad esso le seguenti righe di codice:
[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
Devi solo cambiare le informazioni su nome, commento e icona con le tue risorse effettive.
L'opzione Exec cambia la data di sistema per la sessione mentre stai usando l'applicazione, poi quando hai finito risincronizza automaticamente la data di sistema.