Armbian切换Wifi

找了个盒子刷了Armbian,主要有两个作用,一个是做离线下载和SMB。另外一个作用是用来搞打印服务器,因为家里角落比较多,因此有两个路由器信号,而打印机所在的位置的wifi信号,外网速度并不好,因此想到平时盒子做下载机,就把盒子放到角落A,需要打印就把盒子放到角落B,然而不管是在角落A还是在角落B,两个wifi信号都可以接受到,但是我发现Armbian并不能主动切换到wifi信号更好的热点,因此写一个脚本来切换wifi

#!/bin/bash

# 两个wifi的密码都一样
wifi_pwd="xxxxxxxxx"

# 定义函数:查询热点信号,参数是wifi ssid
get_wifi_signal() {
  local ssid=$1
  echo "获取wifi:$ssid的信号情况"
  wifi_signal=''
  #一个wifi名称,可能对应两项(5G/2.4G),awk只取一行
  connect_status=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $1}')
  if [ -z $connect_status ] || [ $connect_status != '*' ]; then
    wifi_signal=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $7}')
  else
    # 说明当前行wifi是已连接的
    wifi_signal=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $8}') 
  fi
  # 注意定义函数返回值时echo和return的区别和调用函数获取返回值的区别
  return $wifi_signal
}

# 定义函数:查询当前连接的热点信息
get_current_connection() {
 # 查看当前连接的热点名称,当服务器存在多个网桥时,应注意过滤条件。保证查询到正确的信息
 current_conn=$(nmcli device status | grep wlan0 | grep wifi | grep -v disconnected | awk '{print $4}')
 # 这里使用的是echo返回,调用方使用方式为 var=$(get_current_connection)
 echo $current_conn
}

# 定义切换wifi函数
switch_wifi() {
 # 查询两个热点的信号
 get_wifi_signal yun
 # 获取函数上一步的操作结果
 yun_signal=$?
 get_wifi_signal ap
 ap_signal=$?
 echo "搜到的热点信号强度[ap=$ap_signal , yun=$yun_signal]"
 
 # 执行函数并得到当前连接的热点名称
 current_conn=$(get_current_connection)

 if [ $current_conn = 'ap' ]; then
  echo '当前连接的热点是[ap],判断当前热点信号强度是否小于[yun],如果小于切换到yun热点'
  if [ $ap_signal -lt $yun_signal ]; then
   echo '当前连接的热点ap信号小于热点yun信号,切换到yun热点'
   nmcli device wifi connect yun password $wifi_pwd
  fi
 elif [ $current_conn = 'yun' ]; then
  echo '当前连接的热点是[yun],判断当前热点信号强度是否小于[ap],如果小于切换到ap热点'
  if [ $yun_signal -lt $ap_signal ]; then
   echo '当前连接的热点yun信号小于热点ap信号,切换到ap热点'
   nmcli device wifi connect ap password $wifi_pwd
  fi
 else
  echo '当前未连接任何热点,准备连接信号最好的热点'
  if [ $yun_signal -lt $ap_signal ]; then
   nmcli device wifi connect ap password $wifi_pwd
  else
   nmcli device wifi connect yun password $wifi_pwd 
  fi
 fi
}


#############Main###########
while true; do
 echo "=======$(date +"%Y-%m-%d %H:%M:%S")开始执行热点检测,确保连上信号最好的热点======"
 # 检测是否有指定的两个或以上热点(考虑双频合一)
 wifi_count=`nmcli dev wifi list | grep -E 'yun|ap' | wc -l`
 #使用==进行字符串比较时,它区分大小写。如果不区分大小写的比较,可以使用=操作符
 if [ $wifi_count = 1 ]; then
  echo '只搜索到一个热点,判断热点是否已连接,随后执行操作'
  # 执行函数并得到当前连接的热点名称
  current_conn=$(get_current_connection)
  if [ -z $current_conn ]; then
    echo '当前未连接热点,准备连接热点......'
  # 前一个wifi连接成功不会连接下一个wifi,前一个wifi连接失败才会连接下一个wifi
  nmcli device wifi connect ap password $wifi_pwd || nmcli device wifi connect yun password $wifi_pwd 
  fi
 elif [ $wifi_count = 0 ]; then
  echo '未搜到热点,不再处理'
 else
  switch_wifi
 fi
 sleep 600
done

把脚本放到crontab中执行就可以了,可以使用crontab中可以使用@reboot关键字

脚本大致意思是,先查询预定义的两个wifi信号盒子是否能搜到,可以搜到一个预定义的热点,则直接连接那个热点,搜不到热点则不处理,搜到了多个热点,则准备执行热点切换。首先查询预定义的两个热点的信号是多少,这里一定要注意查询条件需要符合自己盒子的情况,然后查询当前连接的是哪个热点,根据当前连接热点的信号情况,判断是否需要切换热点。

以上整个动作的执行包含在while循环中,10分钟执行一次

这个脚本主要使用了nmcli命令,此命令详解查看:

https://blog.csdn.net/weixin_53928448/article/details/127186753

### M401a Armbian 系统无线网卡驱动问题解决方案 对于M401a设备在安装Armbian系统后遇到的WiFi无法正常使用的问题,可以按照以下方法尝试解决问题。 #### 1. 检查并加载必要的内核模块 确保已加载了支持MT7601U芯片组所需的内核模块。可以通过执行`lsmod | grep mt7601u`来确认该模块是否已被加载。如果没有,则需手动加载: ```bash sudo modprobe mt7601u ``` 如果仍然存在问题,可能是因为缺少固件文件。此时应确保 `/lib/firmware/mt7601u`目录下存在相应的固件文件[^1]。 #### 2. 更新固件和支持包 有时默认提供的固件版本较低或不兼容当前硬件环境。建议访问官方GitHub仓库或其他可靠资源站点下载最新版本的固件,并将其放置于上述路径中。另外还可以考虑安装额外的支持工具如 `rtl8xxxu-dkms` 或者其他第三方提供的补丁程序以增强稳定性。 #### 3. 修改网络接口配置 编辑网络接口配置文件(通常位于/etc/network/interfaces),添加如下内容以便自动启用Wi-Fi适配器: ```plaintext auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf ``` 同时也要确保wpa_supplicant服务处于运行状态并且配置正确无误。这一步骤有助于简化后续通过图形界面或者命令行方式进行连接操作的过程。 #### 4. 使用NMTUI进行初步排查 当完成以上准备工作之后,可再次利用nmtui命令打开交互式的网络管理终端来进行基本的功能验证以及参数调整工作。在此过程中应当能够顺利发现可用的SSID列表并与之建立关联关系。 #### 5. 安装最新的Linux Kernel 考虑到不同版本之间可能存在差异化的表现形式,特别是针对某些特定型号的外设产品而言更是如此。因此强烈推荐升级至稳定分支中的较新发行版(比如提到过的5.15),从而获得更好的整体性能体验及更广泛的硬件支持度[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值