Linux runasdate analog

4512
Alex Bolotov

Ich möchte, dass ein Benutzer (oder ein Prozess) eine andere Uhrzeit und ein anderes Datum hat. Ist es möglich?

Wie kann ich das machen?

7

4 Antworten auf die Frage

12
quack quixote

Was RunAsDate macht, ist folgendes:

RunAsDate fängt die Kernel-API-Aufrufe ab, die das aktuelle Datum und die aktuelle Uhrzeit (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime) zurückgeben, und ersetzt das aktuelle Datum und die aktuelle Uhrzeit durch das von Ihnen angegebene Datum und die aktuelle Uhrzeit.

Unter Linux haben Sie einige Optionen, um dasselbe zu erreichen:

  1. Wenn Sie eine Windows-Version des Programms erhalten, können Sie RunAsDate möglicherweise unter Wine ausführen (achten Sie jedoch auf einen aktuellen Fehler ).

  2. Suchen Sie dazu eine Wrapper-Bibliothek oder schreiben Sie Ihre eigene. Einige Optionen sind unten angegeben.

  3. Verwenden Sie eine virtuelle Maschine. Dies ist ein Overkill, aber da ein Betriebssystem in einer Gast-VM vollständig vom zugrunde liegenden Host getrennt ist, können Sie die Systemzeit auf etwas völlig anderes einstellen. Es kann schneller als andere Optionen eingerichtet werden.


Option 2 kann auf unterschiedliche Weise ausgeführt werden, je nachdem, was Sie ausführen möchten. DaveParillos Antwort unten verweist auf einen DIY-Ansatz, der die verschiedenen Methoden erläutert und Code für eine ausführbare Datei enthält. Einige andere Optionen beinhalten:

Ich wünschte, ich könnte das noch mal abstimmen - wie das Datefudge-Update! DaveParillo vor 14 Jahren 0
2
Federico Viscioletti

Ich hatte das gleiche Problem, als ich eine Alternative zu RunAsDate in Linux Ubuntu fand, und kam zu dieser Lösung.

Ich habe ein Startprogramm für das Programm erstellt, das ich mit RunAsDate verwenden möchte. Wenn die Software, die Sie verwenden möchten, Foo heißt, erstellen Sie eine Datei namens Foo.desktop auf Ihrem Desktop und ändern Sie sie mit gedit oder einem ähnlichen Texteditor. Fügen Sie dann die folgenden Codezeilen hinzu:

[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 

Sie müssen lediglich die Informationen zu Name, Kommentar und Symbol mit Ihren tatsächlichen Ressourcen ändern.

Die Option Ausführen ändert das Systemdatum für die Sitzung, während Sie die Anwendung verwenden. Wenn Sie fertig sind, wird das Systemdatum automatisch neu synchronisiert.

Ändert dies die Systemzeit global? Wenn ich Foo von Ihrem Foo.desktop aus ausführen und dann die Bar öffnen (während Foo noch geöffnet ist), wird Bar denken, dass die Systemzeit '01 Jan 2008 12:00:00 'ist? LastStar007 vor 6 Jahren 0
1
DaveParillo

Sie können die TZ auf einen beliebigen Wert einstellen. Die Systemzeit bleibt davon unberührt, aber die scheinbare Zeit ändert sich. Dies ist nicht dasselbe wie das Abfangen des Kernels, erfordert jedoch keine Codierung. Verwendung (3-Buchstaben-Kennung) (Offset von UTC h: m: s) [(Sommerzeitkennung) (Sommer-Offset von UTC h: m: s)]. Zum Beispiel: TZ=XXX[+-]hh:ss:ssYYY[+-]hh:ss:ssDer zweite Satz (Sommer) ist optional.

date; export TZ=FOO+23:11:17; date; export TZ=; date 

kehrt zurück:

Sat Oct 24 20:01:55 UTC 2009 Fri Oct 23 21:01:11 FOO 2009 Sat Oct 24 20:01:55 UTC 2009 

Obwohl ich dies bedauern kann, ist hier ein Beispielprogramm, das Sie kompilieren könnten, um Ihren Kernel zu modifizieren und alle oder nur ausgewählte Programme über das Datum hinaus zu fälschen.

eigentlich ist das ein großartiger Link, thx - einer der Kommentare zu diesem Beitrag führte mich zu den vorhandenen Programmen, die ich in meinem Schnitt erwähnt habe. quack quixote vor 14 Jahren 0
Machen Sie sich nicht mit der gesamten Systemzeit herum. Es ist ziemlich wichtig, dass Dateien mit dem richtigen Datum usw. erstellt werden. Lee B vor 14 Jahren 0
Außerdem unterstützen Timezones nur +/- 24 Stunden, afaik. Der Kernel-Mod für "ausgewählte Programme" ist immer noch ein guter Vorschlag, aber Datefudge ist wahrscheinlich die einfachere Methode für die meisten Apps. Lee B vor 14 Jahren 0
der Link erwähnt Kernel-Modding, geht aber nicht ins Detail. Der von ihm bereitgestellte Code verwendet die catch-a-system-call-Methode (im Container ausgeführt) - im Grunde dasselbe wie datefudge. quack quixote vor 14 Jahren 0
0
ricbax

Ist es das, was Sie zu erreichen versuchen?

Linux, UNIX legt die Zeitzone für jeden Benutzer fest

Wie aus dem Linktitel hervorgeht, wird die Zeitzone nur für jeden Benutzer festgelegt, die Systemzeit für diesen Benutzer wird jedoch nicht geändert. quack quixote vor 14 Jahren 0