導入
Wifi接続先に応じてネットワーク環境設定を自動で切り替える
こちらの記事と同じようなことをやりたかったがどうもSequoiaでは全く同じようには行かないらしく、同記事のコメントの情報も合わせてmacOS Sequoiaに対応した設定方法を残しておく。
ちなみに私は自宅でのみIPを固定したいので、ネットワーク環境の数が"自動"(デフォルト)と"自宅"のみになっているが、"会社"、"自宅"、"それ以外"などで分けたい場合も、シェルスクリプトの分岐が多くなるだけでだいたい同じだと思う。
Special Thanks!
- @naname さんの記事:Wifi接続先に応じてネットワーク環境設定を自動で切り替える
- 同記事のコメント欄の皆様
- networksetup -getairportnetwork return You are not associated with an AirPort network
環境
- MacBook Air (M4, 2025)
- macOS Sequoia 15.5
"ネットワーク環境"の設定
-
右上のリンゴマークからシステム環境設定を開く
-
"ネットワーク"を選択
-
これを設定したい数だけ行う(自分の場合は1つだけ)
おそらく"自動"がデフォルトの設定であると思われる
シェルスクリプト
#!/bin/zsh
switchtolocation() {
currentlocation=`networksetup -getcurrentlocation`
if test $currentlocation = $1; then
return
fi
scselect `scselect|grep ${1}|cut -b 4-40`
osascript -e 'display notification "'"ネットワーク環境を「${1}」へ変更しました。"'" with title "'"${0##*/}"'" subtitle "'"${2}"'"'
}
ADAPTER=en0
airportpower=`networksetup -getairportpower ${ADAPTER}|cut -d' ' -f4`
if test ${airportpower} = 'Off'; then
echo 'Wifi is Off.'
exit
fi
ssid=`ipconfig getsummary ${ADAPTER} | awk -F ' SSID : ' '/ SSID : / {print $2}'`
case "$ssid" in
"自宅のSSID")
switchtolocation "自宅" ${ssid}
;;
*)
switchtolocation "Automatic" ${ssid}
;;
esac
ADAPTER=
の行は、お使いの環境に合わせて変更してください(Wi-Fiはen0?)
確認は以下のコマンドでできるかと思います。
networksetup -listallhardwareports
出力例
Hardware Port: Ethernet Adapter (en3)
Device: en3
Ethernet Address: 22:46:7e:bc:d7:ef
Hardware Port: Ethernet Adapter (en4)
Device: en4
Ethernet Address: 22:46:7e:bc:d7:f0
Hardware Port: AX88179A
Device: en6
Ethernet Address: c8:a3:62:5a:74:7b
Hardware Port: Thunderbolt Bridge
Device: bridge0
Ethernet Address: 36:0e:ab:fc:fe:c0
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: 2c:ca:16:61:eb:9e
Hardware Port: Thunderbolt 1
Device: en1
Ethernet Address: 36:0e:ab:fc:fe:c0
Hardware Port: Thunderbolt 2
Device: en2
Ethernet Address: 36:0e:ab:fc:fe:c4
VLAN Configurations
===================
また、"自宅のSSID"の部分をトリガーとしたいWi-FiのSSIDに、"自宅"の部分を、あなたがネットワーク環境設定でさきほど作成した名前に変更してください。
作成したシェルスクリプトを好きな場所に配置します。
私は~/bin/Network_environment_switch.sh
として保存しました。
続いて実行権限を付与します。
chmod +x スクリプトのパス
スクリプトのパスは各位が保存した場所に変更してください。
続いてWi-Fi接続時に自動で上記スクリプトを実行する設定を行います。
<?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>wifi-detector</string>
<key>ProgramArguments</key>
<array>
<string>スクリプトのパス</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration/com.apple.wifi.message-tracer.plist</string>
</array>
</dict>
</plist>
"スクリプトのパス"は変更してください。
元記事では、WatchPaths
に/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
を指定していましたが、コメント欄によるとBig Surあたりからこのファイルが変更されなくなったらしく、代わりに/Library/Preferences/SystemConfiguration/com.apple.wifi.message-tracer.plist
にするとよいとのことでした。
このファイルを~/Library/LaunchAgents
に好きな名前で保存します。私はwifi-detector.plist
としました。
最後に、以下のコマンドを実行します。
launchctl load <作成したplistのパス>
"作成したplistのパス"は変更してください。
以上です。バックグラウンド項目の追加が云々と通知が出てきますが、無視します。