Defina automaticamente o fuso horário do Linux de acordo com a localização

18

Como podemos definir automaticamente o fuso horário padrão do sistema no Linux usando a Internet? A meu ver, os servidores NTP podem atualizar apenas o tempo, mas não o fuso horário. Existe algum servidor que possa alterar o fuso horário?

    
por Embedded Programmer 12.09.2013 / 04:23

3 respostas

34

Eu escrevi um programa há um tempo atrás que faz isso: tzupdate .

Você pode ver o que definiria seu fuso horário (sem realmente defini-lo) executando tzupdate -p :

$ tzupdate -p
Europe/Malta

Você pode defini-lo como real executando tzupdate como root.

$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013

Isso funciona por:

  • Localizando geograficamente seu IP atual
  • Obtendo o fuso horário para esse local
  • Atualizando o symlink em /etc/localtime para apontar para o arquivo zoneinfo para esse fuso horário
por 12.09.2013 / 05:49
5

Este é um tópico antigo, mas ainda é relevante para o kubuntu 1710, que não altera o fuso horário automaticamente. Eu estou usando a solução de Chris Down para tzupdate, mas garantindo também que ele é acionado quando o sistema tenta se conectar a uma rede (wifi ou outro). Isso pressupõe que você esteja usando o Network Manager.

Abra um terminal primeiro.

  1. Instale o tzupdate

    sudo apt install python-pip
    pip install -U tzupdate
    

    Assegure-se de que seja acessível por todos os usuários

    sudo cp -R ~/.local/lib/python2.7/site-packages/. /usr/lib/python2.7/.
    sudo cp /home/marta_riba/.local/bin/tzupdate /usr/local/bin/tzupdate
    
  2. Teste que funciona

    sudo tzupdate
    
  3. Em seguida, precisamos garantir que isso seja acessível por todos os usuários

    sudo su -
    tzupdate
    

    que coloca você como root e verifica se o comando altera seu fuso horário. Em seguida, certifique-se de sair para retornar como usuário normal

    exit
    
  4. Certifique-se de que o tzupdate possa ser executado com o sudo sem uma senha. Isso é necessário para uma etapa posterior, quando acionamos isso a partir do networkmanager que executa isso em segundo plano. Digite isso em um terminal para editar o arquivo sudoers

    sudo visudo
    

    Adicione esta linha no final do arquivo

    ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
    

    Pressione CTRL-X e pressione Y e depois ENTER para salvar as alterações

  5. Em seguida, garantimos que o NetworkManager sempre chama isso depois de ativar uma alteração de conexão de rede (por exemplo, ao conectar a um wifi). Para isso, criamos um arquivo chamado tzupdate na pasta dispatcher.d que simplesmente chama sudo tzupdate. O arquivo precisa de permissões executáveis para executar

    sudo echo 'sudo tzupdate'| tee /etc/NetworkManager/dispatcher.d/99-tzupdate
    sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
    

    Observe que o NetworkManager chamará o comando execute sudo (ou seja, sudo tzupdate), que geralmente solicitará uma senha.

    Pode haver uma maneira melhor de fazer isto, isto é, fazer com que o NetworkManager chame isso apenas quando ele traz uma conexão para cima e não para baixo (como o acima fará) - Eu tentei colocar o script em / etc / network / if-up.d mas isso não funcionou para mim

  6. Para testar isso no Kubuntu - Mude o fuso horário local para outra coisa (vá para o plasmoide de data na barra de tarefas e clique com o botão direito do mouse e selecione 'Ajustar data / hora' e depois 'fuso horário' na guia)

    Desligue o seu Wi-Fi e volte a ligá-lo - verá que, uma vez ligado ao Wi-Fi, parece esperar cerca de 30 segundos e, em seguida, deve alterar o seu fuso horário com êxito.

    Observe que isso não foi testado com o Wi-Fi, onde é necessário inserir uma senha em uma página da web. Espero que o fato de que isso seja executado no final de uma conexão de rede forneça tempo suficiente para que um usuário insira credenciais - caso contrário, isso pode exigir mais ajustes (verifique se existe uma conexão, verifique se você consegue se conectar à Internet, aguarde por X segundos se não conseguir se conectar à Internet e, em seguida, tentar novamente as vezes Y

por 18.02.2018 / 10:54
0

Não está claro o que você quer dizer com "atualização de fuso horário".

O Unix e o Linux mantêm o tempo como o número de segundos desde 1 de janeiro de 1970, 00:00 UTC. O relógio do sistema Unix é, portanto, independente do fuso horário. Fusos horários não existem no kernel do Linux; é somente quando um aplicativo userspace exibe a hora em que o número de segundos desde 1970 é interpretado usando um fuso horário. Normalmente, essa interpretação é feita através das funções da biblioteca C. O fuso horário é selecionado pela variável de ambiente TZ . As definições de fuso horário (que consistem em um nome de fuso horário, deslocamento de UTC, datas em que o horário de verão está em vigor e os deslocamentos durante o horário de verão) fazem parte do GNU libc e são normalmente incluídas nas distribuições Linux como um pacote "tzdata". Portanto, atualizar as definições de fuso horário é uma questão de executar apt-get upgrade , yum update ou alguma operação semelhante.

Observe que alguns softwares, como o Java, possuem seus próprios arquivos de definição de fuso horário, que precisam ser atualizados separadamente.

O NTP registra o número de segundos desde 1º de janeiro de 1900, UTC . Portanto, o NTP, como o kernel Unix, não tem noção de fusos horários.

    
por 12.09.2013 / 06:31