Я хочу, щоб певний користувач (або якийсь процес) мали різний час і дату. Це можливо?
Як я можу це зробити?
Я хочу, щоб певний користувач (або якийсь процес) мали різний час і дату. Це можливо?
Як я можу це зробити?
Відповіді:
Що робить RunAsDate , це:
RunAsDate перехоплює дзвінки API ядра, що повертає поточну дату та час (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime) та замінює поточну дату / час на вказану дату / час.
У Linux у вас є кілька варіантів, щоб виконати те саме:
Якщо ви можете отримати версію програми для Windows, можливо, ви зможете запустити RunAsDate під Wine (але стежте за нещодавньою помилкою ).
Знайдіть бібліотеку обгортки для цього або напишіть свою. Деякі варіанти наведені нижче.
Використовуйте віртуальну машину. Це надмірно, але оскільки ОС в гостьовій машині VM повністю відокремлена від основного хоста, ви можете встановити її системний час на щось зовсім інше. Налаштування може бути швидше, ніж інші параметри.
Варіант 2 може бути виконаний різними методами, залежно від того, що ви намагаєтеся запустити. Відповідь DaveParillo нижче посилається на тему " Зроби сам", який пояснює різні методи та включає код для виконуваного файлу. Деякі інші варіанти включають:
datefudge
, доступний у сховищах Debian / Ubuntu та інших місцях.
Модуль Perl Time-Fake , також у сховищах Debian як пакет libtime-fake-perl
.
Бібліотека FakeTime Preload (ака libfaketime
, пряме посилання ), бібліотека, яка може перехоплювати системні виклики у динамічно пов'язаних бінарних файлах. Доступний у сховищах Debian для Squeeze та Sid.
У мене була така ж проблема в пошуку альтернативи 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 змінює системну дату сеансу під час використання програми, а потім, коли ви закінчите, автоматично повторно синхронізує системну дату.
Ви можете встановити 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
Хоча я можу шкодувати про це, ось приклад програми, яку ви могли скласти, щоб модифікувати ваше ядро і повністю підробити всі або просто вибрані програми щодо дати.
Це те, що ви намагаєтеся досягти?
Linux, UNIX встановлюють часовий пояс на основі кожного користувача