Überblick
Dies ist ein Bash-Skript, das automatisch Ihr WLAN deaktivieren, wenn Sie Ihren Computer mit einem Ethernet-Anschluss anschließen und WiFi wieder aktivieren, wenn Sie Ihr Ethernet-Kabel / Adapter ziehen. Wenn Sie sich entscheiden, Wi-Fi einzuschalten welchen Gründen auch immer, es wird diese Wahl erinnern. Dies wurde improvisiert ausdieser mac Hinweis mit Yosemite arbeiten, und ohne Hartcodierung der Adapternamen. Es soll Knurren unterstützen, aber ich habe nicht überprüfen, dass ein Teil. Ich tat, jedoch, hinzufügen Unterstützung OSX Notification Center. Fühlen Sie sich frei gabeln und beheben Sie Probleme auftreten.
Die meisten der Kredit für diese Änderungen gehen aufDave Holland.
Installationsanleitung
- Kopieren
toggleAirport.sh
nach/Library/Scripts/
- Lauf
chmod 755 /Library/Scripts/toggleAirport.sh
- Kopieren
com.mine.toggleairport.plist
nach/Library/LaunchAgents/
- Lauf
chmod 600 /Library/LaunchAgents/com.mine.toggleairport.plist
- Lauf
sudo launchctl load /Library/LaunchAgents/com.mine.toggleairport.plist
die Beobachter zu starten
Deinstallationsanweisungen
- Lauf
sudo launchctl unload /Library/LaunchAgents/com.mine.toggleairport.plist
die Beobachter zu stoppen - Löschen
/Library/Scripts/toggleAirport.sh
- Löschen
/Library/LaunchAgents/com.mine.toggleairport.plist
- Löschen
/private/var/tmp/prev_eth_on
- Löschen
/private/var/tmp/prev_air_on
Verschiedenes
Zum Debuggen, Renn einfach: sudo /Library/Scripts/toggleAirport.sh
und fügen Sie Echos, wo immer Sie möchten,
com.mine.toggleairport.plist
<?xml version ="1.0" encoding ="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple // DTD PLIST 1.0 // EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version ="1.0"> <dict> <Schlüssel> Etikette</key> <string> com.asb.toggleairport</string> <key> OnDemand</key> <true /> <key> Program</key> <Array> <string> /Library/Scripts/toggleAirport.sh</string> </Array> <key> WatchPaths</key> <Array> <string> / Library / Preferences / Systemconfiguration</string> </Array> </dict> </plist>
toggleAirport.sh
#!/bin / bash Funktion set_airport { new_status = $ 1 ob [ $new_status = "Auf" ]; dann / Usr / sbin / network -setairportpower $ air_name auf touch / var / tmp / prev_air_on sonst / Usr / sbin / network -setairportpower $ air_name off ob [ -f "/var / tmp / prev_air_on" ]; dann rm / var / tmp / prev_air_on fi fi } Funktion Knurren { # Überprüft, ob Growl installiert ob [ -f "/usr / local / bin / growlnotify" ]; dann / Usr / local / bin / growlnotify -m "$1" -ein "AirPort Utility.app" sonst osascript- "Anzeigebenachrichtigung \"$1\" mit dem Titel \"Wifi Toggle\" Soundnamen \"Hero\"" fi } # Standardwerte prev_eth_status ="aus" prev_air_status ="aus" eth_status ="aus" # Besorgen Sie sich die Namen der Adapter. Wir gehen hier davon aus, dass jeder Ethernet-Verbindung Name endet in "Ethernet" ob [ -z $ eth_names ]; dann eth_names = $(network -listnetworkserviceorder | grep "Hardware-Port" | grep "Belkin USB-C-LAN" | awk -F‘:''{drucken $3}' | sed- "s / //" | sed- "s /)//") elif [ -z $ eth_names ]; dann eth_names = $(network -listnetworkserviceorder | grep "Hardware-Port" | grep "Ethernet-Adapter" | awk -F‘:''{drucken $3}' | sed- "s / //" | sed- "s /)//") fi # Eth_names = `network -listnetworkserviceorder | sed -I ‚s|^\(Hardware-Port: .*Ethernet-Adapter, Gerät: (in.)\)$|\1|p'` air_name = `network -listnetworkserviceorder | sed -En 's/^\(Hardware-Port: (Wi-Fi|Flughafen), Gerät: (in.)\)$/\2/p'` # Bestimmen vorherigen Ethernet-Status # Wenn die Datei vorhanden ist prev_eth_on, Ethernet aktiv war letztes Mal, dass wir überprüft ob [ -f "/var / tmp / prev_eth_on" ]; dann prev_eth_status ="Auf" fi # Bestimmen Sie gleichen für AirPort # Die Datei ist prev_air_on ob [ -f "/var / tmp / prev_air_on" ]; dann prev_air_status ="Auf" fi # Überprüfen Sie den Status Ist-Strom-Ethernet für eth_name in ${eth_names}; tun ob ([ "$eth_name" != "" ] && [ "`Ifconfig $ eth_name | grep "Status: aktiv"`" != "" ]); dann eth_status ="Auf" fi erledigt # Und tatsächliche aktuelle AirPort air_status = `/ usr / sbin / network -getairportpower $ air_name | awk '{ drucken $4 }‚` # Wenn eine Änderung aufgetreten. Führen externes Skript (wenn es vorhanden ist) ob [ "$prev_air_status" != "$air_status" ] || [ "$prev_eth_status" != "$eth_status" ]; dann ob [ -f "./statusChanged.sh" ]; dann "./statusChanged.sh" "$eth_status" "$air_status" & sein sein # Bestimmen Sie, ob Ethernet-Status geändert ob [ "$prev_eth_status" != "$eth_status" ]; dann ob [ "$eth_status" = "Auf" ]; dann set_airport "aus" knurren "Verdrahtetes Netzwerk erkannt. Drehen AirPort aus." sonst set_airport "Auf" knurren "Kein verdrahteten Netzwerk erkannt. Drehen AirPort auf." fi # Wenn Ethernet nicht ändern sonst # Überprüfen Sie, ob AirPort Status geändert # Wenn dies der Fall wurde es vom Benutzer manuell getan ob [ "$prev_air_status" != "$air_status" ]; dann set_airport $ air_status ob [ "$air_status" = "Auf" ]; dann knurren "AirPort eingeschaltet manuell auf." sonst knurren "AirPort manuell ausgeschaltet." fi fi fi # Update Ethernet-Status ob [ "$eth_status" == "Auf" ]; dann touch / var / tmp / prev_eth_on sonst ob [ -f "/var / tmp / prev_eth_on" ]; dann rm / var / tmp / prev_eth_on fi fi Ausfahrt 0