[AYUDA]Convivencia windows-kubuntu= desfase de reloj

Bueno, como soy un firme creyente de la documentación(en parte porque sigo aprendiendo) Voy a publicar la solución de este problema en base a las respuestas recibidas:

Problema
Muy buenas, veréis, tengo un problema al que nunca le he dado mucha importancia, pero me lleva pasando mínimo desde hace un par de años. El caso es que ya huele y quiero saber porque pasa y como arreglarlo. Me ha pasado tanto con windows 10 y 7 así como debian, ubuntu y kubuntu.

En cualquiera de los casos tengo un disco con windows(actualmente 10) y en el otro una distro de linux(actualmente kubuntu 18.04). En ambos sistemas operativos tengo configurada bien la zona horaria y su configuración de forma automática. El caso es que linux siempre la pilla bien, pero es cambiar a windows y siempre me toca desactivar y reactivar la configuración automática para que pille bien la hora. Os podréis imaginar que durante la mitad del año el desfase es de una hora y con el cambio de horario al formato verano el desfase pasa a ser de 2 horas.

Me imagino que es problema de windows ya que resulta ser que es el que se pierde. pero como puedo darle fin? es algo de la bios quiza?


Soluciones:
NOTAS
Zokormazo escribió:Linux guarda la hora en cmos en utc por defecto
Windows guarda la hora en cmos en tu localtime por defecto.

Asi que cuando saltas de uno a otro, tienes un desfase de 1-2 horas (dependiendo del DST) entre uno y otro hasta que sincronicen la hora por ntp.

Cambia la conf de linux para que use localtime en cmos o el de windows para que use utc (ambas cosas son posibles, la que mas rabia te de) y ya no tendrás ese desfase



Linux:
lordbox escribió:Una de las formas de acabar con este problema es cambiando la forma que Linux utiliza para procesar la fecha y la hora. Abre un terminal y ejecuta:
sudo timedatectl set-local-rtc 1

Esta es la forma mas sencilla de proceder, sin embargo puede traer problemas con el DST como se indica en
man timedatectl


set-local-rtc [BOOL]
Takes a boolean argument. If "0", the system is configured to maintain the RTC in
universal time. If "1", it will maintain the RTC in local time instead. Note that
maintaining the RTC in the local timezone is not fully supported and will create various
problems with time zone changes and daylight saving adjustments. If at all possible, keep
the RTC in UTC mode. Note that invoking this will also synchronize the RTC from the system
clock, unless --adjust-system-clock is passed (see above). This command will change the
3rd line of /etc/adjtime, as documented in hwclock(8).


Windows:
Hay que tocar el registro de windows. Antes de nada recordar que cualquier modificación de regedit sin saber(como yo :P ) puede suponer mas de un problema, por lo que recomiendo hacer una backup antes de empezar a tocar nada. Y ya sabiendo esto vamos al lío.

Para realizar la modificación me he guiado por el siguiente enlace:
https://windtux.com/cambiar-el-horario-de-windows-a-utc-para-que-coincida-con-el-de-linux-en-caso-de-tener-un-arranque-dual


Para win 10 64bits:
Abrir el registro (regedit) de Windows y navegamos en las siguientes claves: HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> TimeZoneInformation, allí creamos el nuevo valor QWORD (con click derecho) RealTimeIsUniversal y como información del valor ponemos 1, aceptamos y cerramos el registro.


Para win 10 32bits:
Abrir el registro (regedit) de Windows y navegamos en las siguientes claves: HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> TimeZoneInformation, allí creamos el nuevo valor DWORD (con click derecho) RealTimeIsUniversal y como información del valor ponemos 1, aceptamos y cerramos el registro.


NOTA:
El registro de windows consta de 5 claves principales, en las soluciones detalladas anteriormente se nombra HKEY_LOCAL_MACHINE debido a que es la parte que Contiene la información de la configuración
del equipo(para cualquier usuario). Básicamente es la información
que está siendo utilizada por las aplicaciones, por los controladores,
la configuración de todos los usuarios. Es igual que hkey_classes_root
pero en este caso guarda la información para todos los usuarios.


Lo siguiente es abrir con derechos de admin el cmd de windows y aplicar la siguiente orden:
sc config w32time start= disabled


Con esto ya debería estar todo si antes no has tocado nada en linux. De no ser así, lo único que nos falta es dejar linux como estaba con el comando
sudo timedatectl set-local-rtc 0


Por último hacer una aclaración. en la guía que he enlazado se comenta que tras hacer todo este jaleo toquemos la hora de la BIOS y que si algo sale raro la toquemos igual en windows... no hace falta ya que si volvemos a tocar la hora de la BIOS, a partir de ahora tanto windows como linux modificarán ésta al estar en formato UTC y no RTC. por tanto siempre habrá un desfase entre la hora de windows/linux con la de la BIOS. Lo unico que de verdad nos importa es que tanto windows como linux ya no tengan problemas con su sincronización de la hora.
Linux guarda la hora en cmos en utc por defecto
Windows guarda la hora en cmos en tu localtime por defecto.

Asi que cuando saltas de uno a otro, tienes un desfase de 1-2 horas (dependiendo del DST) entre uno y otro hasta que sincronicen la hora por ntp.

Cambia la conf de linux para que use localtime en cmos o el de windows para que use utc (ambas cosas son posibles, la que mas rabia te de) y ya no tendras ese desfase
Una de las formas de acabar con este problema es cambiando la forma que Linux utiliza para procesar la fecha y la hora. Abre un terminal y ejecuta:
sudo timedatectl set-local-rtc 1
Zokormazo escribió:Linux guarda la hora en cmos en utc por defecto
Windows guarda la hora en cmos en tu localtime por defecto.

Asi que cuando saltas de uno a otro, tienes un desfase de 1-2 horas (dependiendo del DST) entre uno y otro hasta que sincronicen la hora por ntp.

Cambia la conf de linux para que use localtime en cmos o el de windows para que use utc (ambas cosas son posibles, la que mas rabia te de) y ya no tendras ese desfase


Pero te refieres a la configuracion del auto? o a dejarlo en manual, porque por ejemplo en linux no veo forma de cambiar a utc a no ser que sea con manual. ya que en auto se me queda siempre en cest.
lordbox escribió:Una de las formas de acabar con este problema es cambiando la forma que Linux utiliza para procesar la fecha y la hora. Abre un terminal y ejecuta:
sudo timedatectl set-local-rtc 1


Interesante, luego le echo un vistazo.
alohl669 escribió:
Zokormazo escribió:Linux guarda la hora en cmos en utc por defecto
Windows guarda la hora en cmos en tu localtime por defecto.

Asi que cuando saltas de uno a otro, tienes un desfase de 1-2 horas (dependiendo del DST) entre uno y otro hasta que sincronicen la hora por ntp.

Cambia la conf de linux para que use localtime en cmos o el de windows para que use utc (ambas cosas son posibles, la que mas rabia te de) y ya no tendras ese desfase


Pero te refieres a la configuracion del auto? o a dejarlo en manual, porque por ejemplo en linux no veo forma de cambiar a utc a no ser que sea con manual. ya que en auto se me queda siempre en cest.
lordbox escribió:Una de las formas de acabar con este problema es cambiando la forma que Linux utiliza para procesar la fecha y la hora. Abre un terminal y ejecuta:
sudo timedatectl set-local-rtc 1


Interesante, luego le echo un vistazo.

Me refiero a la forma en la que se guarda, no a la forma en la que lo ves. En windows era un valor del registro, en linux una en /etc
Es lo que te han dicho antes, por defecto Windows usa la hora local, y Linux la UTC.

Basta con que a uno u otro lo cambies para que coincidan. Para que ambos usen la Local o ambos la UTC.

Lo fácil es cambiar Linux a la local y ya está, supongo que el comando que te indicó el compañero antes servirá para ello.
Lo cierto es que si.
lordbox escribió:Una de las formas de acabar con este problema es cambiando la forma que Linux utiliza para procesar la fecha y la hora. Abre un terminal y ejecuta:
sudo timedatectl set-local-rtc 1

Ha sido mano de santo. He tardado en responder pero gracias!!

Darumo escribió:Es lo que te han dicho antes, por defecto Windows usa la hora local, y Linux la UTC.

Basta con que a uno u otro lo cambies para que coincidan. Para que ambos usen la Local o ambos la UTC.

Lo fácil es cambiar Linux a la local y ya está, supongo que el comando que te indicó el compañero antes servirá para ello.

Exactamente como has dicho

Esto es un fragmento de man timedatectl
.
.
.
set-local-rtc [BOOL]
           Takes a boolean argument. If "0", the system is configured to
           maintain the RTC in universal time. If "1", it will maintain the
           RTC in local time instead.



En fin. Muchísimas gracias a los 3!!!

Aunque me da un poco por saco, al final esta ha sido la solución mas rápida y sencilla. sin embargo leyendo las notas de timedatectl usando este método el sistema no se actualizará automáticamente con el DST nunca. Y viendo que windows nunca se actualiza al arranque(de hacerlo ni me hubiera dado cuenta del problema ya que constantemente un SO pisaría la hora del otro y viceversa)al final me tendré que resignar a comprobar el tema por mi cuenta de vez en cuando.

EDIT:
Bueno, como soy un firme creyente de la documentación(en parte porque sigo aprendiendo) Voy a publicar la segunda parte de la solución de este problema, dejar linux como estaba y configurar windows para que asuma el sistema UTC que como bien ha dicho @Zokormazo simplemente hay que tocar el registro de windows. Antes de nada recordar que cualquier modificación de regedit sin saber(como yo :P ) puede suponer mas de un problema, por lo que recomiendo hacer una backup antes de empezar a tocar nada. Y ya sabiendo esto vamos al lío.

Para realizar la modificacion me he guiado por el siguiente enlace:
https://windtux.com/cambiar-el-horario-de-windows-a-utc-para-que-coincida-con-el-de-linux-en-caso-de-tener-un-arranque-dual


Para win 10 64bits:
Abrir el registro (regedit) de Windows y navegamos en las siguientes claves: HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> TimeZoneInformation, allí creamos el nuevo valor QWORD (con click derecho) RealTimeIsUniversal y como información del valor ponemos 1, aceptamos y cerramos el registro.


Para win 10 32bits:
Abrir el registro (regedit) de Windows y navegamos en las siguientes claves: HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> TimeZoneInformation, allí creamos el nuevo valor DWORD (con click derecho) RealTimeIsUniversal y como información del valor ponemos 1, aceptamos y cerramos el registro.


NOTA:
El registro de windows consta de 5 claves principales, en las soluciones detalladas anteriormente se nombra HKEY_LOCAL_MACHINE debido a que es la parte que Contiene la información de la configuración
del equipo(para cualquier usuario). Básicamente es la información
que está siendo utilizada por las aplicaciones, por los controladores,
la configuración de todos los usuarios. Es igual que hkey_classes_root
pero en este caso guarda la información para todos los usuarios.


Lo siguiente es abrir con derechos de admin el cmd de windows y aplicar la siguiente orden:
sc config w32time start= disabled


Con esto ya debería estar todo si antes no has tocado nada en linux. De no ser así, lo unico que nos falta es dejar linux como estaba con el comando
sudo timedatectl set-local-rtc 0


Para que linux coja también la hora de UTC y dejarlo como debería estar ya que asi nos lo indica la documentación.
set-local-rtc [BOOL]
Takes a boolean argument. If "0", the system is configured to maintain the RTC in
universal time. If "1", it will maintain the RTC in local time instead. Note that
maintaining the RTC in the local timezone is not fully supported and will create various
problems with time zone changes and daylight saving adjustments. If at all possible, keep
the RTC in UTC mode. Note that invoking this will also synchronize the RTC from the system
clock, unless --adjust-system-clock is passed (see above). This command will change the
3rd line of /etc/adjtime, as documented in hwclock(8).


Por último hacer una aclaración. en la guía que he enlazado se comenta que tras hacer todo este jaleo toquemos la hora de la BIOS y que si algo sale raro la toquemos igual en windows... no hace falta ya que si volvemos a tocar la hora de la BIOS, a partir de ahora tanto windows como linux modificarán ésta al estar en formato UTC y no RTC. por tanto siempre habrá un desfase entre la hora de windows/linux con la de la BIOS. Lo unico que de verdad nos importa es que tanto windows como linux ya no tengan problemas con su sincronización de la hora.

Si veis que me he colado en alguna parte o que mis explicaciones fallan en algo comentarlo please, que cuanto mas completo sea esto mejor. ;)
6 respuestas