Аналог Linux runasdate


7

Я хочу, щоб певний користувач (або якийсь процес) мали різний час і дату. Це можливо?

Як я можу це зробити?

Відповіді:


12

Що робить RunAsDate , це:

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

У Linux у вас є кілька варіантів, щоб виконати те саме:

  1. Якщо ви можете отримати версію програми для Windows, можливо, ви зможете запустити RunAsDate під Wine (але стежте за нещодавньою помилкою ).

  2. Знайдіть бібліотеку обгортки для цього або напишіть свою. Деякі варіанти наведені нижче.

  3. Використовуйте віртуальну машину. Це надмірно, але оскільки ОС в гостьовій машині VM повністю відокремлена від основного хоста, ви можете встановити її системний час на щось зовсім інше. Налаштування може бути швидше, ніж інші параметри.


Варіант 2 може бути виконаний різними методами, залежно від того, що ви намагаєтеся запустити. Відповідь DaveParillo нижче посилається на тему " Зроби сам", який пояснює різні методи та включає код для виконуваного файлу. Деякі інші варіанти включають:

  • datefudge, доступний у сховищах Debian / Ubuntu та інших місцях.

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

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


Я б хотів, щоб я міг проголосувати за це ще раз - як оновлення datefudge!
DaveParillo

2

У мене була така ж проблема в пошуку альтернативи RunAsDate в Linux Ubuntu, і я прийшов до цього рішення.

Я створив запуск програми, яку я хочу використовувати з 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 змінює системну дату сеансу під час використання програми, а потім, коли ви закінчите, автоматично повторно синхронізує системну дату.


Чи це змінює системний час у всьому світі? Як у випадку, якщо я запускаю Foo з вашої Foo.desktop, тоді відкриваю Bar (поки Foo ще відкритий), чи вважатиме Бар, що системний час - '01 січня 2008 12:00:00 '?
LastStar007

1

Ви можете встановити TZ майже будь-яке значення, яке ви хочете. Час системи не впливає, але очевидний час зміниться. Це не те саме, що перехоплення ядра, але не потребує кодування. Використовуйте (3 буквенний ідентифікатор) (зміщення від UTC год: м: с) [(ідентифікатор літнього часу) (зсув літнього часу від UTC год: м: с)]. Наприклад: 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

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


насправді це чудове посилання, thx - один із коментарів до цієї публікації привів мене до існуючих програм, про які я згадував у своїй редакції.
шарлатанний кіхот

Не возитися із загальним системним часом; досить важливо, щоб файли створювалися з правильною датою і т. д.
Лі Б

Також Timezones підтримують лише +/- 24 години, afaik. Мод ядра для "вибраних програм" все ще є гарною пропозицією, але, можливо, більш простим методом для більшості додатків є датафудж.
Лі Б

посилання згадує модулювання ядра, але не деталізується; код, який він надає, використовує метод catch-a-system-call (run-in-container) - в основному те саме, що робить datafudge.
шарлатанний кіхот

0

як підказує заголовок посилання, це встановлює лише часовий пояс на основі кожного користувача, але не змінює системний час для цього користувача.
шарлатаний кіхот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.