关于黑苹果下Intel无线网卡无故断流的修复

目前太多机器(我指的是笔记本)选择将无线网卡焊接在主板上了,而且,网卡的芯片基本上是Intel。这其实对大部分人来说并没什么影响,但是对于像我这种喜欢使用黑苹果的人来说,影响就有些大了,至少在去年以前:这个卡在黑苹果里是没法使用的,要想使用无线,要么是搞一块外接的USB无线网卡,要么是牺牲一块NVME插槽(如果你的机器凑巧支持双NVME的话)来做转接。但是,好的一点是去年一个国内大佬做出了Intel网卡、蓝牙的黑苹果驱动,地址:
OpenIntelWireless

目前,该驱动的稳定版为1.3.0,测试版为2.0.0,经过测试已经可以驱动市面上常见的Intel无线网卡。

但是,在我个人的日常使用中,时常会出现掉线,经过与原作者Z大沟通以及抓包测试,目前给的结论是:密钥过期了。暂时不清楚是什么原因造成的。

实际使用过程中,如果发生掉线通常重连一下网络就可以恢复正常,所以就萌发了个念头:让机器自己随时监测是不是与路由器断开,是的话就自己直接重连,不让人工参与?有了这个想法,就弄了下面这个shell脚本来实现:

## 路由器名称
routername="OpenWrt"
## 路由器密码
password="12345678"
## 路由器IP
routerip="192.168.1.1"
## 网卡名称
netcardname="en1"

play() {
    hour=$(date "+%H")
    if [[ $hour -gt 21 ]] ; then
        echo $1
    elif [[ $hour -lt 8 ]] ; then
        echo $1
    else
        say $1 -r 250
    fi
}

connectAirport() {
    networksetup -setairportpower $4 off
    sleep 2
    play "开始尝试第一次连接无线网络,请等待"
    echo "关闭 Airport"
    networksetup -setairportpower $4 on
    echo "等待2秒后尝试连接 $1"
    sleep 2
    echo "尝试连接 $1"
    networksetup -setairportnetwork $4 $1 $2
    echo "等待 5 秒后检测连接状态"
    sleep 5
    if [[ $(ping -i1 -c1 -t1 $3|grep "100.0% packet loss") == "" ]] ; then
        return
    else
        play "第一次修复失败,继续尝试修复"
        echo "尝试连接到 $1"
        networksetup -setairportnetwork $4 $1 $2
        echo "等待10秒后检测连接状态"
        sleep 10
        if [[ $(ping -i1 -c1 -t1 $3|grep "100.0% packet loss") == "" ]] ; then
            return
        else
            play "无法修复,请手动处理"
            echo "Can't find $1, Break"
            exit
        fi
    fi
}

echo "开始监控网卡状态并尝试修复"
times=0
while [ 1 ]
do
    if [[ $(ping -i1 -c2 -t2 $routerip|grep " 0 packets received") == "" ]] ; then
        continue    ###网络工作正常
    else
        ((times=times+1))
        time=$(date "+%Y-%m-%d %H:%M:%S")
        echo "$time 网络第 $times 次断开"
        play "网络已经断开,开始修复"
        echo $(ping -i1 -c2 -t2 $routerip)
        connectAirport $routername $password $routerip $netcardname;
        play "修复成功,继续监控"
    fi
done

将上述代码保存一下比如~/checkAirport.command,然后在终端执行

chmod +x ~/checkAirport.command
~/checkAirport.command

第一条给这个文件赋上可执行权限,第二条就执行它,扔那测试吧。上述代码的原理其实就是不停的发送ping命令来检测是否与指定的路由断开(间隔1s)如果断开就尝试关闭无线然后重新开启并尝试连接指定的路由器。

再说明一下:上述脚本针对的是AirportItlwm.kext,使用Z大的另一个驱动itlwm.kext是不存在掉线的问题的,只是不支持接力。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 兼容情况说明: 本机配置表:电脑型号 :Aspire E1-471G 笔记本电脑操作系统 : ...
    Bug2Coder阅读 20,400评论 9 7
  • 前言 白苹果价格高昂,不是所有人都能接受,黑苹果因此诞生。 本就为了便宜的黑苹果,凭什么还要去买因黑苹果而溢价达三...
    thepoy阅读 52,835评论 0 2
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 128,728评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,949评论 0 4

友情链接更多精彩内容