LoginSignup
20
19

More than 3 years have passed since last update.

Mac OS X で ネットワークプロファイルをアクセスポイント名で自動切り替え

Last updated at Posted at 2016-06-25

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を設定するようにしました

NetworkPref.png

これで従来よりは簡単にネットワーク設定を切り替えられるようになりましたが、案外、この切替までのメニュー操作が深くてメンドウなんです。なんとかならんかなと、スクリプト化してみました。

現在つながっている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 Preferences 2016-07-22 09-29-18.png

これで、うまくつながらない際にも、さくっとAlfredからスクリプトを実行できるようになりました。

これだけさくっと実行できるなら、Sleep解除を自動検出する必要はなかったですね。と、いまは気付きました。

さらに後日談

.sh.appとしておくとAlfredから呼び出すことがわかり、Alfredからサクッと 自動選択スクリプトを実行するのが一番確実とわかりました。ついでにBannerとしてさらっと実行結果を通知する感じに変更。

banners.png

この Script(Github gist) を、.appにリネームして使えます。

(完全に記事のタイトルからは内容が乖離してしまった...笑)

20
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
19