Establecer automáticamente la zona horaria de Linux según la ubicación

19

¿Cómo podemos configurar automáticamente la zona horaria predeterminada del sistema en Linux usando Internet? Tal como lo veo, los servidores NTP pueden actualizar solo la hora, pero no la zona horaria. ¿Hay algún servidor que pueda cambiar la zona horaria?

Programador Embebido
fuente
1
¿Está diciendo que el cambio de zona horaria del horario de verano al horario estándar?
slm
Aquí hay dos cosas. 1. si hay cambio en el país. 2. segundo si hay un cambio en el ahorro de luz diurna.
Programador incorporado el
Los servidores ntp manejan los cambios en el horario de verano automáticamente. No conozco ningún servidor que detecte su ubicación y actualice su zona horaria automáticamente (como lo hace un teléfono celular).
drs
2
@drs Más exactamente, NTP no se preocupa por la zona horaria en absoluto. La hora NTP es UTC, simple y llanamente, y la conversión de zona horaria corresponde al cliente. Un cliente NTP específico podría realizar una conversión de zona horaria, o no, pero dado que la mayoría de los sistemas * nix tienen el reloj del sistema configurado en UTC de todos modos, no debería ser necesario.
un CVn

Respuestas:

36

Hace un tiempo escribí un programa que hace esto: tzupdate .

Puede ver en qué establecería su zona horaria (sin configurarlo realmente) ejecutando tzupdate -p:

$ tzupdate -p
Europe/Malta

Puede configurarlo de verdad ejecutándose tzupdatecomo root.

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

Esto funciona por:

  • Geolocalizando su IP actual
  • Obtener la zona horaria para esa ubicación
  • Actualización del enlace simbólico en /etc/localtimepara apuntar al archivo zoneinfo para esa zona horaria
Chris Down
fuente
6

Este es un hilo antiguo, pero sigue siendo relevante para kubuntu 1710 que no cambia la zona horaria automáticamente. Estoy usando la solución de Chris Down para tzupdate, pero también me aseguro de que se active cuando el sistema intenta conectarse a una red (wifi u otra). Esto supone que está utilizando Network Manager.

Abra una terminal primero.

  1. Instalar tzupdate

    sudo apt install python-pip
    pip install -U tzupdate
    

    Luego, asegúrese de que sea accesible para todos los usuarios

    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. Prueba que funciona

    sudo tzupdate
    
  3. Luego debemos asegurarnos de que todos los usuarios puedan acceder a este

    sudo su -
    tzupdate
    

    que lo coloca como root y luego verifica que el comando cambie su zona horaria. Luego, asegúrese de salir para regresar como usuario normal

    exit
    
  4. Asegúrese de que tzupdate se pueda ejecutar con sudo sin contraseña. Esto es necesario para un paso posterior cuando activamos esto desde networkmanager que ejecuta esto en segundo plano. Escribe esto en una terminal para editar el archivo sudoers

    sudo visudo
    

    Agregue esta línea al final del archivo

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

    Presione CTRL-X y luego presione Y y luego ENTER para guardar los cambios

  5. Luego nos aseguramos de que NetworkManager siempre llame a esto después de activar un cambio de conexión de red (por ejemplo, cuando se conecta a un wifi). Para esto, creamos un archivo llamado tzupdate en la carpeta dispatcher.d que simplemente llama a sudo tzupdate. El archivo necesita permisos ejecutables para ejecutarse

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

    Tenga en cuenta que NetworkManager llamará a ejecutar sudo (es decir, sudo tzupdate) que normalmente solicitará una contraseña.

    Puede haber una mejor manera de hacer esto, es decir, hacer que NetworkManager llame a esto solo cuando active una conexión y no también hacia abajo (como lo hará anteriormente): he intentado poner el script en / etc / network / if-up .d pero esto no me ha funcionado

  6. Para probar esto en Kubuntu: cambie su zona horaria local a otra (vaya al plasmoide Fecha en su barra de tareas y haga clic derecho y seleccione 'Ajustar fecha / hora' y luego 'Zona horaria' en la pestaña)

    Apague su wifi y vuelva a encenderlo: verá que una vez que se conecta al wifi, parece esperar unos 30 segundos y luego debe cambiar su zona horaria con éxito.

    Tenga en cuenta que esto no se ha probado con wifi, donde es necesario ingresar una contraseña en una página web. Afortunadamente, el hecho de que esto se ejecute al final de una conexión de red debería proporcionar suficiente tiempo para que un usuario ingrese sus credenciales; de lo contrario, esto podría necesitar más ajustes (verifique que exista una conexión, verifique que pueda conectarse a Internet, espere durante X segundos si no puede conectarse a Internet y luego vuelva a intentar Y veces

Bharat Rajagopalan
fuente
2
Es una pena que en 2018 esta siga siendo la respuesta correcta. Creo que Gnome tiene un paquete (gnome-clocks) que manejará esto, pero en KDE no hay otra buena solución actualmente.
cardonador
Puede hacer "if [" $ 2 "=" up "]" para verificar si la conexión de red está activa antes de ejecutar el comando. El segundo parámetro es qué estado está llamando NM.
flamusdiu
-2

No está claro qué quiere decir con "actualización de zona horaria".

Unix y Linux mantienen el tiempo como la cantidad de segundos desde el 1 de enero de 1970 a las 00:00 UTC. El reloj del sistema Unix es, por lo tanto, independiente de la zona horaria. Las zonas horarias no existen en el kernel de Linux; es solo cuando una aplicación de espacio de usuario muestra el tiempo que el número de segundos desde 1970 se interpreta utilizando una zona horaria. Por lo general, esta interpretación se realiza a través de las funciones de la biblioteca C. La zona horaria es seleccionada por la TZvariable de entorno. Las definiciones de zona horaria (que consisten en un nombre de zona horaria, desplazamiento de UTC, fechas en que el horario de verano está vigente y las compensaciones durante el horario de verano) son parte de GNU libc, y generalmente se incluyen en las distribuciones de Linux como un paquete "tzdata". Por lo tanto, la actualización de las definiciones de zona horaria es cuestión de correr apt-get upgrade, yum updateo alguna operación similar.

Tenga en cuenta que algunos programas, como Java, tienen sus propios archivos de definición de zona horaria, que deben actualizarse por separado.

NTP realiza un seguimiento de la cantidad de segundos desde el 1 de enero de 1900, UTC . Por lo tanto, NTP, como el kernel de Unix, no tiene concepto de zonas horarias.

200_success
fuente
2
Actualización de la zona horaria, podemos ver que el comando "fecha" imprimirá la hora y la fecha de acuerdo con / etc / localtime timezone, podemos cambiar la zona horaria manualmente creando un enlace simbólico de / usr / share / zoneinfo / America / Los_Angeles. pero esta es una forma manual de hacerlo. Quiero, debería actualizar automáticamente la zona horaria del país donde estoy, en lugar de hacerlo manualmente.
Programador incorporado el
En términos simples, es por un tiempo localizado, aunque las actualizaciones automáticas de la zona horaria solo son necesarias para las personas que viajan mucho.
Cestarian