断开连接后如何保持wifi连接?


9

我有一台运行需要互联网的软件的Ubuntu计算机。但是,有时wifi会失败(例如,路由器重新启动),并且无法再次找到网络,直到我手动为网络管理器重新启动服务或我关闭并打开wifi才能找到它。

是否有可能运行cron作业或受监管的作业以监视连接性,以及是否找不到网络来重新启动网络管理器服务并连接到该特定的SSID,是否可能?


我认为这可能是由于新的网络管理器错误所致,因为我也只是在最近才开始遇到此问题,我认为在升级到Ubuntu 15.04之后。
萨迪

1
有许多错误报告表明可能存在问题。您能否发布内核(uname -a)和网络管理器版本的详细信息,以及WiFi卡的详细信息。
DaveM

Answers:


7

我认为这可能是由于新的网络管理器错误所致,因为我也是最近才开始遇到此问题-我认为在升级到Ubuntu 15.04之后。

作为这两个文件的变通办法,看来我已经设法暂时解决了此问题:

  1. 我有一个脚本文件来观看WiFi连接,并在断开连接时打开和关闭WiFi,例如~/.bin/WiFi-Keep-Connected,显示以下内容:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    sleep 10
done

  1. 我还有一个.desktop文件,可以在每次登录时保持此脚本运行,例如~/.config/autostart/KeepWifiConnected.desktop,使用以下内容:


[Desktop Entry]
Type=Application
Exec=/home/"username"/.bin/WiFi-Keep-Connected
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Keep WiFi Connected
Icon=networkmanager

注意:您需要在Exec=上面指定的路径中输入您的用户名。

注意:有时以这种方式重新启动Wi-Fi是不够的,在这种情况下,我必须通过从终端输入一次甚至两次此命令来重新启动网络管理器sudo service network-manager restart

因此,它可能是一个更好的主意来修改上面(以防万一)这样的脚本:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        gksudo service network-manager restart
        sleep 10
    fi
    sleep 10
done


1

我不知道为什么,但是正如您提到的,有时当wifi出现故障时,网络管理员无法再次找到网络。

我认为问题在于wifi连接失败后,网络管理器不会刷新wifi列表(而且似乎网络管理器隐藏了有问题的网络)。网络管理器没有重新扫描菜单选项,并且禁用和启用网络管理器菜单上的无线复选框不会强制进行新的wifi扫描(就像重新启动服务一样)。

当网络管理员失去我的无线连接并且再次找不到我的wifi时(并且我知道wifi可以正常工作),我执行以下命令:

sudo iwlist wlan0 scan

它在wlan0接口上执行wifi扫描(wlan0是我的笔记本电脑中无线接口的名称),并向您显示可用的无线网络,但副作用是网络管理器会自动刷新其列表并查找丢失的网络。

当发生此问题时,我更喜欢手动执行命令(网络重新连接不能确保通讯恢复,并且某些程序需要重新启动)。

但是,正如您提到的,您可以将其设置为cron,并且可以在不测试连接性的情况下进行操作(扫描过程会更新您的wifi列表,但如果您已连接,则不会关闭当前的无线连接)。

如果愿意,可以使用ping或iwconfig测试连接性;如果未连接,则启动扫描。

就像是:

#!/bin/bash
if ! ping -c 1 -W 1 your_router_ip &> /dev/null
then
    iwlist wlan0 scan
fi

但是请记住,必须使用root特权对这个脚本进行伪造或执行。它仅发送1次ping,超时1秒。


上面的解决方案很好,但是如何从网络管理器(nm)捕获连接已断开的通知。从nm本身内部应该可以做到这一点,快速浏览一下源似乎可以证明它的功能。该消息来自dbus,nm图标更新,因此这可能是一个错误,或者系统的另一部分捕获了连接断开并已被修改并且通知不再通过以尝试重新连接吗?
DaveM

0

我认为问题就像连接由于路由器的连接问题而丢失。当路由器本身出现问题时,重新启动网络管理器无济于事。相反,您可以创建一个脚本,以在失去连接时使用SIGSTOP暂停运行软件的进程,并在网络可用时再次触发进程以继续使用SIGCONT。并将脚本添加到您的cron作业中,安排它每分钟运行一次。

供您参考:http : //hints.macworld.com/article.php?story=20030915193440334

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.