Linux runasdate аналог

4514
Alex Bolotov

Я хочу, чтобы у какого-то пользователя (или какого-то процесса) было другое время и дата. Является ли это возможным?

Как я могу это сделать?

7

4 ответа на вопрос

12
quack quixote

Что RunAsDate делает следующее:

RunAsDate перехватывает вызовы API ядра, которые возвращают текущую дату и время (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime), и заменяет текущую дату / время указанной вами датой / временем.

Под Linux у вас есть несколько вариантов, чтобы выполнить то же самое:

  1. Если вы можете получить версию программы для Windows, вы можете запустить RunAsDate под Wine (но следите за недавней ошибкой ).

  2. Найдите для этого библиотеку-обертку или напишите свою. Некоторые варианты приведены ниже.

  3. Используйте виртуальную машину. Это излишне, но, поскольку ОС в гостевой виртуальной машине полностью отделена от базового хоста, вы можете установить системное время на что-то совершенно другое. Это может быть быстрее настроить, чем другие параметры.


Вариант 2 может быть реализован разными способами, в зависимости от того, что вы пытаетесь запустить. Ответ DaveParillo ниже ссылается на самодельный подход, который объясняет различные методы и включает в себя код для исполняемого файла. Некоторые другие варианты включают в себя:

  • datefudge, доступно в репозиториях Debian / Ubuntu и других местах.

  • Модуль Perl Time-Fake, также в репозиториях Debian как пакет libtime-fake-perl.

  • FakeTime Preload библиотека (ака libfaketime, Freshmeat ссылка ), библиотека, которая может перехватывать системные вызовы в динамически связанные файлы. Доступно в репозиториях Debian для Squeeze и Sid.

Хотел бы я снова проголосовать за это - как обновление datefudge! DaveParillo 15 лет назад 0
2
Federico Viscioletti

I had the same problem in finding an alternative to RunAsDate in Linux Ubuntu, and I came to this solution.

I created a launcher of the program that I want use with RunAsDate. If the software if you want to use is called Foo, create a file on your desktop called Foo.desktop, and modify it using gedit or a similar text editor. Then add to it the following lines of code:

[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 

You just need to change the Name, Comment and Icon information with your actual resources.

The Exec option changes the system date for the session while you are using the application, then when you finished it automatically resync the system date.

Изменяет ли это системное время глобально? Например, если я запускаю Foo с вашего Foo.desktop, затем открываю Bar (пока Foo все еще открыт), будет ли Bar считать системное время «01.01.2008 12:00:00»? LastStar007 7 лет назад 0
1
DaveParillo

Вы можете установить TZ практически на любое желаемое значение. Системное время не изменяется, но видимое время изменится. Это не то же самое, что перехват ядра, но не требует кодирования. Используйте (трехбуквенный идентификатор) (смещение от UTC h: m: s) [(идентификатор летнего времени) (смещение от UTC h: m: s)]. Например: TZ=XXX[+-]hh:ss:ssYYY[+-]hh:ss:ssвторой (летний) набор не является обязательным.

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

возвращает:

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

Хотя я могу сожалеть об этом, вот пример программы, которую вы могли бы скомпилировать для модификации вашего ядра и полностью подделать все или только выбранные программы относительно даты.

на самом деле это отличная ссылка, спасибо - один из комментариев к этому посту привел меня к существующим программам, о которых я упоминал в своем редактировании. quack quixote 15 лет назад 0
Не связывайтесь с общим системным временем; очень важно, чтобы файлы создавались с правильной датой и т. д. Lee B 15 лет назад 0
Кроме того, часовые пояса поддерживают только +/- 24 часа, афаик. Мод ядра для "выбранных программ" все еще является хорошим предложением, но datefudge, вероятно, является более простым методом для большинства приложений. Lee B 15 лет назад 0
ссылка упоминает моддинг ядра, но не вдаваться в подробности; код, который он предоставляет, использует метод catch-a-system-call (run-in-container) - в основном то же, что делает datefudge. quack quixote 15 лет назад 0
0
ricbax
Как следует из названия ссылки, он устанавливает только часовой пояс для каждого пользователя, но не меняет системное время для этого пользователя. quack quixote 15 лет назад 0

Похожие вопросы