Jak zmusić komputer Mac do automatycznego ponownego łączenia się z siecią Wi-Fi?


11

Mam komputer Mac Mini Server, który odłącza się co kilka dni od sieci Wi-Fi. Mogą występować inne parametry powodujące początkowe rozłączenie (takie jak restart routera bezprzewodowego), ale komputer Mac nie łączy się automatycznie.

Jest to poważny problem, ponieważ jest to serwer, który nagle staje się niedostępny, dopóki ktoś nie podejdzie do niego fizycznie i nie użyje menu Wi-Fi do ręcznego ponownego połączenia z siecią. Powinienem wspomnieć, że chociaż siecią Wi-Fi jest WPA2, ręczne ponowne połączenie nie wymaga ponownego wprowadzenia hasła, więc nie ma oczywistego powodu, dla którego nie łączy się ono automatycznie.

Jak mogę zmusić komputer Mac, aby okresowo próbował łączyć się z określoną siecią Wi-Fi?


Czy dana sieć jest zdefiniowana jako Preferowana? Czy zaznaczyłeś w Preferencjach systemowych> Sieć, że „Zapamiętaj każdą sieć, do której ten komputer się przyłączył” jest zaznaczone, a „Rozłącz się z sieciami bezprzewodowymi po wylogowaniu” nie jest zaznaczone? Możesz także spróbować usunąć i ponownie utworzyć połączenie sieciowe.
harrymc 10.10.11

gdzie dokładnie jest opcja „Odłącz się od sieci bezprzewodowych podczas wylogowywania”? To działa Lion.
GJ.

Najwyraźniej w ustawieniach zaawansowanych.
harrymc

nie powodując paranoi ani nic takiego, ale jedynym sposobem na złamanie szyfrowania WPA2 jest wąchanie pakietów uwierzytelniających (gdy komputer się łączy), a najczęstszym sposobem na to jest usunięcie uwierzytelnienia jednego z komputerów i wąchanie sieci, gdy łączy się ponownie.
Nate Koppenhaver,

Odpowiedzi:


12

Oto skrypt Apple i skrypt powłoki, aby sprawdzić, czy lotnisko jest podłączone, a jeśli nie, aby je połączyć.

if (do shell script "networksetup -getinfo Wi-Fi | grep -c 'IP address:'") = 1 then
    do shell script "networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>"
end if
#!/bin/bash
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>
fi

Zamień <networkName>na nazwę sieci i <passwordToNetwork>hasło. „En1” powinno być poprawne, jeśli nie zmieniłeś urządzeń sieciowych.

Teraz wszystko, co musisz zrobić, to zapętlić lub zadzwonić, aby sprawdzić połączenie.

Niemniej jednak lotnisko powinno automatycznie połączyć się ponownie w przypadku utraty połączenia. Może spróbuj zresetować wszystkie preferencje sieciowe i sprawdź, czy to działa.

Jak całkowicie zresetować Preferencje sieciowe: Wyłącz lotnisko. Zamknij Preferencje systemowe. Przejdź do: /Library/Preferences/SystemConfiguration/ Utwórz kopię, a następnie usuń następujące pliki:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist

dzięki. dlaczego jednak używać skryptu jabłkowego? wydaje się, że bardziej nadaje się do skryptu powłoki, być może takiego, który uruchamia się co około minutę przy użyciu uruchomionego.
GJ.

także w jaki sposób „resetujesz wszystkie preferencje sieciowe”?
GJ.

Można to zrobić za pomocą skryptu powłoki. Chociaż jestem lepszy w Applescript, więc napisałem to w Applescript. Zobaczę, czy mogę to napisać w skrypcie powłoki. Zaktualizowałem również post dotyczący resetu preferencji sieci.
Kassym Dorsel

Poprawiono skrypt i dodano skrypt powłoki.
Kassym Dorsel

Naprawiłem najbardziej skandaliczny błąd skryptu powłoki, ale prawdopodobnie powinien zostać jeszcze raz poprawiony. Na moim Macu dostaję dwa trafienia, grepgdy jest w górze i tylko jeden, gdy jest w dół, ale prawdopodobnie lepiej byłoby sprawdzić coś innego; liczenie liczby czegoś jest właściwie antypatternem.
tripleee

5

Chciałbym skomentować odpowiedź Kassym Dorsela , ale nie mam wystarczającej liczby punktów, aby to zrobić.

Miałem ten sam problem z moim serwerem Mac:

Wi-Fi łączy się z VPN, a Ethernet z LAN, więc jeśli połączenie Wi-Fi zostanie utracone, OS X nie połączy się automatycznie.

Biorąc pod uwagę odpowiedź Kassym Dorsela:

  • Nie czułem się dobrze, gdy moje hasło do Wi-Fi było przechowywane w przejrzysty sposób (co prawda jest to bardzo niskie ryzyko, ale nadal).

  • Chciałem włączyć Wi-Fi, jeśli został wyłączony.

  • Chciałem, aby poradził sobie ze stanem, w którym przypisano statyczny adres IP, Wi-Fi było włączone, ale nadal nie było podłączone lub było podłączone do niewłaściwej sieci Wi-Fi (SSID).

Zmodyfikowałem więc jego skrypt, aby rozwiązać te problemy (zastąp <networkName>preferowanym SSID sieci):

#!/bin/bash

# turn on Wi-Fi if it's turned 'Off'
if networksetup -getairportpower en1 | grep -q 'Off'
    then networksetup -setairportpower en1 on
fi

# cycle Wi-Fi power if missing 'IP address'
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then
    networksetup -setairportpower en1 off
    networksetup -setairportpower en1 on
fi

# initiate connection if not connected to the correct network
if networksetup -getairportnetwork en1 | grep -q '<networkName>'
    then networksetup -setairportnetwork en1 '<networkName>'
fi

Podobnie do przyjętej odpowiedzi, naprawiłem najbardziej problematyczne problemy z programowaniem powłoki. To jest teraz prawie eleganckie.
tripleee

2

Możesz spróbować zagrać za pomocą tego airportnarzędzia (w nowszych wersjach OS X jest ono ukryte /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airportlub podobna ścieżka).

W szczególności przydatne mogą być preferencje JoinModei JoinModeFallback. Na moim komputerze JoinModeFallbackjest ustawiony DoNothingdomyślnie. Zmiana KeepLookingwydaje się obiecującym początkiem.

Uruchom airportbez argumentów, aby zobaczyć swoją pomoc.


To było interesujące i obiecujące, ale ostatecznie nic dla mnie nie zmieniło. Zmieniłem preferencje (miałem „nieznane” i „nic” na wypadek awarii), ale Wi-Fi nadal się nie łączy.
tripleee

0

Oto proste refaktoryzacja, które działa dla mnie.

#!/bin/bash
networksetup -getinfo Wi-Fi | grep -q Subnet: ||
networksetup -setairportnetwork en1 "$ssid" "$password"

Oczywiście zamień $ssidna rzeczywisty SSID sieci i $passwordhasło do tej sieci.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.