Automatisch zu deaktivieren, WiFi, wenn eine Ethernet-Verbindung (Kabel) ist auf einem Mac eingesteckt

Ü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

  • KopierentoggleAirport.sh nach/Library/Scripts/
  • Laufchmod 755 /Library/Scripts/toggleAirport.sh
  • Kopierencom.mine.toggleairport.plist nach/Library/LaunchAgents/
  • Laufchmod 600 /Library/LaunchAgents/com.mine.toggleairport.plist
  • Laufsudo launchctl load /Library/LaunchAgents/com.mine.toggleairport.plist die Beobachter zu starten

Deinstallationsanweisungen

  • Laufsudo 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