Sleepからの解除時、ネットワークプロファイルをアクセスポイント名で自動で切り替える
使用しているMacの環境は OS X El Capitan 10.11.5, Mac book Proです。
背景と課題
会社内のネットワークを使うにはProxyの設定が必要です。インフラ部門からは、Proxyの自動設定のためのファイル(?)が用意されていて、通常はこれを Automatic Proxy Configurationに設定しておけばいいのですが、どうもMac対応がうまく行っていないのかわかりませんが、手動でProxyを設定しないとうまくいかないことに多々遭遇していました。Macを自宅に持ち帰り利用する場合にはProxyを外す必要があり、このあたりの操作がメンドウだなぁと感じており、以下のように対応してみました。
Mac OS X のネットワークプロファイルを設定する
これを始める前はいちいち手でProxiesの設定をぽちぽち変更していたのですが、「Location」という設定があることに気づき、、これを使うことにしました。Locationに'Intra'を作成し、Intraには固定でProxyを設定するようにしました
これで従来よりは簡単にネットワーク設定を切り替えられるようになりましたが、案外、この切替までのメニュー操作が深くてメンドウなんです。なんとかならんかなと、スクリプト化してみました。
現在つながっているSSIDの名前を調べて、それに応じて 設定したネットワークプロファイルを切り替えます。切り替えには scselect
というコマンドを使っています。試しにterminalでscselect
を実行してみれば動きがわかると思います。
#!/bin/bash
# set AccessPoint uniqe name for switch profile.
appname=Buffalo
if [ "`networksetup -getairportnetwork en0 | awk '{print $4}'`" = "$appname" ]; then
scselect Intra
else
scselect Automatic
fi
https://gist.github.com/kobakou/a54f806bc3550e646a31837eafdab982
appname の部分をIntraで使っているSSIDに変更してください。
Sleep解除でスクリプトを自動実行して、自動設定変更
こうなると、Sleepからの解除等をトリガにこのスクリプトを動かして自動設定して欲しいですよね。いろいろ探してみたのですがなかなかお手軽な方法が見つからず、、。 Sleepwatcherを使うと良さそうなことがわかりました。(他にももっと楽な方法があれば教えて下さい!)Readme.rtfの手順にしたがって SleepWatcherをインストールして上記のスクリプトを実行するように設定!
SleepWatcherの導入手順はこの記事が参考になりました。ざっとログを貼ると、
$ sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher /usr/local/sbin
$ sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8
$ cp ~/Desktop/sleepwatcher_2.2/config/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist ~/Library/LaunchAgents/
$ launchctl load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist
$ launchctl list | grep sleepwatcher
先ほどのスクリプトを.wakeupで呼べるようにしておく
$ ln -s ~/Documents/tools/check-n-select-netprof.sh ./.wakeup
これでうまくいきました(^^)
運用後の後日談: Sleep解除だと早すぎるので Alfred から実行できるように設定する
実際、運用していて分かったのですが、同じ場所にいるといいのですが案外場所を移動しているとSleep解除時はWiFiがまだ接続されていないことが多く、期待通りのアクセスポイント名(SSID)が取れないことが良く有りました。
仕方なくTerminalを起動して、実行することがあったのですが、せっかくなのでAppleScriptで起動できるようにして、それを Alfred で呼び出すようにしました。
do shell script "~/Documents/tools/check-n-select-netprof.sh"
display dialog result
こんなScriptを保存しておきます。
Alfredはデフォルトでは AppleScript を探してくれないので、チェックを入れておきます。
これで、うまくつながらない際にも、さくっとAlfredからスクリプトを実行できるようになりました。
これだけさくっと実行できるなら、Sleep解除を自動検出する必要はなかったですね。と、いまは気付きました。
さらに後日談
.sh
を .app
としておくとAlfredから呼び出すことがわかり、Alfredからサクッと 自動選択スクリプトを実行するのが一番確実とわかりました。ついでにBannerとしてさらっと実行結果を通知する感じに変更。
この Script(Github gist) を、.app
にリネームして使えます。
(完全に記事のタイトルからは内容が乖離してしまった...笑)