Intel CPU を搭載した Mac が退潮していく感じが半端なく強い。
ソースがあるようなものはまだ良いが、 バイナリー配布されているアプリは対応していないものも多いし、 何より Apple が macOS でサポートしなくなる。
さて、そういう古い MacBook だけれど、 最近スリープから復帰した後にシステムの時刻がずれている。 [システム設定][一般][日付と時刻][日付と時刻を自動的に設定] を Off, On すると、タイムサーバーに時刻を尋ねるらしく、 まともな時刻に直る。 でも毎回やるのは面倒で、時々「あっ」ということになる。
原因はバッテリーが弱くなっているせいでは?と指摘されたが、 交換費用は結構高いようだ (3万円弱とか)。 最近は、Intel CPUでの動作はどうだろう?というチェック用途くらいにしか 使っていない Mac でこの出費は痛いなあ。 どうしよう。少し考えよう。
ChatGPT に尋ねてみた。 スリープから復帰したときに (wake 「起きる」 と表現するのか)、 時刻合わせする、という対症療法がある。 それをやってみるか (バッドノウハウのような気もするけれど)。
最初に LauchAgent を使え、ということを言われたが (「え、そんなことできるの?」)、 システムの時刻を変更するには、LaunchDaemon でないとダメみたいだ (「やっぱりそうだよねえ」)。
LauchDaemon を使って、wake したときに用意したスクリプトを走らせる。
まずシェル・スクリプトはこんな感じ (なるほど、という内容である)。
| /usr/local/bin/sync_time.sh -- 実は動かない |
#!/bin/bash logger "NTP sync triggered on wake" sntp -sS time.apple.com |
Launch Daemon に与えるスクリプト (というのかな?) はこんな感じ。
| /Library/LaunchDaemons/com.user.timesync.plist -- 実は動かない |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- root 権限で常駐 -->
<key>Label</key>
<string>com.user.timesync</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/sync_time.sh</string>
</array>
<!-- wake を検知 -->
<key>WatchPaths</key>
<array>
<string>/tmp/com.apple.wake_delay</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
|
sudo launchctl load /Library/LaunchDaemons/com.user.timesync.plist |
うまく行くでしょうか。
うまく行かなかった。紆余曲折 (動くまでに何度もやり直した …間違ったことを平気で教えて来る)。
最初に当該 Mac の macOS のバージョンを伝えなかったせいで、 古い macOS に対してしか有効でない回答をしてきた、ということになるのかな?
Sequoia だと言ったら、その場合は以下のようにして下さい、 とやっと使える内容を回答してきた。
| /usr/local/bin/sync_time.sh |
#!/bin/bash logger "Triggering timed update on wake…" /usr/sbin/systemsetup -setusingnetworktime off /usr/sbin/systemsetup -setusingnetworktime on |
| /Library/LaunchDaemons/com.user.timesync.plist |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.timesync</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/trigger_time_sync.sh</string>
</array>
<!-- wake 時に変化するシステムパス -->
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/var/run/wake_event</key>
<true/>
</dict>
</dict>
</dict>
</plist>
|
sudo launchctl load /Library/LaunchDaemons/com.user.timesync.plist sudo launchctl list | grep timesync |
| 回答するときに、「このやり方が有効かどうかは macOS のバージョンによります。 macOS ○●から□■まで有効です」のように答えてほしかったです。 |
3万円は節約の方向で。