Comment changer automatiquement les paramètres DNS tout en vous connectant à un WiFi différent?
J'ai des paramètres DNS totalement différents lorsque je suis au travail et quand je suis à la maison. Je me demandais si je pouvais modifier automatiquement les paramètres DNS de mon MacBook Pro lorsque je me connectais à un réseau Wi-Fi différent.
J'ai fait beaucoup de recherches, j'ai créé un emplacement personnalisé appelé Domicile dans les paramètres réseau. Et j'ai défini mes paramètres DNS domestiques sous ce profil. Et un profil par défaut appelé Automatique, je laisse l'ordinateur obtenir automatiquement les paramètres DNS.
Après cela, je peux modifier mes paramètres DNS via:
networksetup -switchtolocation Home
C'est très proche de ma demande. Mais j'espère que je peux trouver un moyen plus intelligent, si je trouve une méthode Si je me connecte à un WiFi appelé "Home", puis exécute la commande automatiquement, ce sera excellent.
20200819 Mise à jour
Je trouve un outil d'automatisation appelé Hammerspoon , je peux donc attribuer un raccourci pour changer de lieu à l'aide de la commande.
Bien que je n'ai pas trouvé de moyen direct, mais Hammerspoon est génial et puissant. J'ai essayé de regarder le changement de Wifi en utilisant Hammerspoon, mais cela reste un petit problème, alors j'ouvre un problème ici
Réponses
Keyboard Maestro peut le faire très facilement:
Définissez le SSID et l'emplacement que vous souhaitez, et cela devrait faire ce que vous voulez.
Vous n'avez pas besoin d'utiliser une application tierce pour atteindre votre objectif.
Lorsque le Wi-Fi se connecte à un réseau, le fichier suivant , entre autres, est modifié:
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
Vous pouvez utiliser un User Launch Agent avec une clé WatchPaths pour savoir quand le fichier cible est modifié et exécuter votre script en conséquence.
Voici un exemple de la façon d'atteindre l'objectif et utilise SkyNet comme le SSID du Wi-Fi réseau .
En utilisant networksetup
pour obtenir le courant Wi-Fi réseau , le suivant exemple script shell le code est utilisé et enregistré comme par exemple /usr/local/bin/detect-wifi-change
:
#!/bin/bash
[[ $(networksetup -getairportnetwork en0) == "Current Wi-Fi Network: SkyNet" ]] && say "connected to skynet"
Dans l'exemple de code ci-dessus, lorsque le Wi-Fi est connecté à SkyNet, il indique simplement qu'il est "connecté à skynet", et vous remplacez SkyNet dans la $(...)
partie de la commande par votre SSID cible , et remplacez la say "connected to skynet"
commande par la networksetup -switchtolocation Home
commande comme indiqué dans ta question.
Pour l' agent de lancement , dans la bibliothèque de votre dossier d' accueil , vous utiliseriez l'exemple suivant, enregistré sous, par exemple ~/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>
Après avoir enregistré le PLIST fichier , utilisez launchctl
pour load
cela, par exemple:
launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist
Remarque: vous pouvez utiliser le unload
verbe with launchctl
pour décharger le fichier PLIST cible .
Désormais, chaque fois que le Wi-Fi se connecte à un SSID différent, le eg /usr/local/bin/detect-wifi-change
est exécuté et s'il est connecté au SSID cible, la commande après le &&
est exécutée.
Remarque: l'exemple ci-dessus a été testé et a fonctionné sous macOS High Sierra en utilisant mon SSID réel à la place de SkyNet aux deux endroits du script .
Documentation connexe:
Dans Terminal , remplacez l' command
un des éléments suivants:
launchd
launchd.plist
launchctl
Vous pouvez lire la page de manuel pour command
dans Terminal en tapant command
puis en cliquant dessus avec le bouton droit de la souris et en sélectionnant: Ouvrir la page de manuel
Voir également: