Skip to content

WakeUp

终端里的 Wake-on-LAN 工具 —— 快速、纯键盘、单文件。

WakeUp 是一个基于 Bubble Tea 的 TUI 应用,用于管理设备并发送网络唤醒魔术包。设备数据本地存储,按键操作遵循 Vim 习惯,界面主题自动适配终端亮/暗模式。

功能

  • 网络唤醒 — 选中设备,Enter 发送魔术包。结果异步回传,不阻塞界面。
  • 设备管理 — 支持新增、编辑、删除设备。每条记录包含名称、MAC 地址、端口和广播地址。
  • Vim 式操作j/k 浏览、dd 删除、a 新增、e 编辑。Esc 始终回退到上一级。
  • 自适应主题 — 全部样式使用 lipgloss.AdaptiveColor + 16 色 ANSI,自动跟随终端亮/暗模式。
  • 单文件部署 — 一个静态编译的二进制文件。无运行时依赖、无守护进程、无配置文件。

安装

从 Release 下载(推荐)

直接下载预编译好的二进制文件,无需安装 Go 环境。

  1. 打开 Releases 页面
  2. 下载对应平台的二进制文件:
你的设备下载文件
macOS Intelwakeup-darwin-amd64-v*
macOS Apple Siliconwakeup-darwin-arm-v*
Linux x86_64wakeup-linux-amd64-v*
Linux ARMwakeup-linux-arm-v*
Windows x86_64wakeup-windows-amd64-v*.exe

macOS / Linux:

bash
# 赋予执行权限
chmod +x wakeup-*
# 可选 — 重命名并放到 $PATH 下的任意位置
sudo mv wakeup-*-v* /usr/local/bin/wakeup

也可以直接在下载目录运行:

bash
./wakeup-darwin-arm-v0.1.0

Windows: 重命名为 wakeup.exe,在 cmd 或 PowerShell 中直接运行,或放到 %PATH% 目录下。

从源码构建

前置要求

Go 1.26 或更高版本。

bash
git clone https://github.com/rainLyn/WakeUp.git
cd WakeUp
make

编译产物为 wakeup。安装到系统路径:

bash
make install

Makefile 目标

命令说明
make编译 wakeup
make run编译并启动
make clean清理编译产物
make install安装到 /usr/local/bin

使用

bash
./wakeup

按键绑定

上下文按键操作
设备列表j / k / / 移动光标
设备列表Enter唤醒所选设备
设备列表a新增设备
设备列表e编辑所选设备
设备列表dd删除所选设备
全局Esc关闭弹窗 / 返回上一页
全局Ctrl+C退出程序

数据存储

设备数据保存在 ~/.wakeup/devices.json

json
[
  {
    "name": "NAS",
    "mac": "AA:BB:CC:DD:EE:FF",
    "port": 9,
    "address": "255.255.255.255"
  }
]
  • 首次运行自动创建。数据文件损坏时自动重置为空。
  • 异步写入 — 文件 I/O 不阻塞界面渲染。
  • 内存缓存 — 读取瞬间完成,写入后台落盘。

MAC 地址格式

WakeUp 将所有 MAC 地址标准化为 XX:XX:XX:XX:XX:XX。以下输入格式均可识别:

输入格式标准化结果
AA:BB:CC:DD:EE:FFAA:BB:CC:DD:EE:FF
aa-bb-cc-dd-ee-ffAA:BB:CC:DD:EE:FF
AABB.CCDD.EEFFAA:BB:CC:DD:EE:FF
AABBCCDDEEFFAA:BB:CC:DD:EE:FF

项目结构

WakeUp/
├── main.go          # 入口,顶层 Bubble Tea 模型
├── Makefile         # 构建自动化
├── store/
│   └── store.go     # 设备 CRUD、JSON 持久化、字段校验
├── wol/
│   └── wol.go       # 魔术包构造与 UDP 发送
└── ui/
    ├── ui.go        # 共享样式、弹窗、帮助栏、布局辅助
    ├── list.go      # 设备列表(主界面),内嵌唤醒/删除弹窗
    ├── form.go      # 新增/编辑表单(四字段)
    └── menu.go      # 经典菜单页(可选入口)

架构

  • 页面自治路由 — 每个页面的 Update() 直接返回下一页模型。无中心路由器,消除 switch pageType
  • Vim 模态系统 — 各页面独立管理模态状态(Normal、Confirm、WakeConfirm、Result)。Esc 是统一的回退键。
  • tea.Cmd 异步 — WOL 发包和文件写入以 goroutine 执行,结果通过类型化消息回传。
  • 自适应主题 — 全部样式使用 lipgloss.AdaptiveColor + 终端 ANSI 色,跟随终端亮/暗模式自动切换。