我正在使用pi监视功率计。使用Edimax EW-7811UN USB适配器通过WiFi连接将数据传输到PC。当Wifi连接断开(通宵关闭或不稳定的连接)时,USB适配器仍保持禁用状态。 />

#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加密狗。

评论


听起来值得测试。不是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

#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连接断开时,您将收到一封电子邮件,然后由于该脚本而再次成功返回。