Предисловие или Немного о двойной загрузке

Нередки конфигурации, когда на компьютере установлены две операционные системы (Windows и Linux) в конфигурации двойной загрузки (или как модно говорить Dual Boot). Действительно, на первое время можно попробовать пользоваться и Linux, и Windows, а затем уже принять решение о полном переходе на Linux, если все ваши потребности удовлетворены.

Однако вы можете столкнуться с проблемой, что после переключения между операционными системами (загрузки в Linux после Windows) сбивается время на несколько часов вперед или назад. Собственно, с данной ситуацией столкнулся и я. Мне это не понравилось. К счастью, описанная проблема решается в пару кликов.

Виджеты времени Kubuntu

Почему сбивается время

Windows и Linux по разному работают с временем BIOS. Дело тут в наличии двух форматов представления времени UTC и localtime.

Linux и формат UTC

Операционные системы GNU/Linux (в том числе Mac OS X) считают, что время в BIOS указано в формате UTC (по Гринвичу). Соответственно, при загрузке Linux для преобразования UTC к локальному времени добавляет (отнимает) смещение текущего часового пояса, который выбрал пользователь. Проще говоря, чтобы получить локальное время для часового пояса Москвы UTC+3, Linux добавит 3 часа.

Windows и формат LocalTime

Windows же считает, что в время в BIOS хранится в формате localtime. Поэтому если вы указали новый часовой пояс или синхронизировали время с внешним источником, система соответственным образом меняет время в BIOS на локальное время.

Linux (Kubuntu 18.04 в моем случае) считает, что время в BIOS указано в формате UTC и дополнительно добавляет смещение часового пояса. Именно поэтому и сбивается время при переключении между Linux и Windows.

Как исправить смещение времени

Вариант 1

Шаг 1. Добавляем параметр RealTimeIsUniversal

Чтобы исправить такую ситуацию, нужно переключить Windows на использование времени в формате UTC с помощью параметра реестра RealTimeIsUniversal.

Для этого запускаем в Windows командную строку от имени администратора (команда контекстного меню) и с помощью приведенных далее команд добавляем необходимый параметр в реестр. Можете данный параметр добавить вручную, не принципиально, а всего лишь дело вкуса и предпочтений.

Запуск командной строки Windows от имени администратора

Для 32-битных систем:


reg add "HKLMACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f


Для 64-битных систем (нужно создавать параметр типа QWORD вместо DWORD):


reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 1


Редактор реестра Windows

Шаг 2. Отключаем синхронизацию времени с сетью Интернет

Дополнительно в Windows нужно отключить обновление времени из Интернета, так как служба времени Windows при каждом обновлении времени будет сбрасывать UTC время на локальное. Сделать это проще всего при помощи команды (не забываем запустить командную строку от имени администратора):


sc config w32time start=disabled


После выполнения указанной команды потребуется перезагрузиться в Linux, а затем снова в Windows.

Командная строка Windows

Вариант 2

Также можно переключить Linux на использование локального времени. В Kubuntu 18.04 и выше это можно сделать командой:


timedatectl set-local-rtc 1


Терминал в Kubuntu

Как вернуть настройку времени в Windows и Linux назад

Вернуть настройку времени назад легко. Для этого нужно выполнить обратные команды, которые были описаны выше (иначе говоря, вернуть синхронизацию времени и установить параметр реестра в ноль).

Для 32-битных систем:


reg add "HKLMACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 0 /f


Для 64-битных систем (нужно создавать параметр типа QWORD вместо DWORD):


reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_QWORD /d 0


Для включения синхронизации времени в Windows:


sc config w32time start=demand


Для возврата настроек на умолчание в Kubuntu 18.04 или Ubuntu 18.04 достаточно выполнить команду в Терминале:


sudo timedatectl set-local-rtc 0


Какой вариант выбрать, решайте сами. Лично я использую первый вариант. А какой вариант используете вы?


Еще материалы о Linux


Понравилась статья? Не очень? Тогда возможно, что вы напишите свою гораздо лучше. Просто перейдите по ссылке Размещение статей и ознакомьтесь с правилами публикации статей на сайте MultiBlog67.RU.

Комментарии   
0 #2 Super User 13.04.2020 21:08
Цитирую Mitai:
PS C:\WINDOWS\system32> sc config w32time start=disabled
Set-Content : Не удается найти позиционный параметр, принимающий аргумент "start=disabled".
строка:1 знак:1
+ sc config w32time start=disabled
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetContentCommand

Какая ОС используется?
Цитировать
0 #1 Mitai 15.01.2020 15:43
PS C:\WINDOWS\system32> sc config w32time start=disabled
Set-Content : Не удается найти позиционный параметр, принимающий аргумент "start=disabled".
строка:1 знак:1
+ sc config w32time start=disabled
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.C ommands.SetContentCommand
Цитировать
Добавить комментарий
Оставляя сообщение, вы соглашаетесь с политикой конфиденциальности сайта, размещенной по адресу https://multiblog67.ru/about/229-politika-konfidentsialnosti.html