Linux之WoWLAN无线网络唤醒
Linux之WoWLAN无线网络唤醒
什么是 WoWLAN?
WoWLAN 是 Wake on Wireless LAN 的缩写,中文可译为“无线局域网唤醒”。它是一种允许计算机在关闭或处于低功耗状态(如挂起或休眠)时,通过无线网络接收特定的唤醒信号(如 Magic Packet)来重新启动的技术。这种技术特别适用于笔记本电脑或其他移动设备,因为它们通常依赖于无线网络连接。
WoWLAN 是传统 Wake on LAN (WoL) 技术的无线版本。传统的 WoL 通过有线以太网实现,而 WoWLAN 则扩展了这一功能,使其可以通过 Wi-Fi 网络实现。
前面写了一篇关于WoL的记录:
https://notes.z-dd.online/2024/08/21/Linux%E4%B9%8BWOL%E7%BD%91%E7%BB%9C%E5%94%A4%E9%86%92/
WoWLAN 的工作原理
硬件支持:
要使用 WoWLAN 功能,需要以下硬件支持:- 支持 WoWLAN 的无线网卡。
- 主板 BIOS/UEFI 中启用相关唤醒功能(如 Wake on PCI-E 或类似选项)。
操作系统支持:
在 Linux 系统中,WoWLAN 功能由内核和无线网卡驱动程序提供支持。常见的无线网卡驱动(如iwlwifi
和ath9k
)通常都支持 WoWLAN。唤醒信号:
类似于传统的 WoL,WoWLAN 也依赖特定的唤醒信号。最常见的唤醒信号是 Magic Packet,它是一个包含目标设备 MAC 地址的数据包。此外,还可以配置其他触发条件,例如特定的网络流量模式。低功耗模式:
在系统进入挂起或休眠状态时,无线网卡会保持最低功耗的监听模式,等待唤醒信号的到来。一旦接收到匹配的信号,无线网卡会触发系统的唤醒操作。
在 Linux 中启用和配置 WoWLAN
1. 检查无线网卡是否支持 WoWLAN
首先,确认你的无线网卡是否支持 WoWLAN 功能。可以使用以下命令:
iw phy | grep WoWLAN
如果输出中包含 WoWLAN
,说明你的无线网卡支持该功能。
比如手上的RTL的wifi输出如下:
WoWLAN support:
* wake up on disconnect
* wake up on magic packet
* wake up on pattern match, up to 12 patterns of 1-128 bytes,
maximum packet offset 0 bytes
* can do GTK rekeying
* wake up on GTK rekey failure
* wake up on network detection, up to 4 match sets
有些无线网卡驱动可以需要通过内核参数来配置启用 WoWLAN 功能,具体参数可能因驱动而异。
2. 查看当前 WoWLAN 配置
使用 iw
工具查看当前的 WoWLAN 设置:
iw phy0 wowlan show
其中 phy0
是无线网卡的物理设备名称。你可以通过以下命令列出所有无线网卡:
iw dev
3. 启用 WoWLAN
要启用 WoWLAN,可以使用 iw
命令。例如,启用基于 Magic Packet 的唤醒功能:
iw phy0 wowlan enable magic-packet
你还可以启用其他唤醒条件,例如:
any
:任何数据包都可以触发唤醒。disconnect
:当无线连接断开时触发唤醒。gtk-rekey-failure
:当 GTK 密钥重置失败时触发唤醒。
示例:
iw phy0 wowlan enable magic-packet disconnect gtk-rekey-failure
4. 测试 WoWLAN
以MagicPacket 唤醒为例,
确保系统进入挂起状态后,尝试通过网络发送 Magic Packet 来唤醒设备。可以使用 etherwake
或 wakeonlan
工具发送 Magic Packet。
示例:
sudo etherwake -i wlan0 <MAC地址>
或者:
wakeonlan <MAC地址>
注意:
- 可能需要禁用省电模式
sudo iw dev wlan0 set power_save off # 禁用省电模式(可能影响 WoWLAN)
5. 自动配置 WoWLAN(可选)
如果你希望每次系统挂起时自动启用 WoWLAN,可以在挂起脚本中添加相应的命令。例如,在 systemd 的挂起服务中添加一个自定义脚本:
创建 /etc/systemd/system/wowlan-enable.service
文件:
[Unit]
Description=Enable WoWLAN on suspend
Before=sleep.target
[Service]
Type=oneshot
ExecStart=/usr/bin/iw phy0 wowlan enable magic-packet
[Install]
WantedBy=sleep.target
然后启用并启动该服务:
sudo systemctl enable wowlan-enable.service
sudo systemctl start wowlan-enable.service
注意事项
电源管理设置:
确保无线网卡的电源管理设置不会干扰 WoWLAN 功能。可以通过以下命令禁用电源管理:sudo iwconfig wlan0 power off
BIOS/UEFI 设置:
某些 BIOS/UEFI 可能需要手动启用与 PCIe 或无线网卡相关的唤醒功能。网络环境:
WoWLAN 对网络环境有一定的要求。例如,路由器可能需要支持转发 Magic Packet,且目标设备必须在同一个子网中。安全性:
使用 WoWLAN 时需要注意安全问题,因为任何能够访问网络的人都可能触发唤醒操作。建议仅在受信任的网络环境中使用,并结合防火墙等措施进行保护。
总结
WoWLAN 是一种非常实用的功能,尤其是在需要远程唤醒移动设备的场景下。Linux 系统提供了强大的工具(如 iw
和 systemd
)来配置和管理 WoWLAN。通过正确配置硬件和软件,可以轻松实现无线唤醒功能。不过,在实际使用中需要注意硬件兼容性、网络环境和安全性等问题。