archlinux网络唤醒

前言

由于需要时常在远程启动电脑,
而提前开启电脑这件事总是忘记.
因此研究一下如何远程开启电脑.

术语

Wake-on-LAN

简称WoL,是一种网络唤醒设备的手段.
在进行设置后,
硬件在关机时仍然保持网卡或网口供电,
监听从UDP端口7或端口9发来的Magic Packet广播帧.
然后使用某种方式唤醒电脑.
但似乎是为了安全问题,无线网卡一般不让使用WoL.

Wake-on-Wireless LAN

简称WoWLAN或WoW.

硬件条件

10年前的电脑上的网卡已经基本支持

bios配置

需要打开bios上的 Wake-On LAN 开关
在asrock z390 phantom gaming-itx/ac的bios上,配置选项在boot选项卡附近?
选项I219 wake的上方

系统设置

windows

在网卡属性的电源计划中设置允许唤醒

Arch

  1. TODO 以太网卡

    使用 ethtool 配置

  2. 无线网卡

    使用 iw 配置

    1. 查看可用的网口

      1
      iw list

      输出的第一行就是,通常是phy0

    2. 查看wowlan的状态

      1
      iw phy0 wowlan show

      通常是disable

    3. 开启wowlan

      1
      sudo iw phy0 wowlan enable magic-packet

      还可以同时选取 diconnect 等其他方法

    4. 测试

      电脑挂起后,
      有几种办法测试

      • 在网络服务器上使用 wakeonlan <mac-address>etherwake <mac-address> 唤醒
      • 下载各种GUI包装的以上命令的软件
      • 在有潘多拉系统的路由器上使用网络唤醒
    5. 关闭wowlan

      1
      sudo phy0 wowlan disable

      测试发现关机重开也会重置该状态?
      也就是只能实现从挂起到重新运行?
      顺便说一下,远程挂起的命令是

      1
      systemctl suspend

      然后确认两次即可

    6. 持久化

      可能出于安全的考虑,wowlan只允许计算机从standby状态恢复到正常使用,
      并且在关机后配置会失效,需要重新设置.
      因此需要将开启的脚本放在开机自启动的脚本中.
      详见永久配置wowlan

永久配置wowlan

systemd是一个系统功能的管理模块,
负责系统服务的管理等.
可以自行编写一个service然后使用

1
systemdctl enable xxx.service

添加到开机自启.
关于service的写法不清楚时,
通常完全自行写出有难度.
因此可以使用最近才出现在aur上的 wowlan-systemd
安装该包后使用

1
systemctl enable wowlan@phy0

开启服务,可以见到该方法使用了 /usr/lib/systemd/system/[email protected] 文件
目前需要改动两点

  • iw命令强制要求脚本中不能直接使用 iw phy0 wowlan enable xxx 等形式
    需要使用 iw phy phy0 wowlan enable xxx ,其中的phy不能省略
  • 该命令在系统启动后由于未知原因可能会启动失败,
    因此启动方式需要是simple,而不是原先的值(只能启动一次),
    并且设置在失败后就启动,
    重试的时间可以根据需求来设置.
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Wake-on-WLAN for %i
Requires=network.target
After=network.target

[Service]
ExecStart=/usr/bin/iw phy %i wowlan enable magic-packet
Type=simple
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target

更新

由于 iw 导致系统无法从suspend状态(S3)恢复,暂时关闭该服务

参考

  1. 知乎里的入门介绍
  2. 以太网卡的软件设置
  3. 无线网卡的软件设置
  4. 开机自动设置