#1 楼
我更喜欢禁用大多数网络自动配置和连接管理守护程序,然后自己处理。这是一个(bash)脚本,只要网络存在,您就不会断开连接,只要您没有故障的wifi驱动程序或电源问题,就可以保持连接状态。这个想法是每N秒对路由器执行一次ping操作,如果失败,则重新连接: #!/bin/bash
# make sure we aren't running already
what=`basename /etc/wifi.conf
`
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
因此,在这种情况下,
ifplugd
可能包含: 。我已经在包括pi在内的各种linux机器上使用了这种方法,并且可以完美地工作。 一个像样的检查间隔是3-5秒;即使它周期性地进入睡眠状态(pi仍然不能这样做)。此活动完全不会对系统资源造成任何影响。
您绝对需要首先禁用网络自动配置。包括
apt-get remove ifplugd
和其他网络守护程序,否则会干扰您的工作:我如何禁用Raspbian上的自动配置网络?
我实际上使用过
/etc/rc.local
。要在启动时开始联网(因为我使用的是无头pi),我已将此设置从
/usr/local/bin/wifi
的raspbian上运行:router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
nice
是脚本。如果您不知道man nice
的用途,请阅读if
。q4312079q的要点是,如果将我的wifi加密狗插入到pi中,则内核将在此处加载8192cu模块点-所以wifi应该开始了。如果不是,则假定已插入以太网并且应该使用该以太网(如果不是,则dhclient只会掉出来并且没有网络访问权限)。
要使其正常工作,您可能必须
因此,这会在启动时将无头的pi带入网络并将其保持在该位置。如果您想在不登录的情况下在运行时切换到eth的方法,则可以使用udev规则执行一些操作,以拔出wifi加密狗。
#2 楼
好吧,有一个非常简单的解决方案:转到
/etc/ifplugd/action.d/
并将ifupdown
文件重命名为ifupdown.original
然后执行:
cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
最后:
sudo reboot
就这些。通过关闭/打开AP进行测试;您应该会看到Raspberry Pi正确重新连接。
评论
这是最简单,最有效的答案。经过2 Rpi测试,可以正常工作。从以下位置找到此链接:raspberrypi.org/phpBB3/…
–莫维斯·莱德福德
2014年1月9日在4:42
很抱歉提出一个简单的问题-为什么这样做有效?
–杨杰夫·肉丸(Jeff Meatball Yang)
14年2月18日在1:24
@JeffMeatballYang,为您的问题启动新线程。
– AndaluZ
14年2月18日在8:38
对我而言,那里没有ifupdown文件,只有链接action_wpa-> ../../wpa_supplicant/action_wpa.sh,所以也许这是默认设置了吗?
– Zitrax
16 Mar 27 '16 at 14:42
是的,就像其他人说的那样:这在基于dhcpcd的发行版上不起作用,为了使它在RPI3上运行,您需要apt-get install rcconf并从dhcpcd切换到网络
–test30
18-10-30在21:16
#3 楼
最近,我偶然发现了一个控制台应用程序,该应用程序将所有无线配置都整理了出来。您也可以使用此工具来配置LAN接口。sudo apt-get install wicd-curses
它将安装许多其他软件包并在后台运行其自己的守护程序,但它确实使配置所有内容变得更加容易。使用
sudo wicd-curses
运行它。如果收到消息说未检测到网络,请按
P
(必须为大写字母,请使用[SHIFT] p ),然后在无线接口字段中输入wlan0,然后按F10键保存。R
刷新列表。使用键盘上的光标进行导航。在列表中向上和向下
按向右以配置无线连接
向下按几次并选中“自动连接到此网络”
再次按下几次并在关键字段
按F10保存
您可能必须按
C
才能连接到接入点。如果连接了有线,很可能会杀死LAN接口并启用无线功能。它还可以管理连接,因此如果由于任何原因而掉线,它将重新连接到任何已配置的无线访问点。 br />
我测试了拔出WiFi适配器并将其重新插入的过程。这大约需要60到90秒,但它将重新连接到WiFi(我认为必须拔掉LAN)
希望有帮助!
评论
不确定如何处理重新连接-初始连接不是这里的问题!
– andig
2013年9月25日14:44
我更新了答案,因为您必须检查自动连接的步骤。同样,在首选项中,您应该一直向下滚动。最后一个选项不在屏幕上。它还表示自动尝试连接到Wifi网络(默认情况下为“打开”)。我什至可以将WiFi适配器插回去,它会在2分钟之内重新连接。您还将获得名为wicd的GUI版本
– Piotr Kula
2013年9月25日在18:54
命令“ sudo wicd-cruses”中有错字“ u”和“ r”被交换
–加西奥
2014年11月14日23:38
安装wicd-curses后,我的RPi 3开始随机冻结。以前从未冻结过,一旦卸载,冻结立即消失了。谨防!
–akhmed
16年6月14日在5:22
安装wicd-curses后,运行Jessie Lite的RPi 3s尚未冻结并保持连接状态。但是今天,我尝试通过以太网端口连接到一个端口,发现启动后几秒钟该接口将丢失。在配置wicd-curses连接到wifi之前,我能够正常连接。
–克里斯·詹克斯(Chris Jenks)
16年6月17日在22:44
#4 楼
无需额外的脚本即可解决。在/ etc / network / interfaces中放置: -治愈。
评论
最后一行似乎为wlan0接口添加了第二个IP地址。那是故意的吗?
– fche
16年5月18日在22:07
我最后只有一个DHCP分配的地址。但是,如果启动脚本更改了行为,也不会完全让我感到惊讶-此配置文件不必要地是不可思议的...
– David Sainty
16年5月23日在12:49
在我的raspbian pi2机器上,如果wlan下降的时间足够长,以至于三个身份验证尝试失败,即使使用“ wpa-roam”,它也不会再次尝试。
– fche
16年5月23日在18:39
这是在RPi 3上对我有用的唯一答案。谢谢!
–akhmed
16年6月14日在16:48
#5 楼
netcfg尝试
netcfg
。没有关于您正在使用的发行版的更多详细信息,我无法提供更多详细信息,但是它应该可以满足您的要求。评论
我正在使用当前的raspbian发行版:pi @ raspberrypi〜$ man netcfg没有手动输入netcfg pi @ raspberrypi〜$ netcfg -bash:netcfg:找不到命令pi @ raspberrypi〜$ apt-cache搜索netcfg pi @ raspberrypi〜$
– andig
2012年12月28日在8:20
#6 楼
这对我有用,于2017年3月30日使用Raspian Jessie:http://alexba.in/blog/2015/01/14/automatically-reconnecting-wifi-on-a-raspberrypi /
评论
请总结您帖子中的解决方案,以防链接失效。
–tlhIngan
17年3月31日在3:05
CMB,欢迎来到StackExchange的RPi风格角落。网站政策不鼓励链接答案,因为它们会受到链接腐烂的影响。您不需要重复链接的内容,但是一个好的答案至少应该在链接中包含的亮点上展开。
–Jacobm001♦
17年3月31日下午3:31
除了上述Jacobm001的评论之外,根据我们关于无信息仅链接答案的政策,如果本帖子未经过编辑以包含可以作为答案的信息,但是最少可以在48小时内将其转换为Community Wiki,以简化具有它被社区纠正。
– goobering
17 Mar 31 '17 at 11:44
#7 楼
另一种解决方案,摘自该解决方案。首先配置您的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 }'`
/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
然后使用
sudo su
以root用户身份登录,并使用crontab -e
编辑root的crontab。在此文件末尾添加以下行:
*/10 * * * * /home/pi/reconnect.sh
这意味着:“每10分钟执行一次该脚本(以root身份执行)”-注意,如果开头没有* /,它将是“每小时每小时10分钟执行一次” 。
现在,如果您有连接,则脚本将退出并且什么也不会发生。如果您无法ping通路由器,则脚本将尝试使用wpa_supplicant重新连接至该路由器。
请注意,将从cron脚本回显的所有内容(在这种情况下,仅当断开连接时)都将通过电子邮件发送给根。因此,如果您已经配置了邮件别名和后记,那么当您的pi的wifi连接断开时,您将收到一封电子邮件,然后由于该脚本而再次成功返回。
评论
听起来值得测试。不是Linux专业人士-如何将脚本设置为在启动时运行-放入cron?是否可能/也需要添加日志轮换?
– andig
13-2-26在16:09
@andig:我添加了一些有关通过rc.local启动的段落。 WRT日志轮换,这是一个通常与日志文件有关的独立问题(但请参见man logrotate)。现在,如果该脚本具有相同的路径而不是追加,则该脚本将破坏(覆盖)以前的任何日志。为了进行调试,我有时在wifi.conf文件中使用了wifi。$$。log,以便(不太可能)破坏最后一个日志,并且在调整某些内容后可以将一个会话与另一个会话进行比较。 $$是“ wifi”过程的关键。
– goldilocks♦
13年2月26日在18:10
我担心有时外壳脚本可能很脆弱,并且在进行更新或安装了其他网络软件时很难破解。请注意此方法。
–耶利米
13年8月29日在8:56
@耶利米:这是一个很好的恐惧。我编写了该脚本,并对其进行了多年的调整,并觉得我对它在其中运行的一般背景有所了解,因此我需要注意什么。但是,传递理解可能比代码片段更难。对我来说,这只是尝试将NetworkManager减少到一些非常基本的元素上的一种替代方法。在简单的独立系统的情况下,这可以为人们提供与Linux发行版中的“这对我有用”类似的观点。
– goldilocks♦
13年8月29日在9:28
所以:我知道这篇文章,并打算在主要发行版本之一(debia,fedora和派生的)引入一些与之混淆的内容时对其进行更新。我还将重点说明需要禁用的内容以及禁用方法。
– goldilocks♦
13年8月29日在9:31