まだやってる。。。
数日前に以下書いてよし日常使いするぞ。。。と思って本日使ったら切れない。。。あらら。
Macbookの蓋の状態変化をみてWifiをオンオフをするスクリプトをつくったん - memorandums
帰ってきて調査するとなんとMacがスリープしている。蓋を閉じて5秒くらいでスヤスヤ寝ている(ちなみにスリープするならWifiも切れるやろと思った方は鋭い、なぜか切れないんですね。。。WifiとBluetootj)。。。上記では60秒間隔で蓋状態を見ているのでWifiを切入しようとする前に寝ているのでした。。。
テストのときには60秒も待つの面倒だったので10秒くらいでテストしてたんですね。。。だから気づかなかったというオチでした。
じゃ、監視間隔を5秒とかにすればいいのか。。。とか考えたらモバイルルータの切り忘れごときでMacに負荷をかけるのもな。。。と。大した影響ないんでしょうけどやはり無駄は徹底的に排除したいのがエンジニアマインドです。
で、調べると、実は蓋を閉じたら何かをするというコマンドが既にあることがわかりました。2018年のQiitaの記事です。。。まだ動きました。
Mac のスリープ/復帰時にスクリプトを実行する #Mac - Qiita
早速登録しました。蓋を開けるときには何もせず、蓋を閉じたときにもしモバイルルータにWifiが接続されていたらWifiを切入します。
まず蓋検知をする以下をインストールしておきます。
brew install sleepwatcher
あとは以下ファイル2つをいれるだけです。shはchmod +xしておいてください。
~/Library/LaunchAgents/wifi_off_on.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>de.bernhard-baehr.sleepwatcher</string> <key>ProgramArguments</key> <array> <string>/opt/homebrew/sbin/sleepwatcher</string> <string>-V</string> <string>-s /Users/ktakahas/wifi_off_on.sh</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist>
~/wifi_off_on.sh
#!/bin/bash # SSID取得(Sequoia以降じゃないと動作しないとか?) ssid=$(ipconfig getsummary en0 | awk -F' SSID : ' '/ SSID : / {print $2}') # SSIDがモバイルWifi? if [ "$ssid" == "xxxxxxxx" ]; then # 蓋の状態を取得(Yes = 閉じている) lid_closed=$(ioreg -r -k AppleClamshellState | grep -i "AppleClamshellState" | awk '{print $NF}') lid_state=$([ "$lid_closed" == "Yes" ] && echo "closed" || echo "open") if [ "$lid_state" == "closed" ]; then networksetup -setairportpower en0 off sleep 2 networksetup -setairportpower en0 on fi fi
めっちゃ短くなりました。。。なんだか。
でも、確実に動作するようです。
よかったです。