• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[HowTo] W-Lan deaktivieren wenn Lan aktiv

Spirit

Zuccalmaglios Renette
Registriert
16.11.05
Beiträge
257
Hi,

das hat mich schon lange gestört, dass mein W-Lan nicht automatisch deaktiviert wird wenn ich ein Lan Kabel anschließe. Jetzt habe ich endlich eine Lösung für das "Problem" gefunden: Auto-disable AirPort when ethernet is active
Ich habe das Skript jetzt eine Zeit laufen gehabt und es hat soweit funktioniert. Leider wird hin und wieder das W-Lan für kurze Zeit eingeschaltet. Es scheint also man da noch was verbessern kann. Kennt sich zufällig jemand damit aus?

[edit]
Ich habe ein paar Probleme identifizieren können:
  1. /Library/Scripts/ sehe ich immer wieder in der Konsole die Meldung das toogleAirport.sh nicht gefunden werden konnte obwohl es existiert. Vermutlich stimmen hier die Rechte nicht. Wie müssten die sein?
  2. /var/tmp/ existiert in OSX 10.11 nicht mehr und kann durch das Skript nicht angelegt werden. Was ist der richtige Pfad hier für OSX 10.11?
  3. Im .plist: OnDemand gibt es schon länger nicht mehr. Richtig wäre wohl KeepAlive. Das führt dazu das das Skript alle 10 Sekunden ausgeführt wird. Gibt es hier vielleicht eine bessere alternative wie onNetworkStatusChanged?

Falls die Quelle verschwindet hier die Anleitung wie das Skript zu installieren ist:
  1. Es müssen hierfür zwei Dateien angelegt werden. Den Terminal aufrufen und zu Scripts navigieren:
    Code:
    cd /Library/Scripts/
  2. Nun das Skript selbst erstellen. Hierfür im Terminal folgendes eingeben:
    Code:
    sudo vim toogleAirport.sh
    Über die Taste "S" in den Einfügemodus wechseln und unten stehenden Code mit CMD+V einfügen.

    Code:
    #!/bin/bash
    
    function set_airport {
        new_status=$1
    
        if [ $new_status = "On" ]; then
        /usr/sbin/networksetup -setairportpower en1 on
        touch /var/tmp/prev_air_on
        else
        /usr/sbin/networksetup -setairportpower en1 off
        if [ -f "/var/tmp/prev_air_on" ]; then
            rm /var/tmp/prev_air_on
        fi
        fi
    }
    
    function growl {
        # Checks whether Growl is installed
        if [ -f "/usr/local/bin/growlnotify" ]; then
        /usr/local/bin/growlnotify -m "$1" -a "AirPort Utility.app"
        fi
    }
    
    # Set default values
    prev_eth_status="Off"
    prev_air_status="Off"
    
    eth_status="Off"
    
    # Determine previous ethernet status
    # If file prev_eth_on exists, ethernet was active last time we checked
    if [ -f "/var/tmp/prev_eth_on" ]; then
        prev_eth_status="On"
    fi
    
    # Determine same for AirPort status
    # File is prev_air_on
    if [ -f "/var/tmp/prev_air_on" ]; then
        prev_air_status="On"
    fi
    
    # Check actual current ethernet status
    if [ "`ifconfig en0 | grep \"status: active\"`" != "" ]; then
        eth_status="On"
    fi
    
    # And actual current AirPort status
    air_status=`/usr/sbin/networksetup -getairportpower en1 | awk '{ print $4 }'`
    
    # If any change has occured. Run external script (if it exists)
    if [ "$prev_air_status" != "$air_status" ] || [ "$prev_eth_status" != "$eth_status" ]; then
        if [ -f "./statusChanged.sh" ]; then
        "./statusChanged.sh" "$eth_status" "$air_status" &
        fi
    fi
    
    # Determine whether ethernet status changed
    if [ "$prev_eth_status" != "$eth_status" ]; then
    
        if [ "$eth_status" = "On" ]; then
        set_airport "Off"
        growl "Lan-Verbindung gefunden deaktivere AirPort."
        else
        set_airport "On"
        growl "Kein Lan-Verbindung gefunden, aktiviere AirPort."
        fi
    
    # If ethernet did not change
    else
    
        # Check whether AirPort status changed
        # If so it was done manually by user
        if [ "$prev_air_status" != "$air_status" ]; then
        set_airport $air_status
    
        if [ "$air_status" = "On" ]; then
            growl "AirPort wurde manuell aktiviert."
        else
            growl "AirPort wurde manuell deaktiviert."
        fi
        fi
    fi
    
    # Update ethernet status
    if [ "$eth_status" == "On" ]; then
        touch /var/tmp/prev_eth_on
    else
        if [ -f "/var/tmp/prev_eth_on" ]; then
        rm /var/tmp/prev_eth_on
        fi
    fi
    
    exit 0
  3. Um die Datei zu erstellen ESC drücken und dann
    Code:
    wq
    eingeben und mit Enter bestätigen.
  4. Das Skript muss nun noch mit folgendem Code ausführbar gemacht werden
    Code:
    sudo chmod 755 toggleAirport.sh
  5. Als nächstes muss in den Ordner LaunchAgents gewechselt werden mit
    Code:
    cd ../LaunchAgents/
  6. Hier ist die Datei org.mine.toggleairport.plist zu erstellen. mine kann auch durch euren Namen ersetzt werden.
    Code:
    sudo vim org.mine.toggleairport.plist
    Wieder muss über die Taste "S" in den Einfügemodus gewechselt werden und dann mit CMD+V der unten stehende Code reinkopiert werden.
    Code:
    <?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>
      <key>Label</key>
      <string>org.mine.toggleairport</string>
      <key>OnDemand</key>
      <true/>
      <key>ProgramArguments</key>
      <array>
        <string>/Library/Scripts/toggleAirport.sh</string>
      </array>
      <key>WatchPaths</key>
      <array>
        <string>/Library/Preferences/SystemConfiguration</string>
      </array>
    </dict>
    </plist>
  7. Um die Datei zu erstellen ESC drücken und dann
    Code:
    wq
    eingeben und mit Enter bestätigen.
  8. Nach einem Neustart ist das neue Skript aktiv und beim ein Lan Kabel angeschlossen wird wird W-Lan automatisch deaktiviert.
 
Zuletzt bearbeitet:

xray77

Kaiser Wilhelm
Registriert
20.02.09
Beiträge
179
..Funktioniert auf neuen MBPr so aber leider nicht, hier müssen die Device-Namen im Script (en0, en1) angepasst werden. Im Script steht en0 für Ethernet, bei meinem MBPr early 2015 ist en0 aber die AirPort-Karte, muss auf en5 (Thunderbolt Ethernet) geändert werden. en1 (im Script die AirPort-Karte) muss dort auf en0 geändert werden, danach funktioniert's auch mit neuen MBPr's..

Rausfinden kann man die Device-Belegung mit folgendem Befehl im Terminal:
networksetup -listnetworkserviceorder

Gruss
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Mikael Blomkvist

Hendrik Ruoff

Roter Herbstkalvill
Registriert
16.03.13
Beiträge
13.152
Naja ich mach das über die Einstellmöglichkeit "Umgebungen" das erfordert auch nur eine Klick um umzuschalten.
 

Mikael Blomkvist

Normande
Registriert
30.08.15
Beiträge
574
Aber es erfordert eben einen Klick ;) @xray77 Ich kann dir leider nicht helfen, würde das Skript aber auf meinem iMac einsetzen wollen, ich lese mal weiter mit!
 

xray77

Kaiser Wilhelm
Registriert
20.02.09
Beiträge
179
Hallo MIkael Blomkvist,
Nein, ich brauche ja eben keine Hilfe mehr, habe es mit den in meinem Post beschriebenen Anpassungen ja zum Laufen bekommen!
Sind ja nur ein paar kleine Änderungen im Script, mehr nicht..
Beste Grüsse
 

Spirit

Zuccalmaglios Renette
Registriert
16.11.05
Beiträge
257
Ich habe das Skript jetzt auch zum laufen gebracht. Die Anpassungen wegen en musste ich aber nicht machen, dass OSX auch so verstanden. Allerdings musste ich das Skript und den tmp Ordner nach ~/Library/Scripts verschieben.