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

我有一台运行需要互联网的软件的Ubuntu机器。 但是,有时wifi失败(例如路由器重启)并且再次找不到网络,直到我手动为网络管理器重启或我关闭并在wifi上找到它。

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

我认为这可能是由于一个新的网络管理器错误,因为我最近才开始遇到这个问题 – 我想在升级到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 

我不知道为什么,但正如你所提到的,有时当wifi失败时,网络管理员再也找不到网络了。

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

当网络管理器丢失我的无线连接并且它再次找不到我的wifi时(我知道wifi有效),我执行命令:

 sudo iwlist wlan0 scan 

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

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

但是,正如您所提到的,您可以通过它来实现它,并且您可以在不测试连接的情况下执行此操作(扫描过程会更新您的wifi列表,但如果您已连接,则不会关闭当前的无线连接)。

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

就像是:

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

但请记住,此脚本必须使用root权限进行sudoed或执行。 它仅发送1次ping,暂停1秒。

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

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

希望这可以帮助。