最近买了个tplink的wifi extender,但质量垃圾,网络连接非常不稳定,情况差的话15分钟就断线了,最好也就2小时就没有网络连接了。windows还不错,能自动重连,可是linux下用networkmanager就不会自动重连了,然后就不能上网了,必须断开再连。
写个小脚本,用cron运行,每分钟检查一下网络,ping一下wifi extender,如果不通就断开重连。
#!/bin/bash
ssid=xxxx
password=********
gate=tplinkextender.net
if [ -n "`ping -c 1 $gate 2>&1 | grep 'unknown host'`" ] || [ -n "`ping -c 1 $gate 2>&1 | grep 'Host Unreachable'`" ];then
nmcli dev disconnect wlan0
nmcli dev wifi connect $ssid password $password > /dev/null
fi
因为dbus不允许cron控制网络,所以虽然脚本可以用普通用户权限运行,但是用cron就只能用root运行,而root又不能读取wifi的密码,所以必须在脚本里写明密码。
更新:
这个方法会导致networkmanager记录下很多相同ssid的连接,因为nmcli dev wifi connect $ssid
会新建这个ssid的连接,如果有同名的存在就在后面加上数字1,2,3,4.. 所以更新脚本
#!/bin/bash
gate=tplinkextender.net
if [ -n "`ping -c 1 $gate 2>&1 | grep 'unknown host'`" ] || [ -n "`ping -c 1 $gate 2>&1 | grep 'Host Unreachable'`" ];then
nmcli radio wifi off
nmcli radio wifi on
fi
先关闭wifi再打开,让nm自己搜索wifi信号并连接上设置为自动连接的ssid,这样也不用特别指明ssid和密码了。