Я вважаю за краще вимкнути більшу частину демональної конфігурації мережі та керування з’єднаннями і вирішувати її самостійно. Ось (bash) скрипт, який підтримуватиме зв’язок до тих пір, поки мережа є, і у вас не буде проблем з драйвером Wi-Fi або проблемами з живленням; ідея полягає в тому, щоб пінг-маршрутизатор кожні 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
Отже, /etc/wifi.conf
у цьому випадку можуть міститися:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Це все передбачає відкриту незашифровану мережу (якщо інше, вам доведеться додати відповідні команди). Я використовував цей підхід на різних машинах Linux, включаючи pi, і він працює бездоганно; вона буде тримати систему в Інтернеті нескінченно, навіть якщо вона періодично переходить у сплячий режим (що пі все одно не може).
Пристойний інтервал перевірки - 3-5 секунд; ця діяльність зовсім не вплине на системні ресурси.
Ви абсолютно необхідно відключити мережеву автоматичну конфігурацію першого ,. включаючи ifplugd
та інші демонстрації мереж, або це заважатиме вашим зусиллям:
Як я можу відключити автоконфігуровану мережу на Raspbian?
Я насправді використовував apt-get remove ifplugd
.
Щоб почати мережу під час завантаження (оскільки я використовую pi без голови), у мене цей набір працює на raspbian з /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
є сценарій. Якщо ви не знаєте, що nice
таке, читайте man nice
.
Справа в if
тому, що якщо мій wifi dongle буде підключений до pi, модуль 8192cu буде завантажений ядром в цей момент, тому Wi-Fi повинен запуститися. Якщо ні, то передбачається, що Ethernet підключений до мережі та його слід використовувати (якщо його немає, dhclient просто вийде з ладу і немає доступу до мережі).
Для цього вам, мабуть, доведеться працювати
Таким чином, це отримує безголовий пі в мережу під час завантаження і зберігає його там. Якщо ви хочете, щоб під час запуску без входу в систему, як перейти на eth, ви можете зробити щось із правилами udev для витягування ключа wifi.