Como fazer com que um Mac se reconecte automaticamente a uma rede wifi?

11

Eu tenho um Mac Mini Server que se desconecta a cada poucos dias da rede wifi. Pode haver outros parâmetros que causam a desconexão inicial (como o roteador sem fio sendo reinicializado), mas o Mac não se reconecta automaticamente.

É um grande problema, pois é uma máquina servidor que de repente fica indisponível até que alguém vá para a máquina fisicamente e use o menu wifi para se reconectar manualmente à rede. Devo mencionar que, embora a rede wifi seja WPA2, a reconexão manual não envolve a reinserção da senha; portanto, não há motivo óbvio para não se reconectar automaticamente.

Como faço para que o Mac tente conectar-se periodicamente a uma rede wifi especificada?

GJ.
fonte
A rede em questão está definida como Preferida? Você verificou em Preferências do sistema> Rede que "Lembrar de qualquer rede à qual este computador ingressou" está marcada e "Desconectar de redes sem fio ao fazer logout" está desmarcado? Você também pode tentar excluir e recriar a conexão de rede.
harrymc
onde exatamente está a opção "Desconectar de redes sem fio ao fazer logoff"? Está executando o Lion.
GJ.
Aparentemente, nas configurações avançadas.
harrymc
para não deixá-lo paranóico ou algo assim, mas a única maneira de quebrar a criptografia WPA2 é farejar os pacotes de autenticação (quando um computador se conecta) e a maneira mais comum de fazer isso é autenticar uma das máquinas e farejar a rede quando ele se reconecta.
Nate Koppenhaver

Respostas:

12

Aqui está um script do Applescript e shell para verificar se o Airport está conectado e se não está para conectá-lo.

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

Substitua <networkName>pelo nome da rede e <passwordToNetwork>por sua senha. O "en1" deve estar correto se você não tiver alterado seus dispositivos de rede.

Agora tudo o que você precisa fazer é fazer um loop ou ligar para verificar a conexão.

No entanto, o aeroporto deve se reconectar automaticamente se a conexão for perdida. Talvez tente redefinir todas as preferências de rede e veja se isso funciona.

Como redefinir completamente suas preferências de rede: Desligue o aeroporto. Feche as Preferências do Sistema. Navegue para: /Library/Preferences/SystemConfiguration/ Faça uma cópia e exclua os seguintes arquivos:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist
Kassym Dorsel
fonte
obrigado. Por que usar um AppleScript? parece se prestar mais a um shell script, talvez um que execute a cada minuto mais ou menos usando o launchd.
GJ.
Além disso, como você "redefine todas as preferências de rede"?
GJ.
Isso pode ser feito com um script de shell. Embora eu seja melhor no Applescript, escrevi no Applescript. Vou ver se consigo escrever em um script de shell. Também atualizei a postagem sobre como redefinir as preferências da rede.
Kassym Dorsel
Melhorado o script e adicionado um script de shell.
Kassym Dorsel
Corrigi o erro de script de shell mais flagrante, mas provavelmente deveria ser refatorado um pouco mais. No meu Mac, recebo dois hits de grepquando está ativo e apenas um quando está inativo, mas provavelmente seria melhor procurar outra coisa; contar o número de algo é praticamente um antipadrão.
Tripleee
5

Gostaria de comentar a resposta de Kassym Dorsel , mas não tenho argumentos suficientes para fazê-lo.

Eu tive o mesmo problema com meu servidor Mac:

O Wi-Fi se conecta à VPN e a Ethernet à LAN; portanto, se a conexão Wi-Fi for perdida, o OS X não será reconectado automaticamente.

Considerando a resposta de Kassym Dorsel:

  • Eu não estava confortável em ter minha senha de Wi-Fi armazenada de forma clara (é um risco extremamente baixo, mas ainda assim).

  • Eu queria que ele habilitasse o Wi-Fi se tivesse sido desativado.

  • Queria que ele tratasse da condição em que um endereço IP estático foi atribuído, o Wi-Fi estava ativado, mas ainda não estava conectado ou conectado à rede Wi-Fi errada (SSID).

Então, modifiquei o script dele para abordar essas preocupações (substitua <networkName>pelo SSID da sua rede preferida):

#!/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
Vic Demented
fonte
Semelhante à resposta aceita, eu corrigi os problemas mais problemáticos de programação de shell. Isso é quase elegante agora.
Tripleee
2

Você pode tentar jogar com o airportutilitário (nas versões mais recentes do OS X ele fica oculto /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airportou em um caminho semelhante).

Especificamente, as preferências JoinModee JoinModeFallbackpodem ser úteis. Na minha máquina, JoinModeFallbackestá definido como DoNothingpadrão. Mudá-lo para KeepLookingparece um começo promissor.

Execute airportsem argumentos para ver sua ajuda.

mpitt
fonte
Isso foi interessante e promissor, mas no final não mudou nada para mim. Alterei as preferências (eu tinha "desconhecido" e "nada" para fallback), mas o WiFi ainda não será reconectado.
tripleee
0

Aqui está uma refatoração simples que funciona para mim.

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

Obviamente, substitua $ssidpelo SSID da rede atual e $passwordpela senha dessa rede.

triplo
fonte