1.查看无线网设备
nmcli device
2.连接无线网
nmcli connection add type wifi con-name "连接名" ifname wlx646e97100940 ssid "WiFi名"
nmcli connection modify "连接名" wifi-sec.key-mgmt wpa-psk
nmcli connection modify "连接名" wifi-sec.psk "WiFi密码"
3.启动连接
nmcli connection up "连接名"
4.删除时候用
nmcli connection down "连接名"
nmcli connection delete "连接名"
5.关闭省电模式
sudo iw dev wlx646e97100940 set power_save off
sudo iw dev wlx646e97100d49 set power_save off
6.修改配置文件WIFI省电模式
vi /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
[connection]
wifi.powersave = 2
7.创建文件
vi /etc/modprobe.d/usb-nosuspend.conf
options usbcore autosuspend=-1
vi /etc/udev/rules.d/85-usb-power.rules
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="on"
8.创建后重载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
9.重启设备
reboot
10.创建检测脚本
#!/bin/bash
# 目标WiFi网络名称
TARGET_WIFI="WTCCN Warehouse"
# 测试通信的IP地址列表
TEST_IPS=("10.66.135.1" "10.66.132.1")
# 无线网卡USB设备ID
USB_ID="0bda:c811"
# 日志函数
log() {
echo "$(date '+%Y年 %m月 %d日 %H:%M:%S'): $1"
}
# 检查网络连接
is_connected_to_wifi() {
nmcli -t -f NAME connection show --active | grep -q "^$TARGET_WIFI$"
return $?
}
# 测试单个IP的网络连通性
can_ping_ip() {
local ip="$1"
ping -c 3 -W 2 "$ip" > /dev/null 2>&1
return $?
}
# 检查所有IP的连通性
check_all_ips() {
local all_failed=true
for ip in "${TEST_IPS[@]}"; do
if can_ping_ip "$ip"; then
log "与 $ip 通信正常"
all_failed=false
break # 只要有一个能通就退出循环
else
log "与 $ip 通信失败"
fi
done
if $all_failed; then
log "所有IP地址通信均异常"
return 1
else
log "至少有一个IP地址通信正常"
return 0
fi
}
# 模拟USB重新插拔
reset_usb_adapter() {
log "开始重置USB无线网卡..."
for device in /sys/bus/usb/devices/*; do
if [[ -e "$device/busnum" && -e "$device/devnum" ]]; then
busnum=$(cat "$device/busnum")
# 只重置指定总线上的设备(例如Bus 001)
if [ "$busnum" -eq 1 ]; then
echo "Resetting device on Bus $busnum: $(cat $device/product 2>/dev/null || echo 'Unknown')"
echo 0 > "$device/authorized"
sleep 1
echo 1 > "$device/authorized"
fi
fi
done
# 等待网络服务稳定
sleep 5
systemctl restart NetworkManager 2>/dev/null
sleep 10
# 尝试重新连接
log "尝试重新连接到WiFi..."
nmcli connection up "$TARGET_WIFI" 2>/dev/null
# 检查是否连接成功
sleep 5
if is_connected_to_wifi; then
log "WiFi重新连接成功"
else
log "WiFi重新连接失败"
fi
}
# 主函数
main() {
log "开始网络检查..."
if is_connected_to_wifi; then
log "已连接到 $TARGET_WIFI"
# 检查所有IP的连通性
if check_all_ips; then
log "网络通信正常,无需操作"
else
log "所有IP地址通信异常,重置网卡..."
reset_usb_adapter
fi
else
log "未连接WiFi,重置网卡..."
reset_usb_adapter
fi
log "检查完成"
echo "----------------------------------------------------------------------------"
}
# 执行主函数
main "$@"
💬 评论 (0)