macOS 一键唤醒局域网 Windows 主机(WoL),菜单栏应用 + 命令行双形态。
在家:直接向局域网广播魔术包。不在家:自动经 Tailscale 登录常开的 NAS,由 NAS 在局域网内代发——魔术包是二层广播,本身走不了 Tailscale,目标睡着时它的 tailscaled 也不在线,所以必须有个同网段的常开设备做中继。
- 菜单栏图标实时显示目标状态:在线 🖥 / 睡眠 💤(每 60 秒 + 每次点开菜单刷新)
- 菜单一键唤醒,系统通知反馈结果
wakewin命令行同款逻辑,适合脚本/远程调用- 自动判断 Mac 当前位置,选择直接广播或 NAS 中继
- 菜单内「设置…」可改 MAC/IP/NAS,配置即时生效
要求:macOS 11+,Xcode Command Line Tools(xcode-select --install)。
git clone https://github.com/skernelx/wake-winpc.git
cd wake-winpc
./install.sh装完菜单栏出现 🖥 图标,登录自启已配置。先改配置:点菜单栏图标 →「设置…」填你的 MAC/IP,或直接编辑 ~/.config/wakewin/config.json。卸载:./uninstall.sh。
wakewin # 自动模式:探测在线则不发包,否则唤醒并等到 SSH 可达
wakewin --via-nas # 强制走 NAS 中继
wakewin --gui # 用系统通知代替终端输出(菜单栏应用内部用)退出码:0 在线/唤醒成功,1 超时或中继失败。
~/.config/wakewin/config.json,CLI 和菜单栏应用共用,菜单「设置…」改的也是它:
| 键 | 说明 | 示例 |
|---|---|---|
mac |
目标网卡 MAC | 00:11:22:33:44:55 |
broadcast |
局域网定向广播地址 | 192.168.1.255 |
wol_port |
魔术包端口 | 9 |
lan_ip |
目标局域网 IP(在家时探测用) | 192.168.1.100 |
ts_ip |
目标 Tailscale IP(在外时探测用) | 100.64.0.1 |
ssh_port |
判定"已唤醒"的 TCP 端口 | 22 |
nas |
中继主机,~/.ssh/config 里的 Host 名 |
nas |
- 目标机 BIOS 开 WoL,网卡驱动勾选"魔术包唤醒";目标开着 SSH(或改
ssh_port为任一开机后必监听的端口,如 RDP 3389) - 远程唤醒需要:一台与目标同网段、常开、能免密 SSH 的中继机(NAS/路由器/树莓派均可),且装有 python3
- Windows「无人值守唤醒」默认约 2 分钟无操作会自动睡回,唤醒后尽快 RDP/SSH 上去
- 首次弹系统通知时 macOS 会请求通知权限
- 实测(i7-8700 / Z370 板载网卡,S3 睡眠):两条路径从发包到 SSH 可达均约 13–16 秒
bin/wakewin # Python CLI,唤醒逻辑唯一实现
app/main.swift # 菜单栏应用(AppKit,install.sh 用 swiftc 编译)
app/Info.plist
launchd/…plist # 登录自启
install.sh / uninstall.sh
config.example.json