我有一台运行需要互联网的软件的Ubuntu计算机。但是,有时wifi会失败(例如,路由器重新启动),并且无法再次找到网络,直到我手动为网络管理器重新启动服务或我关闭并打开wifi才能找到它。
是否有可能运行cron作业或受监管的作业以监视连接性,以及是否找不到网络来重新启动网络管理器服务并连接到该特定的SSID,是否可能?
我有一台运行需要互联网的软件的Ubuntu计算机。但是,有时wifi会失败(例如,路由器重新启动),并且无法再次找到网络,直到我手动为网络管理器重新启动服务或我关闭并打开wifi才能找到它。
是否有可能运行cron作业或受监管的作业以监视连接性,以及是否找不到网络来重新启动网络管理器服务并连接到该特定的SSID,是否可能?
Answers:
我认为这可能是由于新的网络管理器错误所致,因为我也是最近才开始遇到此问题-我认为在升级到Ubuntu 15.04之后。
作为这两个文件的变通办法,看来我已经设法暂时解决了此问题:
~/.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
~/.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时(并且我知道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秒。
我认为问题就像连接由于路由器的连接问题而丢失。当路由器本身出现问题时,重新启动网络管理器无济于事。相反,您可以创建一个脚本,以在失去连接时使用SIGSTOP暂停运行软件的进程,并在网络可用时再次触发进程以继续使用SIGCONT。并将脚本添加到您的cron作业中,安排它每分钟运行一次。
供您参考:http : //hints.macworld.com/article.php?story=20030915193440334
希望这可以帮助。