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 文件以允许无密码执行。