Я предпочитаю отключать большую часть работы демона автоматической настройки сети и управления соединениями и разбираюсь с этим сам. Вот скрипт (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
.
Для запуска сети при загрузке (так как я использую пи безголовый), у меня есть этот набор для запуска на 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 подключен к pi, модуль 8192cu будет загружен ядром в этот момент - так что wifi должен запуститься. Если нет, то предполагается, что ethernet подключен и должен использоваться (если это не так, dhclient просто вылетит, и нет доступа к сети).
Для этого вам, вероятно, придется
Таким образом, это загружает безголовый пи в сеть при загрузке и сохраняет его там. Если вам нужен способ переключиться на eth во время работы без входа в систему, вы можете сделать что-то с помощью правил udev для извлечения ключа Wi-Fi.