uos中创建自定义Ip (192.168.137.1)的热点的方法
默认系统自带的方法中没有定义192.168.137.1的方法,得自己写个脚本
start_wifi.sh
#!/bin/bash
set -euo pipefail# ==== 可改参数 ====
HOTSPOT_NAME="MyHotspot" # 连接配置名(任意,用来管理)
HOTSPOT_SSID="UOS_Hotspot" # Wi-Fi 名称
HOTSPOT_PASS="88888888" # 至少8位
IP_ADDR_CIDR="192.168.137.1/24"
# 若你确定网卡名,直接写:WIFI_IFACE="wlp2s0"
WIFI_IFACE="${WIFI_IFACE:-}"# ==== 要 root 权限 ====
#if [[ $EUID -ne 0 ]]; then
# echo "[*] 需要 root 权限,正在使用 sudo..."
# exec sudo WIFI_IFACE="${WIFI_IFACE}" IP_ADDR_CIDR="${IP_ADDR_CIDR}" \
# HOTSPOT_NAME="${HOTSPOT_NAME}" HOTSPOT_SSID="${HOTSPOT_SSID}" HOTSPOT_PASS="${HOTSPOT_PASS}" \
# bash "$0" "$@"
#fi# ==== 要 root 权限(非交互)=====
if [[ $EUID -ne 0 ]]; thenSELF="$(readlink -f "$0")"# -n 禁止交互(如果 sudoers 配置正确,会立即成功;否则会直接返回错误)exec sudo -n HOTSPOT_NAME="$HOTSPOT_NAME" HOTSPOT_SSID="$HOTSPOT_SSID" \HOTSPOT_PASS="$HOTSPOT_PASS" IP_ADDR_CIDR="$IP_ADDR_CIDR" \WIFI_IFACE="$WIFI_IFACE" bash "$SELF" "$@"
fiecho "[*] 检查 NetworkManager..."
command -v nmcli >/dev/null || { echo "未找到 nmcli(NetworkManager),请先安装/启用"; exit 1; }
systemctl is-active --quiet NetworkManager || { echo "NetworkManager 未运行:sudo systemctl start NetworkManager"; exit 1; }# ==== 识别无线网卡 ====
if [[ -z "${WIFI_IFACE}" ]]; thenWIFI_IFACE="$(nmcli -t -f DEVICE,TYPE,STATE device status | awk -F: '$2=="wifi" && $3!="unavailable"{print $1; exit}')"
fi
if [[ -z "${WIFI_IFACE}" ]]; thenecho "未检测到可用的 Wi-Fi 网卡。用: nmcli device status 查看;或者重新运行时指定 WIFI_IFACE,例如:"echo "sudo WIFI_IFACE=wlp2s0 $0"exit 1
fi
echo "[*] 使用无线网卡:${WIFI_IFACE}"# ==== 删除同名旧连接(忽略错误)====
nmcli -t -f NAME connection show | grep -Fx "${HOTSPOT_NAME}" >/dev/null 2>&1 && \nmcli connection delete "${HOTSPOT_NAME}" || true# ==== 创建热点 ====
echo "[*] 创建热点连接…"
nmcli connection add type wifi ifname "${WIFI_IFACE}" con-name "${HOTSPOT_NAME}" autoconnect yes ssid "${HOTSPOT_SSID}"echo "[*] 配置为 AP + WPA2…"
nmcli connection modify "${HOTSPOT_NAME}" \802-11-wireless.mode ap \802-11-wireless.band bg \wifi-sec.key-mgmt wpa-psk \wifi-sec.psk "${HOTSPOT_PASS}" \ipv4.method sharedecho "[*] 固定网关 IP 为 ${IP_ADDR_CIDR}…"
nmcli connection modify "${HOTSPOT_NAME}" ipv4.addresses "${IP_ADDR_CIDR}" ipv4.method shared# 有的驱动需要先把接口置 up
ip link set "${WIFI_IFACE}" up || trueecho "[*] 启动热点…"
nmcli connection up "${HOTSPOT_NAME}"GW_IP="${IP_ADDR_CIDR%/*}"
echo "[+] 热点已启动:"
echo " SSID: ${HOTSPOT_SSID}"
echo " 密码: ${HOTSPOT_PASS}"
echo " 网关: ${GW_IP}"
echo " 网卡: ${WIFI_IFACE}"
stop_wifi.sh
#!/bin/bash
set -euo pipefailHOTSPOT_NAME="MyHotspot" # 要和 start_hotspot.sh 里保持一致# ==== 要 root 权限(非交互)=====
if [[ $EUID -ne 0 ]]; thenSELF="$(readlink -f "$0")"exec sudo -n HOTSPOT_NAME="$HOTSPOT_NAME" bash "$SELF" "$@"
fiecho "[*] 正在关闭热点:${HOTSPOT_NAME}..."# 先尝试关闭连接(忽略报错)
nmcli connection down "${HOTSPOT_NAME}" 2>/dev/null || true# 删除连接配置(忽略报错)
nmcli connection delete "${HOTSPOT_NAME}" 2>/dev/null || trueecho "[+] 热点已停止并删除配置"
但是每次要输入管理员密码,不爽,
sudo visudo -f /etc/sudoers.d/wifi-scripts
加入如下内容
User ALL=(root) NOPASSWD: /home/User/LINUX/start_wifi.sh, /home/User/LINUX/stop_wifi.sh, /home/User/LINUX/start_hotspot.sh
之后调用时用
sudo ./start_wifi.sh
就不用输入密码了