Farklı WiFi ağlarına bağlanırken DNS ayarları nasıl otomatik değiştirilir?

Aug 17 2020

İşteyken ve evdeyken tamamen farklı DNS ayarlarına sahibim. Farklı bir WiFi'ye bağlandığımda MacBook Pro'mun DNS ayarlarını otomatik olarak değiştirebilir miyim diye merak ediyordum.

Çok fazla arama yaptım, ağ ayarlarında Ev adında özel bir Konum yaptım. Ve bu profil altında Ev DNS ayarlarımı yaptım. Ve Otomatik adlı varsayılan bir profil, bilgisayarın otomatik olarak DNS ayarlarını almasına izin veriyorum.

Bundan sonra, DNS ayarlarımı şu şekilde değiştirebilirim:

networksetup -switchtolocation Home

Talebime çok yakın. Ama umarım daha akıllıca bir yol bulabilirim, Eğer bir yöntem bulursam "Ev" adlı bir WiFi'ye bağlanırsam ve sonra komutu otomatik olarak uygularsam, mükemmel olur.

20200819 Güncelleme

Hammerspoon adında bir otomasyon aracı buldum , böylece komutu kullanarak farklı Konumlar arasında geçiş yapmak için bir kısayol atayabilirim.

Doğrudan bir yol bulamadım, ancak Hammerspoon harika ve güçlü. Hammerspoon kullanarak Wifi değişikliğini izlemeye çalıştım, ancak bu küçük bir sorun olmaya devam ediyor, bu yüzden burada bir sorun açıyorum

Yanıtlar

4 TJLuoma Aug 17 2020 at 23:44

Keyboard Maestro bunu çok kolay bir şekilde yapabilir:

İstediğiniz SSID ve Konumu ayarlayın ve bu, istediğinizi yapmalıdır.

3 user3439894 Aug 19 2020 at 01:06

Hedefinize ulaşmak için üçüncü taraf bir uygulama kullanmanıza gerek yoktur .

Ne zaman Wi-Fi a bağlanan ağa aşağıdaki dosyayı diğerleri arasında, modifiye edilir:

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

Hedef dosyanın ne zaman değiştirildiğini bilmek ve komut dosyanızı buna göre yürütmek için bir WatchPaths anahtarına sahip bir Kullanıcı Başlatma Aracısı kullanabilirsiniz .

Aşağıdaki hedefe ulaşmak için nasıl bir örnektir ve kullandığı SkyNet olarak SSID ait Wi-Fi ağına .

Kullanılması networksetupakımı almak için Wi-Fi ağı , aşağıdaki örnek kabuk komut dosyası kodu kullanılmış ve örneğin olarak kaydedilir /usr/local/bin/detect-wifi-change:

#!/bin/bash

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

Örnek olarak kod yukarıda, Wi-Fi bağlı olduğu SkyNet basitçe o en "Skynet bağlı" deyince yerini alacak SkyNet içinde $(...)bölümü komutuyla hedef ile SSID , ve değiştirme say "connected to skynet" komutu ile networksetup -switchtolocation Home komuta gösterildiği gibi senin sorun.

İçin Başlat Ajan , içinde Kütüphanesi çıkartmalarınızın Ana klasör aşağıdaki örneği kullanacağız ediyorum olarak kaydedilmiş, örneğin ~/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>

Kaydettikten sonra PLIST dosyasını kullanmak launchctliçin loadkendisine, örneğin:

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

Not: kullanabilirsiniz unload fiil ile launchctlhedef boşaltmaya PLIST dosyasını .

Şimdi her Wi-Fi farklı bağlanan SSID örneğin /usr/local/bin/detect-wifi-changeyürütülür ve hedef bağlı eğer SSID komutu sonra &&yürütülür.


Not: Yukarıdaki örnek test edilmiş ve altında çalışmış olan MacOS High Sierra benim gerçek kullanarak SSID yerine SkyNet içinde iki yerde de senaryo .


 

İlgili Belgeler:

In Terminali , yedek commandaşağıdakilerden biri için:

  • launchd
  • launchd.plist
  • launchctl

Sen okuyabilir kılavuz sayfasını için command de Terminal yazarak commandve ardından üzerine sağ tıklayıp belirleyin: Açık adam Page

Ayrıca bakınız: