👻
macOSで無線LANのSSIDが切り替わった際に通知を送る
背景
大学内で部屋を移動した際に無線LANのネットワークが切り替わっていることに気づかないことが多いのでどうにかしたい。
実行環境
- MacBook Pro (13-inch, M1, 2020)
- macOS Monterey (12.6)
設定
-
以下のシェルスクリプトを
~/bin/checkssid.sh
として保存~/bin/checkssid.sh#!/bin/zsh local ssid_file="/tmp/ssid-$USER" local prev_ssid="" if [ -f $ssid_file ]; then prev_ssid=$(head -n 1 $ssid_file) fi local ssid=$(/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk -F' SSID: ' '/ SSID: / {print $2}') echo $ssid > $ssid_file if [[ $ssid != $prev_ssid ]]; then # echo "SSID changed from $prev_ssid to $ssid" osascript -e 'display notification "'"SSID changed to $ssid"'" with title "Check SSID" sound name "default"' fi
-
とりあえず実行
% /bin/zsh ~/bin/checkssid.sh % rm /tmp/ssid-$USER
-
通知が届くことを確認したら、LaunchAgent に仕込む。以下の内容を
~/Library/LaunchAgent/checkssid.plist
として保存~/Library/LaunchAgent/checkssid.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>checkssid</string> <key>ProgramArguments</key> <array> <string>/bin/zsh</string> <string>/Users/funa/bin/checkssid.sh</string> </array> <key>StartInterval</key> <integer>10</integer> <key>StandardOutPath</key> <string>/tmp/checkssid.out</string> <key>StandardErrorPath</key> <string>/tmp/checkssid.err</string> </dict> </plist>
- 10行目の
checkssid.sh
のパス(/Users/funa/bin/checkssid.sh
)を各自の絶対パスに変更する - SSIDをチェックする間隔を
<integer>
タグ内の数字で指定(上記例では 10秒間隔)
- 10行目の
-
念の為、lint で構文チェック
% plutil -lint ~/Library/LaunchAgents/checkssid.plist /Users/funa/Library/LaunchAgents/checkssid.plist: OK
-
LaunchAgent に登録
% launchctl load ~/Library/LaunchAgents/checkssid.plist % launchctl list | grep -e PID -e checkssid PID Status Label - 0 checkssid
Status
が0
ではなかった場合、実行時にエラーが出ているので/tmp/checkssid.err
を確認する。
うまく動作しているなら10秒後に通知が表示され、その後は SSID が切り替わった際に通知が届く。
考察
- 再起動後に必ず通知が出るのを避けたい場合、
checkssid.sh
3行目のlocal ssid_file=
の右辺をホームディレクトリ以下(ex.$HOME/.ssid.txt
等)に変更する - 通知音を変更したい場合は
checkssid.sh
12行目のsound name "default"
をsound name "Ping"
などに変更(使用可能な名前は/System/Library/Sounds/*.aiff
もしくは~/Library/Sounds/*.aiff
参照)。 - 通知がうざい、と思ったら以下のコマンドで登録を解除
% launchctl unload ~/Library/LaunchAgents/checkssid.plist
Discussion