缘起

今次的起因在于我的本本需要在家里、办公室切换不同的网络,不同的代理、不同的网关等等,每天做两次实在是太超标了,于是就谋求自动化。

编程

经过一段时间的关注,一条编程指南被发现有助于解决问题:

Technical Q&A QA1340

当然,Apple的尿性太差,links过一段时间就找不到了,所以这个技术问答实际是

Registering and unregistering for sleep and wake notifications

Q: How can my application get notified when the computer is going to sleep or waking from sleep? How to I prevent sleep?

所以,我可以xcode写个console程序,做成服务在后台跑,拿住事件之后fork一个shell做事情就可以了。

脚本

然而,毕竟要干的事太多,这段时间都在gwk上。嗯,gwk是一个API网关,以后再说。

所以我继续找啊找。天从人愿,当然会有人已经干了这事了:

https://www.kodiakskorner.com/log/258

Mac OS X: Automating Tasks on Sleep

所以,我需要干的事情是(bash):

brew install sleepwatcher
touch ~/.sleep
cat >~/.wakeup<<EOF
#!/bin/bash
/usr/bin/osascript -e "display notification \"waking up, banny $(date).\" with title \"Waking Up\""
EOF
chmod +x ~/.wakeup ~/.sleep

好了,现在合上盖子,去泡杯咖啡,回来打开MBP,一个工具自动完成了登录,随即我在通知区域看到了“Waking Up”的通知消息。

这就是我想要的!

试验了几次,发觉完全没问题。

接下去,我的任务是弄个脚本完成网络设置。下次再写。

后记

还有很多办法,当然未必很舒服,不过也很有用。例如pmset:

pmset -g log|grep -e ' Sleep ' -e ' Wakeup'

 

此外,直接grep日志文件也行得通,只不过都有点浪费,但在其他用途时或许也是可用的。