Linux runasdate analógico

7

Eu quero que algum usuário (ou algum processo) tenha data e hora diferentes. É possível?

Como posso fazer isso?

    
por Alex Bolotov 24.10.2009 / 17:48

4 respostas

11

O que RunAsDate é o seguinte:

RunAsDate intercepts the kernel API calls that returns the current date and time (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime), and replaces the current date/time with the date/time that you specify.

No Linux, você tem algumas opções para realizar a mesma coisa:

  1. Se você conseguir uma versão para Windows do programa, poderá executar o RunAsDate em Vinho (mas observe por um bug recente ).

  2. Encontre uma biblioteca de wrapper para fazer isso ou escreva a sua. Algumas opções são dadas abaixo.

  3. Use uma máquina virtual. Isso é um exagero, mas como um sistema operacional na VM guest é completamente separado do host subjacente, você pode definir a hora do sistema para algo completamente diferente. Pode ser mais rápido de configurar do que as outras opções.

A opção 2 pode ser realizada por diferentes métodos, dependendo do que você está tentando executar. A resposta de DaveParillo abaixo links para uma abordagem DIY que explica os diferentes métodos e inclui código para um executável. Algumas outras opções incluem:

  • datefudge , disponível nos repositórios do Debian / Ubuntu e em outros lugares.

  • Módulo perl Time-Fake , também nos repositórios da Debian como package libtime-fake-perl .

  • Biblioteca de pré-carregamento do FakeTime (também conhecido como libfaketime , freshmeat link ), uma biblioteca que pode interceptar chamadas do sistema em binários vinculados dinamicamente. Disponível nos repositórios da Debian para Squeeze e Sid.

por 24.10.2009 / 20:23
2

Eu tive o mesmo problema em encontrar uma alternativa ao RunAsDate no Linux Ubuntu, e cheguei a esta solução.

Eu criei um lançador do programa que eu quero usar com o RunAsDate. Se o software que você deseja usar for chamado Foo, crie um arquivo em sua área de trabalho chamado Foo.desktop e modifique-o usando o gedit ou um editor de texto semelhante. Em seguida, adicione as seguintes linhas de código:

[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

Você só precisa alterar as informações de nome, comentário e ícone com seus recursos reais.

A opção Exec altera a data do sistema para a sessão enquanto você está usando o aplicativo e, em seguida, quando você terminar, ele automaticamente ressincroniza a data do sistema.

    
por 11.03.2016 / 18:32
1

Você pode definir o TZ para praticamente qualquer valor desejado. A hora do sistema não é afetada, mas o tempo aparente mudará. Isso não é o mesmo que interceptar o kernel, mas não requer codificação. Use (identificador de 3 letras) (deslocamento de UTC h: m: s) [(identificador de horário de verão) (deslocamento de verão de UTC h: m: s)]. Por exemplo: TZ=XXX[+-]hh:ss:ssYYY[+-]hh:ss:ss o segundo conjunto (verão) é opcional.

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

retorna:

Sat Oct 24 20:01:55 UTC 2009
Fri Oct 23 21:01:11 FOO 2009
Sat Oct 24 20:01:55 UTC 2009
Embora eu possa me arrepender disso, O you-can-use-ele-sempre-linux / "> aqui é um programa de exemplo que você pode compilar para modificar o seu kernel e apagar completamente todos ou apenas alguns programas selecionados sobre a data.

    
por 24.10.2009 / 22:04
0

É isso que você está tentando realizar?

Linux, UNIX defina o fuso horário por usuário

    
por 24.10.2009 / 18:00