解决 WSL2 时钟不同步问题的办法(转载翻译)

440

翻译自 https://github.com/microsoft/WSL/issues/8204#issuecomment-1338334154

通过配置 systemd-timesyncd,我解决了这个问题。

需要注意的是,这个方法会修改父 WSL 进程,所以所有的 WSL 实例时间都会被同步,因此你大概只需要在一个实例中配置

要使它工作,第一步要启用 systemd :

在 WSL distro 设置中添加 systemd flag
编辑 wsl.conf 来让 systemd 在系统启动时启动

把下列几行加到 /etc/wsl.conf (注意需要提权运行编辑器, 例如: sudo nano /etc/wsl.conf):

[boot]
systemd=true

如果你是用的是nano编辑器,用 CTRL+O 保存,CTRL+X 退出

(译者加)

使用命令添加

echo -e "[boot]\nsystemd=true" | sudo tee -a /etc/wsl.conf

接下来在 PowerShell 中运行 wsl.exe --shutdown,然后再启动。现在你的 systemd应该是启动了的。

(译者加)

如何判断systemd是否启用成功

ps --no-headers -o comm 1

如果命令返回的是 init 说明 systemd 未启用,如果是 systemd 那么你的 systemd 已启用成功了。

接下来安装 systemd-timesyncd:

sudo apt install systemd-timesyncd
sudo systemctl edit systemd-timesyncd

在编辑时,加上下面以 [Unit] 开头的两行:
image

最后启动服务:

sudo systemctl start systemd-timesyncd

查看状态:

timedatectl status
timedatectl timesync-status