Definir automaticamente o fuso horário do Linux de acordo com o local


19

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?


1
Você está dizendo que o fuso horário muda do horário de verão para o horário padrão?
— slm

Aqui há duas coisas. 1.se houver mudança no país. 2. segundo se houver alteração no horário de verão.
— Programador incorporado

servidores ntp manipulam alterações no horário de verão automaticamente. Não conheço nenhum servidor que detecte sua localização e atualize seu fuso horário automaticamente (como faz um telefone celular).
— drs 12/09

2
@drs Mais precisamente, o NTP não se importa com o fuso horário. A hora NTP é UTC, pura e simples, e a conversão de fuso horário é para o cliente executar. Um cliente NTP específico pode fazer a conversão do fuso horário, ou não, mas como a maioria dos sistemas * nix tem o relógio do sistema definido como UTC de qualquer maneira, não seria necessário.
— um CVn

Respostas:


36

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 configurá-lo para real executando tzupdatecomo root.

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

Isso funciona por:

  • Localização geográfica do seu IP atual
  • Obtendo o fuso horário para esse local
  • Atualizando o link simbólico em /etc/localtimepara apontar para o arquivo zoneinfo para esse fuso horário

6

Este é um tópico antigo, mas ainda relevante para o kubuntu 1710, que não muda o fuso horário automaticamente. Estou usando a solução de Chris Down para o tzupdate, mas garantindo também que ele seja acionado quando o sistema tentar se conectar a uma rede (wifi ou outra). 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
    

    Em seguida, verifique se ele está acessível a 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 se funciona

    sudo tzupdate
    
  3. Precisamos, então, garantir que isso seja acessível a todos os usuários

    sudo su -
    tzupdate
    

    que coloca você como root e depois verifica se o comando altera seu fuso horário. Depois, 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 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 ENTER para salvar as alterações.

  5. Depois, garantimos que o NetworkManager sempre chame isso depois de acionar uma alteração na 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

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

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

    Pode haver uma maneira melhor de fazer isso, ou seja, fazer com que o NetworkManager chame isso somente quando houver uma conexão ativa e não desativada (como o descrito acima) - tentei colocar o script em / etc / network / if-up .d mas isso não funcionou para mim

  6. Para testar isso no Kubuntu - Altere o fuso horário local para outra coisa (vá para o plasmoid Date na barra de tarefas e clique com o botão direito do mouse e selecione 'Adjust Date / Time' e depois 'TimeZone' na guia)

    Desligue o wifi e ligue-o novamente - você verá que, uma vez conectado ao wifi, ele espera cerca de 30 segundos e deve alterar o fuso horário com êxito.

    Observe que isso não foi testado com wifi, onde é necessário digitar uma senha em uma página da web. Espero que o fato de isso ser executado no final de uma conexão de rede deva fornecer tempo suficiente para que um usuário insira credenciais - caso contrário, isso poderá precisar de ajustes adicionais (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 tente novamente Y vezes


2
É uma pena que em 2018 essa ainda seja a resposta correta. Eu acredito que o Gnome tem um pacote (gnome-clocks) que irá lidar com isso, mas no KDE não há outra boa solução atualmente.
— 21418 cardonator

Você pode fazer "if [" $ 2 "=" up "]" para verificar se a conexão de rede está ativa antes de executar o comando. O segundo parms é o estado que está sendo chamado pelo NM.
— flamusdiu

-2

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

Unix e 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. Os fusos horários não existem no kernel do Linux; é somente quando um aplicativo de espaço do usuário exibe o tempo em que o número de segundos desde 1970 é interpretado usando um fuso horário. Geralmente, essa interpretação é feita através das funções da biblioteca C. O fuso horário é selecionado pela TZvariável de ambiente. As definições de fuso horário (que consistem em um nome de fuso horário, offset do UTC, datas em que o horário de verão está em vigor e as compensações durante o horário de verão) fazem parte do GNU libc e geralmente são incluídas nas distribuições do Linux como um pacote "tzdata". Portanto, atualizar as definições de fuso horário é uma questão de correr apt-get upgrade, yum updateou alguma operação similar.

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

O NTP mantém o controle do número de segundos desde 1º de janeiro de 1900, UTC . Portanto, o NTP, como o kernel do Unix, não tem conceito de fuso horário.


2
Atualização do fuso horário, podemos ver que o comando "date" imprimirá a hora e a data de acordo com / etc / localtime fuso horário, podemos mudar o fuso manualmente criando um link simbólico de / usr / share / zoneinfo / America / Los_Angeles. mas esta é a maneira manual de fazer. Quero, ele deve atualizar automaticamente o fuso horário do país em que estou, em vez de fazer manualmente.
— Programador incorporado

Em termos simples, é por um período localizado, as atualizações automáticas de fuso horário são necessárias apenas para pessoas que viajam muito.
— Cestarian 22/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.