Przegląd
To jest skrypt bash, który automatycznie wyłączy Wi-Fi, jeśli podłączysz komputer do połączenia Ethernet i włączysz Wi-Fi ponownie po odłączeniu kabla / adaptera Ethernet. Jeśli zdecydujesz się włączyć Wi-Fi z jakiegokolwiek powodu, zapamięta ten wybór. To było improwizowane zpodpowiedź do Maca pracować z Yosemite, i bez twardego kodowania nazw adapterów. Ma wspierać warczenie, ale nie sprawdziłem tej części. Zrobiłem, jednak, dodaj obsługę centrum powiadomień OSX. Zachęcamy do rozwidlenia i rozwiązania wszelkich napotkanych problemów.
Większość zasług za te zmiany należy doDave Holland.
Instrukcje Instalacji
- Kopiuj
toggleAirport.sh
do/Library/Scripts/
- Biegać
chmod 755 /Library/Scripts/toggleAirport.sh
- Kopiuj
com.mine.toggleairport.plist
do/Library/LaunchAgents/
- Biegać
chmod 600 /Library/LaunchAgents/com.mine.toggleairport.plist
- Biegać
sudo launchctl load /Library/LaunchAgents/com.mine.toggleairport.plist
aby uruchomić obserwatora
Instrukcje odinstalowania
- Biegać
sudo launchctl unload /Library/LaunchAgents/com.mine.toggleairport.plist
zatrzymać obserwatora - Kasować
/Library/Scripts/toggleAirport.sh
- Kasować
/Library/LaunchAgents/com.mine.toggleairport.plist
- Kasować
/private/var/tmp/prev_eth_on
- Kasować
/private/var/tmp/prev_air_on
Misc
Aby debugować, po prostu biegnij: sudo /Library/Scripts/toggleAirport.sh
i dodaj echo tam, gdzie chcesz
com.mine.toggleairport.plist
<?wersja xml ="1.0" kodowanie ="UTF-8"?> <!Plist DOCTYPE PUBLICZNY "-//Apple // DTD PLIST 1.0 // EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <wersja plist ="1.0"> <dykt> <Klawisz> Etykieta</klucz> <string> com.asb.toggleairport</ciąg> <Klawisz> OnDemand</klucz> <prawda /> <key> ProgramArguments</klucz> <tablica> <string> /Library/Scripts/toggleAirport.sh</ciąg> </tablica> <key> WatchPaths</klucz> <tablica> <string> / Library / Preferences / SystemConfiguration</ciąg> </tablica> </dykt> </plist>
toggleAirport.sh
#!/bin / bash funkcja set_airport { new_status = 1 $ gdyby [ $new_status = "Na" ]; następnie / usr / sbin / networksetup -setairportpower $ air_name on dotknij / var / tmp / prev_air_on jeszcze / usr / sbin / networksetup -setairportpower $ air_name off gdyby [ -fa "/var / tmp / prev_air_on" ]; następnie rm / var / tmp / prev_air_on fi fi } funkcja warczeć { # Sprawdza, czy Growl jest zainstalowany gdyby [ -fa "/usr / local / bin / growlnotify" ]; następnie / usr / local / bin / growlnotify -m "$1" -za "AirPort Utility.app" jeszcze osascript -e "wyświetl powiadomienie \"$1\" z tytułem \"Przełącznik Wi-Fi " nazwa dźwięku \"Hero\"" fi } # Ustaw wartości domyślne prev_eth_status ="Poza" prev_air_status ="Poza" eth_status ="Poza" # Chwyć nazwy adapterów. Zakładamy tutaj, że dowolna nazwa połączenia Ethernet kończy się na "Ethernet" gdyby [ -z $ eth_names ]; następnie eth_names = $(Networksetup -listnetworkserviceorder | grep "Port sprzętu" | grep "Belkin USB-C LAN" | awk -F ':''{wydrukować $3}' | sed -e "s / //" | sed -e "s /)//") Elif [ -z $ eth_names ]; następnie eth_names = $(Networksetup -listnetworkserviceorder | grep "Port sprzętu" | grep "Adapter Ethernet" | awk -F ':''{wydrukować $3}' | sed -e "s / //" | sed -e "s /)//") fi # eth_names = `networksetup -listnetworkserviceorder | Ale to En|^\(Port sprzętu: .*Adapter Ethernet, Urządzenie: (w.)\)$|\1|p'` air_name = `networksetup -listnetworkserviceorder | sed -En 's/^\(Port sprzętu: (Wi-Fi|Lotnisko), Urządzenie: (w.)\)$/\2/p'` # Określ poprzedni status sieci Ethernet # Jeśli istnieje plik prev_eth_on, ethernet był aktywny podczas ostatniego sprawdzania gdyby [ -fa "/var / tmp / prev_eth_on" ]; następnie prev_eth_status ="Na" fi # Określ to samo dla statusu AirPort # Plik ma prev_air_on gdyby [ -fa "/var / tmp / prev_air_on" ]; następnie prev_air_status ="Na" fi # Sprawdź aktualny aktualny stan sieci Ethernet dla eth_name w ${eth_names}; robić gdyby ([ "$nazwa_ etatu" != "" ] && [ "`ifconfig $ nazwa_ etatu | grep "status: aktywny"`" != "" ]); następnie eth_status ="Na" fi Gotowe # I aktualny aktualny status AirPort air_status = `/ usr / sbin / networksetup -getairportpower $ air_name | awk '{ wydrukować $4 }„` # Jeśli nastąpiła jakakolwiek zmiana. Uruchom zewnętrzny skrypt (jeśli istnieje) gdyby [ "$prev_air_status" != "$air_status" ] || [ "$prev_eth_status" != "$eth_status" ]; następnie gdyby [ -fa "./statusChanged.sh" ]; następnie "./statusChanged.sh" "$eth_status" "$air_status" & fi fi # Sprawdź, czy zmienił się status Ethernet gdyby [ "$prev_eth_status" != "$eth_status" ]; następnie gdyby [ "$eth_status" = "Na" ]; następnie port_port "Poza" warczeć "Wykryto sieć przewodową. Wyłączanie AirPort." jeszcze port_port "Na" warczeć "Nie wykryto sieci przewodowej. Włączanie AirPort." fi # Jeśli ethernet się nie zmienił jeszcze # Sprawdź, czy zmienił się status AirPort # Jeśli tak, to zostało wykonane ręcznie przez użytkownika gdyby [ "$prev_air_status" != "$air_status" ]; następnie set_airport $ air_status gdyby [ "$air_status" = "Na" ]; następnie warczeć "AirPort ręcznie włączony." jeszcze warczeć "AirPort ręcznie wyłączony." fi fi fi # Zaktualizuj status sieci Ethernet gdyby [ "$eth_status" == "Na" ]; następnie dotknij / var / tmp / prev_eth_on jeszcze gdyby [ -fa "/var / tmp / prev_eth_on" ]; następnie rm / var / tmp / prev_eth_on fi fi wyjście 0