Answers:
我更喜欢禁用大多数网络自动配置和连接管理守护程序,然后自己处理。这是一个(bash)脚本,只要网络存在,您就不会断开连接,只要您没有故障的wifi驱动程序或电源问题,就可以保持连接状态。这个想法是每N秒对路由器执行一次ping操作,如果失败,则重新连接:
#!/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
所有这些都假定为一个开放的未加密网络(否则,您将必须添加适当的命令)。我已经在包括pi在内的各种linux机器上使用了这种方法,并且可以完美地工作。即使它定期进入睡眠状态(pi仍然无法通过它),它也将使系统无限期保持在线状态。
适当的检查间隔是3-5秒;此活动完全不会对系统资源产生任何重大影响。
您绝对需要先禁用网络自动配置,。包括ifplugd
和其他网络守护进程,或者这将与你的努力的干扰:
我其实用过apt-get remove ifplugd
。
要在启动时开始网络连接(因为我使用的是无头pi),我将其设置为可从/etc/rc.local
以下位置在raspbian上运行:
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应该启动。如果不是,则假定已插入以太网并且应该使用该以太网(如果不是,则dhclient只会掉线并且没有网络访问权限)。
为此,您可能必须
因此,这会在启动时将无头的pi接入网络并保持在那里。如果您想在不登录的情况下在运行时切换到eth的方法,则可以使用udev规则执行一些操作,以拔出wifi加密狗。
rc.local
。WRT日志轮换,这是一个与日志文件通常相关的独立问题(请参阅参考资料man logrotate
)。现在,如果该脚本具有相同的路径而不是追加,则该脚本将破坏(覆盖)以前的任何日志。为了进行调试,有时会wifi.$$.log
在wifi.conf文件中使用它,以便最后日志(不太可能)被破坏,并且在调整某些内容后可以将一个会话与另一个会话进行比较。$$
是“ wifi”过程的pid。
好吧,有一个非常简单的解决方案:
/etc/ifplugd/action.d/
并将ifupdown
文件重命名为ifupdown.original
cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
sudo reboot
就这样。通过关闭/打开AP进行测试;您应该看到Raspberry Pi正确重新连接。
action_wpa -> ../../wpa_supplicant/action_wpa.sh
,所以也许这是默认设置了吗?
dhcpcd
基于发行版的版本上不起作用,要使其在RPI3上运行,您需要apt-get install rcconf
切换dhcpcd
到networking
最近,我偶然发现了一个控制台应用程序,该控制台应用程序对所有无线配置进行了分类。您也可以使用此工具来配置LAN接口。
sudo apt-get install wicd-curses
它将安装许多其他软件包并在后台运行其自己的守护程序,但它确实使配置所有内容变得更加容易。运行它
sudo wicd-curses
如果收到未检测到网络的消息,请按P
(必须为大写字母,因此请使用[SHIFT] p),然后在无线接口字段中键入wlan0,然后按F10保存。
R
刷新列表。您可能需要按C
才能连接到接入点。如果进行有线连接,很可能会杀死LAN接口并启用无线功能。
它还管理连接,因此如果由于某种原因掉线,它将重新连接到任何已配置的无线访问点。
我测试了拔出WiFi适配器并将其重新插入的过程。这大约需要60到90秒钟,但它将重新连接到WiFi(不过我认为必须拔掉LAN)
希望能帮助到你!
wicd
wicd-curses
,我的RPi 3开始随机冻结。以前从未冻结过,一旦卸载,冻结立即消失了。谨防!
无需额外的脚本即可解决。
在/ etc / network / interfaces中放置:
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
漫游使接口可以自我修复。
另一种解决方案,摘自该解决方案。
首先配置您的wifi设置: sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
添加如下部分:
network={
ssid="MyNetworkName"
psk="MyPaz0rdz"
key_mgmt=WPA-PSK
}
然后,您的网络设置sudo vi /etc/dhcpcd.conf
如下:
interface wlan0
inform 192.168.1.200 # the static ip for the wifi card
static routers=192.168.1.254 # your router's ip
static domain_name_servers=192.168.1.254 # your dns, usually=your router
然后在某个位置(例如在)中创建该脚本文件,/home/pi/reconnect.sh
并授予其+x
可执行文件的权限。
#!/bin/bash
router=`ip route | awk '/default/ {print $3}'`
/bin/ping -q -c1 $router > /dev/null
if [ $? -eq 0 ]
then
true
# echo "Network OK"
else
echo "Network down, fixing..."
# ifdown --force wlan0
# sleep 5
/bin/kill -9 `pidof wpa_supplicant`
/sbin/ifup --force wlan0
/sbin/ip route add default via $router dev wlan0
/bin/mount -a
echo "wlan0 reconnected at `date`"
fi
然后以root身份登录,sudo su
并使用来编辑root的crontab crontab -e
。
在此文件的末尾添加以下行:
10 * * * * /home/pi/reconnect.sh
这意味着:“每10分钟执行一次该脚本(以root用户身份执行”)
现在,如果您已建立连接,则脚本将退出并且什么也不会发生。如果您无法ping通路由器,则脚本将尝试使用wpa_supplicant重新连接至该路由器。
请注意,从cron脚本(在这种情况下,只有在断开连接时)回显的所有内容都将通过电子邮件发送到root。因此,如果您已经配置了邮件别名和后记,那么当pi的wifi连接断开时,您将收到一封电子邮件,然后由于该脚本而再次成功返回。
这对我有用,于2017年3月30日使用Raspian Jessie:
http://alexba.in/blog/2015/01/14/automatically-reconnecting-wifi-on-a-raspberrypi/