1. 概要:为什么需要?

在家或办公室24小时开启桌面,不仅耗电,而且维护成本也会增加。

因此,考虑在需要的时候,利用树莓派这样的24小时运行的小型服务器,通过远程开启目标桌面的方法。

为此,利用“Wake-on-LAN(WOL)”功能,制定了以下策略。

  • 桌面BIOS设置:启用WOL功能
  • Linux(Ubuntu)设置:确保网络卡在系统关闭后仍保持激活状态
  • 树莓派设置:编写和自动化发送魔术数据包的脚本

所需的包: - wakeonlan (用于在树莓派或服务器上发送魔术数据包)

Wake-on-LAN Overview


2. 组装环境

  • 目标PC:安装Ubuntu 24.04的桌面
  • 服务器:树莓派5(Ubuntu Server 24.04)
  • 网络:连接到同一局域网(建议使用有线)

3. 桌面BIOS设置

使用Wake-on-LAN时,主板的BIOS设置至关重要。

BIOS设置方法

在BIOS中设置以下项目。我使用的是GIGABYTE主板,其他品牌用户可参考类似选项进行设置。

  1. 在桌面启动时进入BIOS/UEFI设置(通常是DEL, F2键)
  2. 启用以下项目:

ERP(节能模式相关)
- ERP设置:Disabled(禁用),节能模式可能会阻止WOL功能的使用。

启用CSM - CSM SupportEnabled - 在启用CSM后,可能会出现以下项目(以GIGABYTE主板为例): - LAN PXE引导选项ROM:保持禁用 - 保存OpROM启动政策:Legacy - 其它PCI设备:Legacy

通过LAN恢复 / 通过PCI-E开机
- 一些主板可能自动支持,无需额外选项 → 即使没有选项也可以正常工作

  1. 保存并重启

※根据制造商,不同选项的名称可能略有不同,因此请查找“Wake”、“Power On by PCI”等类似选项进行设置。


4. 桌面Linux(Ubuntu)设置

在Ubuntu中,即使系统关闭,NIC(网络接口卡)也必须保持运行。

1. 确认网络接口名称

ip a

示例结果:

2: enp4s0: ...
    link/ether <AA:BB:CC:DD:EE:FF> ...
  • enp4s0:确认网络接口名称。(这是桌面的有线LAN设备名称,因此可能因设备而异。)
  • AA:BB:CC:DD:EE:FF:MAC地址(魔术数据包目标) ※ 注意MAC地址的安全性。

2. 安装ethtool

sudo apt update
sudo apt install ethtool

3. 检查和设置WOL状态

sudo ethtool enp4s0 | grep Wake

结果示例:

Supports Wake-on: pumbg
Wake-on: d
  • d → 禁用状态
  • 通过以下命令启用:
sudo ethtool -s enp4s0 wol g

再次确认:

Wake-on: g

4. 确保在启动时自动设置(可选:在重启后Wake-on:g被解除的情况适用)

自Ubuntu 20.04起,/etc/rc.local默认不再支持,因此推荐使用systemd服务的方法。

创建/etc/rc.local的方法:

sudo nano /etc/rc.local

exit 0 之前添加:

/sbin/ethtool -s enp4s0 wol g
exit 0

保存文件后赋予执行权限:

sudo chmod +x /etc/rc.local

可能需要额外设置systemd服务。


5. 从树莓派发送魔术数据包

1. 安装wakeonlan

sudo apt install wakeonlan

2. 执行WOL命令

wakeonlan AA:BB:CC:DD:EE:FF # 输入上面确认的MAC地址。

3. (可选)注册别名

# 在AA:BB:CC:DD:EE:FF部分放入远程启动目标PC的MAC地址。
echo "alias wakeup_dude='wakeonlan AA:BB:CC:DD:EE:FF'" >> ~/.bashrc
source ~/.bashrc

→ 从此以后可以简单地执行:

wakeup_dude

6. 结果

  • 即使桌面完全关闭后,在接收魔术数据包后自动开机
  • 成功实现Wake-on-LAN远程启动!

7. 与安全相关

  • 作为控制中心的“树莓派”服务器的SSH连接安全设置、路由器安全设置、UFW设置等安全设置必须加强。
  • 如果需要从外部连接,建议使用SSH端口转发或VPN。

8. 使用示例

# 从外部连接
ssh username@<your_ip_or_domain> -p <your_ssh_port>
# 连接后
wakeup_dude
🎉 桌面自动启动!

9. 参考

  • Wake-on-LAN仅在有线LAN中有效(Wi-Fi不支持)
  • 一些主板在Suspend状态下有效,但在Shutdown状态下可能受限。(在GIGABYTE主板上也成功确认在Shutdown状态下有效)

这样通过建立“仅在需要时”唤醒的桌面环境,可以实现智能且高效的服务器管理。