Mac OS Xは、特定の名前のWifiネットワークに接続し、他のすべてのWifiネットワークでDHCPを使用する場合、静的IPアドレスを使用してAirportインターフェイスを自動的に構成するように設定できますか?
現在、システム環境設定の「ネットワーク」セクションの「場所」機能を使用して、2つのIPアドレス設定を手動で切り替えています。 「静的IP」設定とデフォルトの「DHCP」設定があります。ただし、これには、システム環境設定を入力して、場所を切り替えるたびに[場所]ドロップダウンを変更する必要があります。これは自動化できますか?
できれば、これはサードパーティのソフトウェアなしで実行されます。
これは、OSを介して簡単に実行できるものではありません。
前述の場所は、フリーウェア 空港の場所 またはMarcoPoloまたは有料のネットワークの場所とともに1つのオプションです。役立つ可能性のあるWiFiScriptorと呼ばれるAppleScriptもあります。
ただし!システム環境設定->ネットワーク-> [場所のドロップダウン]。 アップルメニュー->場所(約6つのオプションがあります)-> [目的の場所を選択]を通過できます
-b
サードパーティなしで実行することは可能です。 https://github.com/rimar/wifi-location-changer を参照してください。
おそらくあなたのために働くであろうサードパーティの非無料の解決策は 場所 です。
この回答 がスタックオーバーフローに関する類似しているが同一ではない質問に示唆しているように、一定の間隔で実行されるスクリプトを作成できます。 launchd
は、複数回実行されないようにします。
擬似コード:
networksetup -getairportnetwork AirPort
の出力に設定しますnetworksetup -switchtolocation {location}
を実行します。ここで、{location}は、見つかったWi-Fiネットワークに基づいて切り替える場所の名前です。DHCPからのアドレスを期待するように構成されているときに、DHCPアドレスを提供しないローカルwifiに接続すると、鶏が先か卵が先かという状況が発生する可能性があります。
-
与えられた答えは手動なので、これは自動的にそれを変更する簡単なスクリプトです:
各WiFiネットワークを反映するために、[システム環境設定]> [ネットワーク]でさまざまな場所を作成します。
スクリプト:(/usr/bin/autolocation.sh
)これを好きな場所に置き、シナリオに応じてスクリプトのSSID値を変更します。
#!/bin/sh
#get the ssid of the network we are on
ssid=`ioreg -l -n AirPortDriver | grep 80211SSID | sed 's/|//g' | sed 's/"//g' | sed 's/ */ /g' | awk '{print $3}'`
if [ $ssid = "voicegear" ]
then
location="Office / Home"
Elif [ $ssid = "vijay" ]
then
location="Office / Home"
Elif [ $ssid = "SCTHO" ]
then
location="Shriram Santhome"
else
location="Automatic"
fi
#update the location
newloc=`/usr/sbin/scselect "${location}" | sed 's/^.*(\(.*\)).*$/\1/'`
echo "${newloc}"
このスクリプトは、ワイヤレスネットワークのSSIDに基づいてネットワークの場所(設定)を変更します。これで、ネットワーク設定に変更があるたびにこれを実行する必要があります。同じことを行うために、launchdエージェントを作成します。
起動されたplist:(~/Library/LaunchAgents/com.vg.netwatcher.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>Disabled</key>
<false/>
<key>Label</key>
<string>com.vg.netwatcher</string>
<key>Program</key>
<string>/usr/bin/autolocation.sh</string>
<key>LaunchEvents</key>
<dict>
<key>com.Apple.notifyd.matching</key>
<dict>
<key>com.Apple.system.config.network_change</key>
<dict>
<key>Notification</key>
<string>com.Apple.system.config.network_change</string>
</dict>
</dict>
</dict>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
このマシンを使用しているのは私だけなので、このファイルを~/Library/LaunchAgents
(ホームディレクトリ内)に作成しました。グローバルにしたい場合は、/Library/LaunchAgents
に入れてください。
このファイルはroot
が所有し、600
権限を持っている必要があります。
Sudo chown root Library/LaunchAgents/com.vg.netwatcher.pist
Sudo chmod 600 Library/LauhchAgents/com.vg.netwatcher.plist
ログアウト/ログインするか、システムを再起動すると、ファイルを配置した場所(ホームディレクトリまたはグローバル)に応じて、起動エージェントが起動します。ただし、これを実行せずに今すぐロードする場合は、コマンドラインで次のコマンドを実行します。あなたは一度だけそれをする必要があります。
cd ~/Library/LaunchAgents
Sudo launchctl load -w com.vg.netwatcher.plist
それでおしまい。これで、MacのIPが自動的に変更されます。
注:エルキャピタンでも動作します!
WiFiSSIDに基づいてネットワークの場所を変更するための非常に有望なスクリプトを次に示します。
Anton Eprev によって作成されます。コードと詳細なドキュメントはGitHubで確認できます。
コマンドラインからインストールします。
$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash
locationchanger
を/usr/local/bin
ディレクトリにインストールするためのrootパスワードの入力を求められます。
それでおしまい!
その後、ネットワークの場所がある場合名前が現在のWiFiネットワークの名前(SSID)と同じである、ネットワークの場所に自動的に切り替わります。それ以外の場合は、自動の場所に切り替わります。 (ところで、Automaticという場所がない場合は、ログに文句を言って終了します。)
特定のWiFiネットワークに接続するたびにスクリプトを実行する場合は、それらのスクリプトを~/.locations
に配置し、WiFiネットワークにちなんで名前を付けます。 ~/.locations/Corp Wi-Fi
:
#!/usr/bin/env bash
# Require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'
また、他の場所でこれらの変更をリセットする~/.locations/Automatic
を作成することもできます。
#!/usr/bin/env bash
# Don’t require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'
必ずスクリプトに実行ビットをキャストしてください(chmod +x
)。
複数のWiFiネットワーク間でネットワークの場所を共有できます。たとえば、2.4GHz帯域と5GHz帯域で同時にブロードキャストするワイヤレスルーターがある場合は、構成ファイル~/.locations/locations.conf
を作成し、その中に単純なキーと値のペアを配置できます。
Home_WiFi_5GHz=Home_WiFi
ここでキーはWiFiネットワーク名、値は対応するネットワークの場所です。裸の等号(=
、スペースなし)でそれらを結合します。上記の例では、WiFiネットワークHome_WiFi_5GHzが接続されている場合、ネットワークの場所Home_WiFiに切り替わります。
ロケーションエイリアスは同じ名前のルールよりも優先されることに注意してください。上記の例では、WiFiネットワークHome_WiFi_5GHzに接続すると、スクリプト~/.locations/Home_WiFi
のみが実行されます。
ロケーションエイリアスを使用すると、WiFiネットワークの名前を照合するために追加のネットワークロケーションを作成する必要もありません。
次のコマンドを使用して、広範なログを表示できます。
$ tail -f ~/Library/Logs/LocationChanger.log
サンプル出力:
[2017-10-13 11:35] Connected to 'Unknown WiFi'
[2017-10-13 11:35] Location 'Unknown WiFi' was not found. Will default to 'Automatic'
[2017-10-13 11:35] Changing the location to 'Automatic'
CurrentSet updated to 6B593A12-C51B-3FF1-DE1D-87310F232147 (Automatic)
[2017-10-13 11:37] Connected to 'Home_WiFi_5GHz'
[2017-10-13 11:37] Will switch the location to 'Home_WiFi' (configuration file)
[2017-10-13 11:37] Changing the location to 'Home_WiFi'
CurrentSet updated to 7900D1E6-3820-50C6-882E-4F5K2BEF32ED (Home_WiFi)
まず、起動エージェントをアンロードします。
launchctl unload ~/Library/LaunchAgents/LocationChanger.plist
次に、バイナリ、plist、およびログファイルを削除します。
rm ~/Library/LaunchAgents/LocationChanger.plist
rm ~/Library/Logs/LocationChanger.log
Sudo rm /usr/local/bin/locationchanger
~/.locations
内の構成ファイルと場所固有のスクリプトを削除することもできます。
rm -rf ~/.locations