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.