จะเปลี่ยนการตั้งค่า DNS อัตโนมัติในขณะที่เชื่อมต่อกับ WiFi อื่นได้อย่างไร
ฉันมีการตั้งค่า DNS ที่แตกต่างกันโดยสิ้นเชิงเมื่อฉันอยู่ที่ทำงานและเมื่อฉันอยู่ที่บ้าน ฉันสงสัยว่าฉันสามารถเปลี่ยนการตั้งค่า DNS ของ MacBook Pro โดยอัตโนมัติเมื่อฉันเชื่อมต่อกับ WiFi อื่นได้หรือไม่
ฉันทำการค้นหาหลายครั้งฉันสร้างตำแหน่งที่กำหนดเองชื่อบ้านในการตั้งค่าเครือข่าย และฉันตั้งค่า Home DNS ภายใต้โปรไฟล์นี้ และโปรไฟล์เริ่มต้นที่เรียกว่าอัตโนมัติฉันปล่อยให้คอมพิวเตอร์รับการตั้งค่า DNS โดยอัตโนมัติ
หลังจากนั้นฉันสามารถเปลี่ยนการตั้งค่า DNS ของฉันผ่าน:
networksetup -switchtolocation Home
มันใกล้เคียงกับความต้องการของฉันมาก แต่ฉันหวังว่าฉันจะพบวิธีที่ชาญฉลาดกว่านี้หากฉันหาวิธีได้หากฉันเชื่อมต่อกับ WiFi ที่เรียกว่า "Home" แล้วดำเนินการคำสั่งโดยอัตโนมัติมันจะดีมาก
ปรับปรุง 20200819
ฉันพบเครื่องมืออัตโนมัติที่เรียกว่าHammerspoonดังนั้นฉันจึงสามารถกำหนดช็อตคัทเพื่อสลับตำแหน่งต่างๆโดยใช้คำสั่ง
แม้ว่าฉันจะไม่พบทางตรง แต่แฮมเมอร์สปูนนั้นยอดเยี่ยมและทรงพลัง ฉันพยายามดูการเปลี่ยนแปลง Wifi โดยใช้ Hammerspoon แต่ก็ยังมีปัญหาเล็กน้อยฉันจึงเปิดปัญหาที่นี่
คำตอบ
คุณไม่จำเป็นต้องใช้แอปพลิเคชันของบุคคลที่สามเพื่อบรรลุเป้าหมายของคุณ
เมื่อWi-Fiเชื่อมต่อกับเครือข่ายไฟล์ต่อไปนี้จะถูกแก้ไข:
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
คุณสามารถใช้User Launch Agentพร้อมกับคีย์WatchPaths เพื่อทราบเมื่อไฟล์เป้าหมายถูกแก้ไขและเรียกใช้สคริปต์ของคุณตามนั้น
ต่อไปนี้เป็นตัวอย่างของวิธีการที่จะบรรลุเป้าหมายและใช้SkyNetเป็นSSIDของWi-Fi เครือข่าย
เมื่อใช้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กับSkyNetมันจะบอกว่า "เชื่อมต่อกับ skynet" และคุณจะแทนที่SkyNetใน$(...)
ส่วนของคำสั่งด้วยSSIDเป้าหมายของคุณและแทนที่say "connected to skynet"
คำสั่งด้วยnetworksetup -switchtolocation Home
คำสั่งดังที่แสดงใน คำถามของคุณ.
สำหรับLaunch Agentในไลบรารีของโฟลเดอร์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 ไฟล์ใช้launchctl
เพื่อload
มันเช่น:
launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist
หมายเหตุ: คุณสามารถใช้unload
คำกริยาที่มีlaunchctl
ขนเป้าหมายplist ไฟล์
ตอนนี้เมื่อใดก็ตามที่Wi-Fiเชื่อมต่อกับที่แตกต่างกันSSIDเช่น/usr/local/bin/detect-wifi-change
จะถูกดำเนินการและหากการเชื่อมต่อไปยังเป้าหมายSSID คำสั่งหลังจากที่&&
ถูกดำเนินการ
หมายเหตุ: ตัวอย่างข้างต้นได้รับการทดสอบและทำงานภายใต้MacOS High Sierraใช้ที่เกิดขึ้นจริงของฉันSSIDในสถานที่ของSkyNetในสถานที่ทั้งในสคริปต์
เอกสารที่เกี่ยวข้อง:
ในTerminalให้แทนที่command
อย่างใดอย่างหนึ่งต่อไปนี้:
launchd
launchd.plist
launchctl
คุณสามารถอ่านหน้าคู่มือสำหรับcommand
ในTerminal ได้โดยพิมพ์command
จากนั้นคลิกขวาที่หน้านั้นแล้วเลือก: Open man Page
ดูสิ่งนี้ด้วย: