Prefiro desativar a maioria das coisas de daemon de gerenciamento automático de configuração e rede e lidar com isso sozinho. Aqui está um script (bash) que manterá a conexão ativa enquanto a rede estiver lá e você não tiver um driver wifi com falha ou problemas de energia; a idéia é executar ping no roteador a cada N segundos e, se isso falhar, reconecte-se:
#!/bin/bash
# make sure we aren't running already
what=`basename $0`
for p in `ps h -o pid -C $what`; do
if [ $p != $$ ]; then
exit 0
fi
done
# source configuration
. /etc/wifi.conf
exec 1> /dev/null
exec 2>> $log
echo $(date) > $log
# without check_interval set, we risk a 0 sleep = busy loop
if [ ! "$check_interval" ]; then
echo "No check interval set!" >> $log
exit 1
fi
startWifi () {
dhclient -v -r
# make really sure
killall dhclient
iwconfig $wlan essid $essid
dhclient -v $wlan
}
ifconfig $eth down
ifconfig $wlan up
startWifi
while [ 1 ]; do
ping -c 1 $router_ip & wait $!
if [ $? != 0 ]; then
echo $(date)" attempting restart..." >> $log
startWifi
sleep 1
else sleep $check_interval
fi
done
Portanto, /etc/wifi.conf
nesse caso, pode conter:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Tudo isso pressupõe uma rede aberta não criptografada (caso contrário, você precisará adicionar os comandos apropriados). Eu usei essa abordagem em várias máquinas Linux, incluindo o pi, e funciona perfeitamente; manterá um sistema on-line indefinidamente, mesmo que periodicamente entre em suspensão (o que o pi não pode, de qualquer maneira).
Um intervalo de verificação decente é de 3-5 segundos; essa atividade não afetará significativamente os recursos do sistema.
Você absolutamente precisa desativar a configuração automática de rede primeiro . incluindo ifplugd
e outros daemons de rede, ou isso interferirá em seus esforços:
Como posso desativar a rede configurada automaticamente no Raspbian?
Eu de fato usei apt-get remove ifplugd
.
Para iniciar a rede na inicialização (desde que eu uso o pi sem cabeça), eu tenho esse conjunto para rodar no raspbian de /etc/rc.local
:
wifi_mod=`lsmod | grep 8192cu`
if [ "$wifi_mod" ]; then
echo "Starting wifi..."
/usr/bin/nice -n -10 /usr/local/bin/wifi &
else
echo "Starting ethernet..."
/sbin/ifconfig eth0 up
/sbin/dhclient eth0
fi
/usr/local/bin/wifi
é o script. Se você não sabe para que nice
serve, leia man nice
.
O ponto principal if
é que, se meu dongle wifi estiver conectado ao pi, o módulo 8192cu será carregado pelo kernel neste momento - portanto, o wifi deve iniciar. Caso contrário, presume-se que a ethernet esteja conectada e deva ser usada (se não estiver, o dhclient irá apenas cagar e não haverá acesso à rede).
Para que isso funcione, você provavelmente terá que
Portanto, isso coloca um pi decapitado na rede na inicialização e o mantém lá. Se você quiser uma maneira de mudar para eth durante a execução sem fazer login, poderá fazer algo com as regras do udev para retirar o dongle do wifi.
rc.local
. Rotação de log do WRT, que é uma pergunta separada relacionada aos arquivos de log em geral (mas consulteman logrotate
). No momento, esse script ignora (sobrescreve) qualquer log anterior, se existir com o mesmo caminho, não anexar. Para depuração, eu às vezes useiwifi.$$.log
no arquivo wifi.conf, para que o último log (improvável) seja derrotado e eu possa comparar uma sessão com outra depois de ajustar algo.$$
é o pid do processo "wifi".Bem, há uma solução muito simples:
/etc/ifplugd/action.d/
e renomeie oifupdown
arquivo paraifupdown.original
cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
sudo reboot
Isso é tudo. Teste isso desligando / no seu AP; você deve ver que o seu Raspberry Pi se reconecta corretamente.
fonte
action_wpa -> ../../wpa_supplicant/action_wpa.sh
, então talvez esse seja o padrão agora?dhcpcd
distros baseadas, a fim de obter essa execução no RPI3 você precisaapt-get install rcconf
e alternar entredhcpcd
anetworking
Recentemente, deparei com um aplicativo de console que classifica toda a configuração sem fio. Você também pode usar esta ferramenta para configurar a interface da LAN.
Ele instalará muitos outros pacotes e executará seu próprio daemon em segundo plano, mas com certeza facilita a configuração de tudo. Execute-o com
Se você receber uma mensagem dizendo que nenhuma rede foi detectada, pressione
P
(deve ser maiúsculo), digite [SHIFT] p), digite wlan0 no campo da interface sem fio e pressione F10 para salvar.R
para atualizar a lista.Pode ser necessário pressionar
C
para conectar-se ao ponto de acesso. Se você fosse conectado, provavelmente matará a interface da LAN e ativará a conexão sem fio.Ele também gerencia a conexão para se reconectar a qualquer ponto de acesso sem fio configurado, se cair por qualquer motivo.
Eu testei conectando o adaptador WiFi e conectando-o novamente. Demora cerca de 60 a 90 segundos, mas ele será conectado novamente ao WiFi (acho que a LAN deve estar desconectada)
Espero que ajude!
fonte
wicd
wicd-curses
, meu RPi 3 começou a congelar aleatoriamente. Nunca estava congelando antes e o congelamento desapareceu imediatamente depois que eu o desinstalei. Cuidado!Isso pode ser resolvido sem scripts extras.
Em / etc / network / interfaces, coloque:
allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp
O roaming permite que a interface se recupere automaticamente.
fonte
netcfg
Tente
netcfg
. Sem mais detalhes sobre qual distribuição você está usando, não posso fornecer muitos mais detalhes, mas ele deve fazer o que você deseja.fonte
Outra solução, extraída desta .
Primeiro, defina suas configurações de wifi:
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
adicionando uma seção como esta:Em seguida, suas configurações de rede com
sudo vi /etc/dhcpcd.conf
:Em seguida, crie esse arquivo de script em algum lugar, por exemplo,
/home/pi/reconnect.sh
e+x
permita que ele seja executável.Então faça o login como root
sudo su
e edite o crontab do root comcrontab -e
.No final deste arquivo, adicione esta linha:
10 * * * * /home/pi/reconnect.sh
Isso significa: "execute esse script a cada 10 minutos (como root)"
Agora, se você tiver uma conexão, o script será encerrado e nada acontecerá. Se você não conseguir executar ping no seu roteador, o script tentará se reconectar usando o wpa_supplicant.
Observe que tudo o que é ecoado em um script cron (nesse caso, somente quando desconectado) será enviado por email para o root. Portanto, se você configurou seus aliases de e-mail e postscript, receberá um e-mail sempre que a conexão wifi do seu pi for desativada e depois voltará com êxito graças ao script.
fonte
Isso funcionou para mim, usando Raspian Jessie em 30 de março de 2017:
http://alexba.in/blog/2015/01/14/automatically-reconnecting-wifi-on-a-raspberrypi/
fonte