A Day in the Life

WSL環境でスリープ復帰時に時刻がずれる問題を Windows 側から修正する

久しぶりに WSL2 環境で開発をしていると時刻がずれていることに気づく。以前は起こっていなかった、スリープ復帰時に WSL 側の時計がずれる問題が発生してしまうようになってしまったようだ。

古くからある問題で、昨日の Insider Preview のLinuxカーネルで修正済みなのでWindows 10 21H1 では直りそうだけど、現状問題が起きたままだ。

Linux 側で hwclock --hctosys で直るのだけど、いちいちコマンドを叩くのが面倒だし、WSL2 側での定期実行、たとえば cron.d を動かすのはいがいと厄介。なので、Windows 側で wsl 側を叩く以下のようなバッチファイルを用意して、それを Windows のタスクスケジューラで実行する。

wsl.exe -u root --exec /usr/sbin/hwclock --hctosys

スリープ復帰時にコマンド実行するタスクスケジューラはググるといくつか出てくるので割愛する。これで問題なくなった。と、ここまで書いた所で、ちょうどissues のコメントに同様のことを一行でやる方法が

schtasks /Create /TN wsl-clock /TR "wsl.exe -u root sh -c hwclock -s" /SC ONEVENT /EC System /MO "*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and (EventID=107 or EventID=507)]]" /F

なるほど、schtasks でタスクスケジューラに登録できるのね。というわけで、このコマンドで簡単にスリープ復帰の時刻ズレ問題を修正できるのであった。

関連するかもエントリー

WSL 環境で、環境変数 BROWSER をセットすると便利
WSL 環境(というか Linux)では、ENV['BROWSER'] を見て開くブラウザを決定している実装が多い(たぶん)。たとえば WSL2 側の gh pr create --web コマンドで Windows 側のブラウザで Pull Request 編集画面が立ち上がっ...
WSL 環境(というか Linux)では、ENV['BROWSER'] を見て開くブラウザを決定している実装が多い(たぶん)。たとえば WS...
MacOS ユーザが WSL では無い Windows のコンソール環境を整える
先日、メインの開発環境を MacOS から Windows 10 Professional へと移しました。理由としては主に2点で、現在仕事を自宅の固定席で行っており PC を持ち運びする必要がなくなったため Mac より高速で安価な Windows デスクトップ機を使いたいこと...
先日、メインの開発環境を MacOS から Windows 10 Professional へと移しました。理由としては主に2点で、現在仕事...