Ağ otomatik konfigürasyonunun ve bağlantı yönetimi arka plan programlarının çoğunu devre dışı bırakmayı ve kendimle ilgilenmeyi tercih ediyorum. İşte ağ orada olduğu sürece bağlantıyı sürdürecek ve bir aksak wifi sürücüsü ya da güç sorunları olmadıkça bir (bash) betiği; Buradaki amaç yönlendiriciye her N saniyede bir ping atmak ve bu başarısız olursa yeniden bağlanın:
#!/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
Yani, /etc/wifi.conf
bu durumda şunları içerebilir:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Bunların tümü açık şifrelenmemiş bir ağ varsayar (aksi takdirde uygun komutları eklemeniz gerekir). Bu yaklaşımı pi de dahil olmak üzere çeşitli linux makinelerinde kullandım ve kusursuz çalışıyor; Düzenli olarak uykuya geçse bile (ki pi'nin yapamadığı) bir sistemi süresiz olarak çevrimiçi tutacaktır.
İyi bir kontrol aralığı 3-5 saniyedir; Bu aktivite, sistem kaynaklarını hiç bir şekilde etkilemeyecektir.
Önce otomatik olarak ağ otomatik yapılandırmasını devre dışı bırakmanız gerekir ,. dahil olmak üzere ifplugd
ve diğer ağ kurma görevlileri de dahil , yoksa bu çabalarınızı engelleyecektir:
Raspbian'da otomatik yapılandırılmış ağı nasıl devre dışı bırakabilirim?
Aslında kullandım apt-get remove ifplugd
.
Ağ açmayı başlatmak için (pi'yi başsız kullandığımdan beri), şu şekilde raspbian'da çalışacak şekilde ayarlamıştım /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
komut dosyası. Ne için olduğunu bilmiyorsan nice
, oku man nice
.
Noktası if
böylece wifi başlamalıdır - benim wifi dongle pi takılırsa, 8192cu modülü bu noktada çekirdek tarafından yüklenecek olmasıdır. Eğer değilse, o zaman ethernetin takılı olduğu ve kullanılması gerektiği varsayılır (eğer değilse, dhclient çöker ve ağ erişimi olmaz).
Bunun çalışması için muhtemelen yapmanız gerekecek
Yani, bu açılışta ağa başsız bir pi alır ve orada tutar. Giriş yapmadan çalışırken ete geçiş yapmanın bir yolunu istiyorsanız , wifi dongle'ını çıkarmak için udev kuralları olan bir şey yapabilirsiniz .