Linux开发板设置开机自动连接指定名称的WiFi

要在开发板上设置开机后自动循环搜索特定的 Wi-Fi 并连接,可以通过编写一个脚本并配置 systemd 服务来实现。以下是详细的步骤:

1. 创建连接脚本

首先,编写一个脚本,该脚本会循环搜索指定的 Wi-Fi 网络并尝试连接。

  • 创建脚本文件
sudo nano /usr/local/bin/wifi_connect.sh
  • 脚本内容
#!/bin/bash

# 设置目标 SSID 和密码
TARGET_SSID="Your_SSID"
PASSWORD="Your_PASSWORD"

# 检查 NetworkManager 是否正在运行
if ! systemctl is-active --quiet NetworkManager; then
    echo "NetworkManager 未运行,尝试启动..."
    sudo systemctl start NetworkManager
    sleep 5
fi

# 循环尝试连接
while true; do
    # 检查是否已经连接到目标网络
    CURRENT_SSID=$(nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d':' -f2)
    if [ "$CURRENT_SSID" == "$TARGET_SSID" ]; then
        echo "已连接到 $TARGET_SSID"
        exit 0
    fi

    # 搜索可用的 Wi-Fi 网络
    nmcli device wifi rescan
    sleep 2
    AVAILABLE=$(nmcli -t -f SSID device wifi list | grep "^$TARGET_SSID$")

    if [ "$AVAILABLE" ]; then
        echo "找到目标网络 $TARGET_SSID,尝试连接..."
        nmcli device wifi connect "$TARGET_SSID" password "$PASSWORD"
        sleep 10
    else
        echo "未找到目标网络 $TARGET_SSID,等待 10 秒后重试..."
        sleep 10
    fi
done
  • 添加执行权限
sudo chmod +x /usr/local/bin/wifi_connect.sh

2. 创建systemd服务

为了让脚本在开机时自动运行,需要创建一个 systemd 服务单元。

  • 创建服务文件
sudo nano /etc/systemd/system/wifi_connect.service
  • 服务文件内容
[Unit]
Description=自动连接 Wi-Fi 服务
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/wifi_connect.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

 3. 启用并启动服务

  • 重新加载systemd守护进程
sudo systemctl daemon-reload
  • 启用服务再开机时启动
sudo systemctl enable wifi_connect.service
  • 启动服务
sudo systemctl start wifi_connect.service
  • 检查服务状态
sudo systemctl status wifi_connect.service

示例输出:

● wifi_connect.service - 自动连接 Wi-Fi 服务
     Loaded: loaded (/etc/systemd/system/wifi_connect.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-04-27 10:00:00 UTC; 1min ago
   Main PID: 1234 (bash)
      Tasks: 1 (limit: 4915)
     Memory: 1.2M
     CGroup: /system.slice/wifi_connect.service
             └─1234 /bin/bash /usr/local/bin/wifi_connect.sh

4.日志查看

要查看服务的运行日志,可以使用以下命令:

journalctl -u wifi_connect.service -f

这将实时显示脚本的输出,便于调试和监控。

5. 脚本解释及注意事项

  • 目标SSID和密码:在脚本开头设置 TARGET_SSID 和 PASSWORD 为你要连接的 Wi-Fi 网络名称和密码。
  • systemd服务配置:

       Restart=always:确保服务在崩溃或停止后自动重启。

       RestartSec=10:在服务失败后等待10秒重启。

  • 网络依赖性:After=network.target确保在网络相关服务启动后再启动此服务。如果有更复杂网络依赖,可以调整After和Requires选项。
  • 权限问题:确保脚本具有执行权限,并且 systemd 服务具有足够的权限运行 nmcli 命令。如果需要,可以在脚本或服务中使用 sudo,但需要适当配置 sudoers 文件以允许无密码执行。

 

posted @ 2024-12-02 15:18  suphgcm  阅读(584)  评论(0)    收藏  举报