gusleig/ajazz-ak820-pro-mac

GitHub: gusleig/ajazz-ak820-pro-mac

让 macOS 用户通过命令行配置 AJAZZ AK820 Pro 键盘的时钟、RGB 灯效与休眠定时器,无需依赖仅限 Windows 的官方软件。

Stars: 0 | Forks: 0

# ak820 — AJAZZ AK820 Pro 的 macOS 配置工具 一款用于在 **macOS** 上配置 **AJAZZ AK820 Pro** 键盘的命令行工具 — 可以设置屏幕时钟、RGB 灯光和休眠定时器,完全无需依赖仅限 Windows 的 官方软件。 ## 环境要求 - macOS (Apple Silicon 或 Intel) - Python **3.11+** (示例使用 `python3.13`) - 键盘通过 **USB-C *数据线*** 连接 (仅支持充电的线缆无法使用) ## 安装 ``` # 从项目文件夹 python3.13 -m venv .venv source .venv/bin/activate pip install -e . ``` 如果在构建 `hidapi` 时安装失败,请先安装该库,然后重试: ``` brew install hidapi pip install -e . ``` 下文的所有命令均假设您已激活虚拟环境 (`source .venv/bin/activate`)。 ## 快速开始 ``` ak820 identify # confirm the keyboard is connected ak820 sync-clock # set the keyboard's clock to your Mac's current time ak820 set-rgb --mode static --color 00AAFF # solid cyan lighting ``` ## 命令 ### `ak820 identify` 检查工具是否能识别到键盘 (只读操作 — 不会更改任何设置)。 ``` $ ak820 identify Manufacturer: SONiX Product: AK820 Serial: ``` 如果显示 `No AK820 device found`,请参阅[故障排除](#troubleshooting)。 ### `ak820 sync-clock` — 设置屏幕时钟 ``` # 将键盘时钟设置为 Mac 的当前本地时间(最常见用法) ak820 sync-clock # 设置特定日期/时间(格式:"YYYY-MM-DD HH:MM:SS",24小时制) ak820 sync-clock --time "2026-06-30 09:15:00" ``` 键盘的小屏幕必须处于其**时钟界面**才能看到效果。此后时钟会自行运转;如果时间出现偏差,随时可以重新运行 `sync-clock`。 ### `ak820 set-rgb` — RGB 灯光 ``` # 纯色(使用 "static" 模式) ak820 set-rgb --mode static --color FF0000 # solid red ak820 set-rgb --mode static --color 00FF00 --brightness 3 # dimmer green # 固定颜色的动画效果 ak820 set-rgb --mode breath --color 8000FF --speed 2 # purple breathing # Rainbow / 多色效果(忽略 --color,使用 --rainbow) ak820 set-rgb --mode spectrum --rainbow --brightness 5 --speed 3 ak820 set-rgb --mode rolling --rainbow --direction right # 关闭灯光 ak820 set-rgb --mode off ``` **选项** | 选项 | 取值 | 默认值 | 说明 | |---|---|---|---| | `--mode` | 参见下文列表 | `static` | 灯光效果 | | `--color` | `RRGGBB` 十六进制 | `FFFFFF` | 固定颜色 (设置了 `--rainbow` 时将忽略此项) | | `--rainbow` | 标志 | off | 循环切换颜色,而不是使用固定颜色 | | `--brightness` | `0`–`5` | `5` | `0` 表示关闭 | | `--speed` | `0`–`5` | `3` | 动画速度 (适用时) | | `--direction` | `left` `right` `up` `down` | `left` | 用于具有方向性的效果 | **模式:** `off`, `static`, `single-on`, `single-off`, `glittering`, `falling`, `colourful`, `breath`, `spectrum`, `outward`, `scrolling`, `rolling`, `rotating`, `explode`, `launch`, `ripples`, `flowing`, `pulsating`, `tilt`, `shuttle`。 ### 灯光预设 (单词命名风格) 为了快速设置命名的灯光风格,这里提供了一个小脚本 — `presets/ak820-preset`: ``` presets/ak820-preset list # show all presets presets/ak820-preset focus # dim steady blue (low distraction) presets/ak820-preset party # bright, fast rainbow presets/ak820-preset chill # slow rainbow drift presets/ak820-preset demo # cycle through several (~15s) ``` 可用预设:`focus`, `work`, `calm`, `chill`, `gaming`, `party`, `night`, `off`, `demo`。 该脚本会自动查找 `ak820` CLI (它使用代码库的 `.venv`),因此您甚至无需 激活虚拟环境。**制作您自己的预设**只需编辑 `presets/ak820-preset` — 每个 预设都是一行 `set-rgb` 选项;只需复制一行,重命名,然后调整 `--mode` / `--color` / `--brightness` / `--speed` 即可。 ### `ak820 set-sleep` — 背光休眠定时器 设置键盘空闲多久后灯光熄灭。 ``` ak820 set-sleep 5 # sleep after 5 minutes ak820 set-sleep 30 # sleep after 30 minutes ak820 set-sleep 0 # never sleep ``` 允许的值:`0` (从不),`1`, `5`, `30` 分钟。 ### `ak820 recover` — 解除屏幕卡死 如果屏幕时钟冻结或显示卡住 (最常见于命令被中断之后),此命令会清除键盘的挂起状态并重新同步时钟: ``` ak820 recover # clear stuck state + re-sync clock to now ak820 recover --no-resync # just clear the stuck state, leave the clock as-is ``` 通常情况下您不需要用到它 — 但它提供了一行命令的替代方案,免去了拔插键盘的麻烦。 ## 故障排除 | 症状 | 原因与修复方法 | |---|---| | `No AK820 device found` | 键盘无法通过 USB 访问。**请使用 USB-C *数据线*连接** (不要使用 2.4 GHz 接收器、蓝牙或仅支持充电的线缆)。然后重新运行 `ak820 identify`。 | | 命令执行了但**没有任何变化** | 您可能是通过**接收器或蓝牙**连接的 — 这些方式不提供控制通道。请切换为 **USB-C 线缆**。 | | 屏幕**时钟冻结 / 卡住** | 运行 **`ak820 recover`**。如果仍然卡住,拔下线缆约 5 秒后重新插入 (不会写入任何永久内存,因此会正常重启)。 | | `OSError: open failed` | 另一个程序正在占用键盘接口。退出其他键盘应用程序,或拔插线缆,然后重试。 | | `pip install` 构建 `hidapi` 失败 | 运行 `brew install hidapi`,然后再次运行 `pip install -e .`。 | | `command not found: ak820` | 先激活虚拟环境:`source .venv/bin/activate`。 | | 安装时出现 Python 版本错误 | 请使用 Python 3.11+。使用 `python3.13 -m venv .venv` 创建虚拟环境。 | | RGB 的 `--color` 似乎被忽略 | 某些模式是多色的;若要使用单一稳定颜色,请使用 `--mode static`。如果设置了 `--rainbow`,颜色将被刻意忽略。 | | `sync-clock` 后时钟显示错误时间 | 请将键盘屏幕切换至其**时钟界面** (不要显示图片/GIF),然后再次运行 `ak820 sync-clock`。 | ### 此工具在 macOS 上**无法做到**的事 - **macOS 不支持上传 LCD 图片 / GIF。** 屏幕的图像数据使用的是 macOS 不允许用户程序访问的批量 USB 接口 (这在 Linux 和 Windows 软件中有效)。时钟、灯光和休眠功能不受影响。 - **按键重映射 / 宏**尚未实现。 ## 工作原理 (简述) 该键盘是一款基于 SONiX 的设备 (USB VID `0x0C45`)。此工具通过有线 USB 连接,使用 64 字节的 HID 特征报告事务 (`START → preamble → data → FINISH`),与其供应商 HID **控制接口** (`0xFF13`) 进行通信。设置会被保存到键盘的板载内存中。 更多文档: - [`docs/protocol.md`](docs/protocol.md) — 字节级 HID 协议 - [`docs/DISCOVERY-LOG.md`](docs/DISCOVERY-LOG.md) — 逆向工程过程 (路径、阻碍和经验教训) - [`docs/REMAP-RESEARCH.md`](docs/REMAP-RESEARCH.md) — 按键重映射的开放性问题 - [`docs/USB-CAPTURE-GUIDE.md`](docs/USB-CAPTURE-GUIDE.md) — 捕获 → `ak820 replay` 工作流 ## 开发 安装开发工具并运行测试套件: ``` pip install -e ".[dev]" pytest ``` 大多数测试是纯软件测试,可在任何地方运行。键盘映射测试需要键盘的布局文件,该文件是从专有的 Windows 安装程序中提取的,并且**不会**在此处分发 — 因此 在全新克隆的代码库上,它们会**自动跳过**。要运行它们,请在本地将安装程序解压到 `extracted/app/` (参见 [`docs/protocol.md`](docs/protocol.md))。 ## 鸣谢 协议细节是在以下社区项目的帮助下完成逆向工程的: - [gohv/EPOMAKER-Ajazz-AK820-Pro](https://github.com/gohv/EPOMAKER-Ajazz-AK820-Pro) - [TaxMachine/ajazz-keyboard-software-linux](https://github.com/TaxMachine/ajazz-keyboard-software-linux) - [Aiacos/ajazz-control-center](https://github.com/Aiacos/ajazz-control-center) - [wsclx/ak820pro-modder](https://github.com/wsclx/ak820pro-modder) ## 许可证 [MIT](LICENSE) © gusleig
标签:HID, Python, 外设配置, 客制化键盘, 文档结构分析, 无后门, 逆向工具