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?


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

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

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.