別のWiFiに接続しているときにDNS設定を自動切り替える方法は?

Aug 17 2020

職場と自宅では、DNS設定がまったく異なります。別のWiFiに接続したときに、MacBookProのDNS設定を自動的に変更できるかどうか疑問に思いました。

私はたくさんの検索をしました、私はネットワーク設定でホームと呼ばれるカスタムロケーションを作りました。そして、このプロファイルでホームDNS設定を設定しました。そして、自動と呼ばれるデフォルトのプロファイルは、コンピューターにDNS設定を自動的に取得させます。

その後、次の方法でDNS設定を変更できます。

networksetup -switchtolocation Home

それは私の要求に非常に近いです。でももっと賢い方法を見つけられたらいいなと思います。方法がわかれば「ホーム」というWiFiに接続して自動的にコマンドを実行すれば素晴らしいでしょう。

20200819アップデート

私はという自動化ツールを見つけました https://github.com/Hammerspoon/hammerspoon/、コマンドを使用して別の場所を切り替えるためのショートカットを割り当てることができます。

直接的な方法は見つかりませんでしたが、Hammerspoonは素晴らしく強力です。Hammerspoonを使用してWifiの変化を監視しようとしましたが、まだ少し問題があるため、問題を開きますhttps://github.com/Hammerspoon/hammerspoon/issues/2434

回答

4 TJLuoma Aug 17 2020 at 23:44

https://www.keyboardmaestro.com/main/ これは非常に簡単に実行できます。

必要なSSIDと場所を設定すると、必要な処理が実行されます。

3 user3439894 Aug 19 2020 at 01:06

目標を達成するためにサードパーティのアプリケーションを使用する必要はありません。

ときのWi-Fiはに接続しているネットワーク、次のファイルを他の人の間で、変更されます。

/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist

あなたは使用することができ、ユーザー の起動エージェントWatchPaths キーターゲット際に知っているファイルが変更され、あなたの実行スクリプトをそれに応じて。

以下は、目標を達成する方法の例であり、Wi-FiネットワークのSSIDとしてSkyNetを使用しています

networksetup現在のWi-Fi ネットワークを取得するために使用すると、次のシェルスクリプトコードの が使用され、次のように保存されます。 /usr/local/bin/detect-wifi-change

#!/bin/bash

[[ $(networksetup -getairportnetwork en0) == "Current Wi-Fi Network: SkyNet" ]] && say "connected to skynet"

例ではコード時には、上記、のWi-Fiがに接続されているスカイネットそれは単にそれがの「スカイネットに接続された」と言い、あなたが代わるスカイネットの$(...)の一部のコマンドターゲットとSSID、および置換say "connected to skynet" コマンドをしてnetworksetup -switchtolocation Home 、コマンドに示すように、あなたの質問。

以下のために起動エージェントでは、図書館あなたのホーム フォルダ次の例を使用したい、例えば、として保存~/Library/LaunchAgents/com.my.detect.wifi.change.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>Label</key>
        <string>com.my.detect.wifi.change</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/detect-wifi-change</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
    </array>
</dict>
</plist>

PLIST ファイルを保存した後、それを使用launchctlloadます。例:

launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist

注:unload 動詞withlaunchctlを使用して、ターゲットPLIST ファイルをアンロードできます

今たびのWi-Fiは異なるに接続するSSIDなどが/usr/local/bin/detect-wifi-change実行され、ターゲットに接続されている場合、SSIDコマンドの後に&&実行されます。


注:上記の例は、スクリプトの両方の場所でSkyNetの代わりに実際のSSIDを使用して、macOS HighSierraでテストおよび動作しました。


 

関連ドキュメント:

ではターミナル、代替command次のいずれかのために:

  • launchd
  • launchd.plist
  • launchctl

あなたは読むことができ、マニュアルページをためcommand 、ターミナルタイピングcommandし、それを右クリックして選択します。オープンmanページを

関連項目: