RunAsDate が行うことは次のとおりです:
<ブロック引用>RunAsDate は、現在の日付と時刻 (GetSystemTime、GetLocalTime、GetSystemTimeAsFileTime) を返すカーネル API 呼び出しをインターセプトし、現在の日付/時刻を指定した日付/時刻に置き換えます。
Linux では、同じことを達成するためのいくつかのオプションがあります:
<オール>プログラムの Windows バージョンを入手できれば、Wine で RunAsDate を実行できる可能性があります (ただし、最近のバグに注意してください)。
これを行うためのラッパー ライブラリを見つけるか、独自に作成します。いくつかのオプションを以下に示します。
仮想マシンを使用します。これはやり過ぎですが、ゲスト VM の OS は基盤となるホストから完全に分離されているため、システム時間をまったく異なるものに設定できます。他のオプションよりもセットアップが速い場合があります。
オプション 2 は、実行しようとしているものに応じて、さまざまな方法で実現できます。以下の DaveParillo の回答は、さまざまな方法を説明し、実行可能ファイルのコードを含む DIY アプローチへのリンクです。その他のオプションには次のものがあります:
-
datefudge
、Debian/Ubuntu リポジトリおよびその他の場所で入手できます。 -
Time-Fake perl モジュール、パッケージ
libtime-fake-perl
として Debian リポジトリにもあります . -
FakeTime プリロード ライブラリ (別名
libfaketime
、freshmeat リンク)、動的にリンクされたバイナリでシステム コールをインターセプトできるライブラリ。 Squeeze と Sid の Debian リポジトリで利用できます。
Linux Ubuntu で RunAsDate に代わるものを見つける際に同じ問題があり、この解決策にたどり着きました.
RunAsDate で使用するプログラムのランチャーを作成しました。使用するソフトウェアが Foo である場合は、デスクトップに Foo.desktop というファイルを作成し、gedit または同様のテキスト エディターを使用して変更します。次に、次のコード行を追加します:
[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
名前、コメント、アイコンの情報を実際のリソースで変更するだけです。
Exec オプションは、アプリケーションの使用中にセッションのシステム日付を変更し、終了すると自動的にシステム日付を再同期します。