Tôi nhận thấy một hiện tượng thú vị. Trên máy Lenovo G50 của tôi, multi-boot Windows 10 với một đống phân phối Linux, mỗi lần tôi khởi động hệ điều hành Microsoft, giờ bị lệch một giờ. Múi giờ được đặt đúng, nhưng widget số nhỏ ở góc dưới bên phải "giả mạo" nó 60 phút.
Tôi bắt đầu khám phá, đọc và kiểm tra, và nhận ra tôi nên viết một hướng dẫn nhỏ về điều này. Vấn đề cũng có thể ảnh hưởng đến người dùng Windows 10 độc lập, không tham chiếu đến hệ điều hành khác. Dù sao, chúng ta sẽ tập trung vào giải pháp phía Windows, và cách chúng ta có thể xoay sở vấn đề.
Có thể góp phần vào vấn đề?
Có nhiều lý do tại sao giờ Windows 10 có thể sai. Mọi khi thì giả định đây là vấn đề chung, và trường hợp cụ thể của họ là phổ quát. Thật không may, không phải vậy. Vấn đề tường lửa, vấn đề dịch vụ thời gian Windows, đồng bộ thời gian, có một vài kịch bản, v.v. Chúng ta không thể biết tất cả – nhưng chúng ta có thể giải quyết tất cả.
Cụ thể trong kịch bản dual-boot, chúng ta cần hiểu một vài khái niệm. Điều này được giải thích chi tiết trong phần giúp đỡ Ubuntu về chủ đề này. Đáng chú ý, mọi máy tính hiện đại lưu thời gian trong một cái gọi là hardware clock (đồng hồ phần cứng), là một phần của chipset và được cấp điện bởi pin nhỏ. Điều này cho phép máy tính giữ đúng thời gian và ngày khi bạn bật chúng, ngay cả khi chúng đã ngắt điện, dù cho một thời gian tương đối dài nếu giới hạn (vài tháng). Hệ điều hành có thể cập nhật giá trị này, thường khi được lệnh tắt. Hoặc chúng cũng có thể dùng hardware clock.
Hầu hết các bản phân phối Linux đặt hardware clock là UTC. Windows thường dùng local time (thời gian địa phương), thường tương ứng với bất kỳ 'local' múi giờ bạn đã chọn. Nếu và khi múi giờ thay đổi (cái vụ daylight saving time), có độ lệch 1 giờ (lùi hoặc tiến) trong local time, nhưng không phải trong UTC, vốn không đổi và không bị ảnh hưởng bởi DST hay thay đổi múi giờ. Do đó, khi bạn reboot từ hệ điều hành này sang hệ điều hành kia, tức là Linux sang Windows, cho đến khi Windows đồng bộ đồng hồ của nó, giờ có thể lệch một giờ. Đây là bí ẩn của vấn đề chúng ta.
Sửa lệch giờ Windows
Giải pháp có thể là: Thay đổi loại giá trị thời gian được lưu trong hardware clock bởi Linux. Hầu hết distro dùng UTC, và bạn có thể đổi đó. Chúng ta không làm vậy, vì chúng ta muốn làm Windows nghe lời.
Do đó, lựa chọn thay thế là làm Windows không dùng local time. Có hai tùy chọn để đạt được điều này: 1) Chúng ta sẽ cần thay đổi registry và dừng dịch vụ thời gian Windows, nhưng điều này nghĩa là Windows sẽ không cập nhật đồng hồ của nó 2) Lối hành động khác là làm Windows đồng bộ đồng hồ thường xuyên hơn mặc định, thường là một tuần trong Windows 7/8 và đã giảm xuống một ngày trong Windows 10. Tôi sẽ chỉ cho bạn cả hai, và bạn quyết định thích cái nào. Tôi tin tùy chọn thứ hai thanh lịch hơn.
Tùy chọn 1: Windows đặt thành UTC
Bạn sẽ cần tạo thay đổi registry. Điều hướng đến:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
Control\TimeZoneInformation
Và sau đó thay đổi key RealTimeIsUniversal với giá trị 1:
Reboot, xem có hoạt động không. Nếu không, bạn có thể cần tắt dịch vụ thời gian:
Tùy chọn 2: Task lên lịch đồng bộ thời gian
Hướng dẫn này giải thích một vài phương pháp làm, và cách không làm – rất giống vở kịch Monty Python "How Not To Be Seen". Thực sự, điều này phù hợp với ý định của tôi. Tạo một scheduled task chạy khi đăng nhập (logon) và đồng bộ thời gian. Vấn đề giải quyết. Hãy làm chi tiết.
Mở Task Scheduler > Create Task. Bạn có thể đặt task này bất cứ đâu. Thiết lập scheduled task hơi rối rắm, nhưng có thể đạt được. Trên tab General, đặt tên và mô tả task. Sau đó chọn user. Đây là cái thú vị, vì trong trường hợp tôi chạy với tài khoản limited, tôi phải chọn tài khoản Administrator để đạt được điều này, nhưng điều đó cũng nghĩa là chạy bất kể người dùng đăng nhập hay không – cũng không lưu mật khẩu, điều đó ổn, vì chúng ta chỉ cần truy cập tài nguyên local. Configure for Windows 10.
Sau đó, chúng ta cần trigger mới – cơ bản là khi nào. At log on (Khi đăng nhập).
Chúng ta giờ cần thiết lập hai action – một là chạy dịch vụ thời gian Windows, phòng khi nó chưa chạy. Chương trình chạy là %windir%\system32\sc.exe, và tham số start w32time task_started. Sau đó chúng ta cũng cần action thứ hai, là resync time. Chương trình là %windir%\system32\w32tm.exe, và tham số /resync.
Cuối cùng, điều kiện thực thi scheduled task là chạy dù trên nguồn AC hay pin, và dùng bất kỳ kết nối mạng nào. Click OK, và lần đăng nhập tiếp theo, mọi thứ nên ổn.
Đồng bộ thủ công
Bạn cũng luôn có thể đồng bộ thời gian thủ công. Bạn có thể mở applet Date and Time qua System Settings, Control Panel hoặc chuột phải vào đồng hồ system tray > Change Time and Date. Chọn tab Internet Time. Click Update now.
Kết luận
Đó là tất cả. Bất kể thiết lập hoạt động thực tế của bạn – single boot, dual-boot, multi-boot, chúng ta không quan tâm các hệ thống khác, chỉ Windows 10. Chúng ta muốn chắc chắn nó có giờ đúng, và chúng ta có hai tùy chọn để đạt được điều này. Buộc hệ thống dùng UTC hoặc tạo scheduled task chạy khi đăng nhập và resync đồng hồ. Cả hai đều tương đối lành tính, nhưng phương pháp sau ít xâm lấn hơn nói chung.
Hy vọng bạn thấy hướng dẫn này có giá trị, và nó có thể cứu bạn khỏi đau đầu khó chịu với vấn đề tương đối tầm thường nhưng không dễ bỏ qua. Hầu hết mọi người hiếm khi gặp phải, nhưng nếu họ gặp, giải pháp đều ở đây. Và xong.
Chúc vui.