Imposta automaticamente il fuso orario di Linux in base alla posizione


19

Come possiamo impostare automaticamente il fuso orario predefinito del sistema in Linux usando Internet? A mio avviso, i server NTP possono aggiornare solo il tempo, ma non il fuso orario. Esiste un server che può cambiare il fuso orario?


1
Stai dicendo come il cambio di fuso orario dall'ora legale all'ora solare?
slm

Qui ci sono due cose. 1.se c'è un cambiamento nel paese. 2. in secondo luogo se si verifica un cambiamento nel risparmio di luce del giorno.
Programmatore incorporato

i server ntp gestiscono automaticamente le modifiche dell'ora legale. Non conosco alcun server che rilevi la tua posizione e aggiorni automaticamente il tuo fuso orario (come fa un telefono cellulare).
Dott.

2
@drs Più precisamente, a NTP non interessa affatto il fuso orario. L'ora NTP è UTC, semplice e chiara, e la conversione del fuso orario deve essere eseguita dal client. Un client NTP specifico potrebbe eseguire la conversione del fuso orario, oppure no, ma poiché la maggior parte dei sistemi * nix ha comunque l'orologio di sistema impostato su UTC, non dovrebbe essere necessario.
un CVn del

Risposte:


36

Ho scritto un programma qualche tempo fa che fa questo: tzupdate .

Puoi vedere su cosa imposterebbe il tuo fuso orario (senza effettivamente impostarlo) eseguendo tzupdate -p:

$ tzupdate -p
Europe/Malta

Puoi impostarlo come reale eseguendolo tzupdatecome root.

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

Questo funziona da:

  • Geolocalizzazione del tuo IP attuale
  • Ottenere il fuso orario per quella posizione
  • Aggiornamento del link simbolico in modo /etc/localtimeda puntare al file zoneinfo per quel fuso orario

6

Questo è un vecchio thread, ma ancora rilevante per Kubuntu 1710 che non cambia automaticamente il fuso orario. Sto usando la soluzione di Chris Down per tzupdate, ma assicurando anche che venga attivato quando il sistema tenta di connettersi a una rete (wifi o altro). Ciò presuppone che si stia utilizzando Network Manager.

Apri prima un terminale.

  1. Installa tzupdate

    sudo apt install python-pip
    pip install -U tzupdate
    

    Quindi assicurarsi che sia accessibile a tutti gli utenti

    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. Prova che funzioni

    sudo tzupdate
    
  3. Dobbiamo quindi assicurarci che questo sia accessibile a tutti gli utenti

    sudo su -
    tzupdate
    

    che ti inserisce come root e quindi controlla che il comando cambi il fuso orario. Quindi assicurati di uscire per tornare come utente normale

    exit
    
  4. Assicurarsi che tzupdate possa essere eseguito con sudo senza password. Questo è necessario per un passaggio successivo quando lo attiviamo da networkmanager che lo esegue in background. Digitalo in un terminale per modificare il file sudoers

    sudo visudo
    

    Aggiungi questa riga alla fine del file

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

    Premi CTRL-X, quindi premi Y e poi INVIO per salvare le modifiche

  5. Garantiamo quindi che NetworkManager chiami sempre questo dopo aver attivato una modifica della connessione di rete (ad esempio quando ci si connette a un wifi). Per questo creiamo un file chiamato tzupdate nella cartella dispatcher.d che chiama semplicemente sudo tzupdate. Per eseguire il file sono necessarie autorizzazioni eseguibili

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

    Notare che NetworkManager chiamerà execute sudo (cioè sudo tzupdate) che generalmente richiederà una password.

    Potrebbe esserci un modo migliore per farlo, ovvero fare in modo che NetworkManager lo chiami solo quando attiva una connessione e non anche per la disattivazione (come farà sopra) - Ho provato a mettere lo script in / etc / network / if-up .d ma questo non ha funzionato per me

  6. Per provare questo in Kubuntu - Cambia il tuo fuso orario locale in qualcos'altro (Vai al plasmoide della data nella barra delle applicazioni e fai clic con il pulsante destro del mouse e seleziona 'Regola data / ora' e quindi 'Fuso orario' dalla scheda)

    Spegni e riaccendi il Wi-Fi: vedrai che una volta connesso al Wi-Fi sembrerà attendere circa 30 secondi e quindi dovrebbe cambiare il fuso orario con successo.

    Si noti che questo non è stato testato con Wi-Fi in cui è necessario inserire una password in una pagina Web. Si spera che il fatto che questo avvenga alla fine di una connessione di rete dovrebbe consentire a un utente di inserire le credenziali in tempo sufficiente, altrimenti potrebbe essere necessario apportare ulteriori modifiche (verificare l'esistenza di una connessione, verificare di essere in grado di connettersi a Internet, attendere per X secondi se non è possibile connettersi a Internet e riprovare a ripetere Y volte


2
Peccato che nel 2018 questa sia ancora la risposta corretta. Credo che Gnome abbia un pacchetto (gnome-clocks) che gestirà questo, ma in KDE non esiste attualmente alcuna altra buona soluzione.
cardonatore

Puoi fare "if [" $ 2 "=" up "]" per verificare se la connessione di rete è attiva prima di eseguire il comando. Il secondo parametro è quale stato viene chiamato da NM.
flamusdiu,

-2

Non è chiaro cosa intendi per "aggiornamento del fuso orario".

Unix e Linux mantengono il tempo come numero di secondi dal 1 ° gennaio 1970 alle 00:00 UTC. L'orologio di sistema Unix è quindi indipendente dal fuso orario. I fusi orari non esistono nel kernel Linux; è solo quando un'applicazione di spazio utente visualizza il tempo che il numero di secondi dal 1970 viene interpretato usando un fuso orario. Di solito, questa interpretazione viene fatta tramite le funzioni della libreria C. Il fuso orario è selezionato dalla TZvariabile d'ambiente. Le definizioni del fuso orario (che consistono in un nome di fuso orario, offset da UTC, date in cui è in vigore l'ora legale e gli offset durante l'ora legale) fanno parte di GNU libc e sono generalmente incluse nelle distribuzioni Linux come pacchetto "tzdata". Pertanto, l'aggiornamento delle definizioni del fuso orario è una questione di eseguire apt-get upgrade, yum updateo qualche operazione simile.

Alcuni software, come Java, hanno i propri file di definizione del fuso orario, che devono essere aggiornati separatamente.

NTP tiene traccia del numero di secondi dal 1 ° gennaio 1900, UTC . Pertanto, NTP, come il kernel Unix, non ha il concetto di fusi orari.


2
Aggiornamento fuso orario, possiamo vedere il comando "data" stamperà l'ora e la data in base a / etc / localtime fuso orario, possiamo cambiare il fuso orario manualmente creando il collegamento simbolico di / usr / share / zoneinfo / America / Los_Angeles. ma questo è un modo manuale di fare. Voglio, dovrebbe aggiornare automaticamente il fuso orario del paese in cui mi trovo, piuttosto che farlo manualmente.
Programmatore incorporato

In termini semplici, è per un orario localizzato, gli aggiornamenti automatici del fuso orario sono necessari solo per le persone che viaggiano molto.
Cestarian
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.