Picachuchu69/msi-mystic-light-b860-x870-linux

GitHub: Picachuchu69/msi-mystic-light-b860-x870-linux

该工具通过逆向工程的 USB HID 协议,让 Linux 用户无需 MSI Center 即可控制 MSI B860/X870 主板的板载 Mystic Light ARGB 灯效。

Stars: 0 | Forks: 0

# 在 Linux 上控制 MSI Mystic Light(MAG B860 / X870 系列主板) 无需 Windows,也无需 MSI Center,即可直接在 Linux 下控制最新款 MSI 主板的板载 ARGB(JARGB 针脚 + 板载灯效区域)。 OpenRGB 1.0rc3 **不支持**较新的 MSI B860/X870 主板(USB ID 为 `0db0:0076`)上的 Mystic Light 控制器。本脚本是一个小型的独立工具,可直接与该控制器通信,并附带了完整的协议文档,方便开发者将其移植到其他平台。 协议逆向工程是在 **MSI MAG B860 TOMAHAWK WIFI (MS-7E39)** 上完成的,方法是在 Windows 虚拟机中运行 MSI Center,并通过抓取真实的 USB 流量(USB 直通 + `usbmon`/Wireshark)来实现的。它应该适用于任何 Mystic Light 控制器枚举为 `0db0:0076` 的 MSI 主板。 ## 用法 ``` # 静态 colour(默认重启后保持不变) ./rgb-placa.py rojo # by name ./rgb-placa.py 255 0 120 # by R G B ./rgb-placa.py rojo 3 # with brightness 1..5 # effects ./rgb-placa.py respira morado lento 5 # breathing ./rgb-placa.py ola arcoiris rapido 5 izq # rainbow wave, fast, leftwards ./rgb-placa.py ola rojo azul media 4 # wave over a custom palette ./rgb-placa.py arcoiris media 5 # rainbow wave (mode 05) ./rgb-placa.py estandar 5 # static multicolour (standing rainbow) # 由 CPU 温度驱动的 colour(软件,类似于 MSI Center 的 "CPU temp" 模式) ./rgb-placa.py temp # set once ./rgb-placa.py temp bucle 3 # refresh every 3 s until Ctrl+C # power ./rgb-placa.py on # dim white ./rgb-placa.py off # lights off # 在任何 command 中添加单词 "temporal" 可使其不写入 flash(volatile) ./rgb-placa.py rojo temporal ``` 颜色名称为西班牙语:`rojo verde azul blanco morado cian amarillo naranja rosa`。速度:`lento media rapido`。方向:`izq der`。 需要对控制器的 `/dev/hidraw*` 节点拥有写入权限(请以 root 身份运行或添加 udev 规则)。无外部依赖,纯 Python 3 实现。 ## 协议 传输方式为 **USB HID Feature report**(`SET_REPORT`,控制传输 `bmRequestType=0x21`,`bRequest=0x09`,`wValue=0x0350`),**Report ID 为 `0x50`,长度为 290 字节**。缓冲区主要是一个固定模板,只有少部分字节起关键作用(偏移量从 0 开始计算,索引 0 为 report ID): | 偏移量 | 含义 | |-------:|---------| | `273` | **Mode**:`00` 关闭 · `01` 波浪 · `02` 常亮 · `04` 呼吸 · `05` 彩虹 | | `274-285` | **Palette**:四种 RGB 颜色(`274-276`,`277-279`,`280-282`,`283-285`)。单色模式使用颜色 1 | | `286` | 子参数:调色板/彩虹效果为 `03`,常亮/呼吸效果为 `00` | | `287` | **Packed parameters**(压缩参数,见下文) | | `289` | **Save flag**:`01` = 提交至控制器 flash(重启后依然生效),`00` = 易失性预览 | ### 字节 287 的逐位解析 ``` bit 0-1 speed 0 slow, 1 medium, 2 fast bit 2-4 brightness 1..5 (5 = max) bit 5 colour source 1 = palette buffer, 0 = generated rainbow bit 6 direction 0 right, 1 left (effects with motion only) bit 7 animate 1 = animated effect, 0 = standing/static ``` `byte287 = 128*animate + 64*direction + 32*use_palette + 4*brightness + speed` ### 注意事项 - 主板上的 **内存 RGB 属于不同的控制器**(通过 SMBus/i2c 连接的 ENE DRAM),OpenRGB 已经支持(`openrgb -d 0/-d 1`)。本脚本仅用于驱动主板自带的灯效区域/JARGB 针脚。 - MSI Center 的“CPU 温度”模式是**基于软件而非固件的**:它只是不断发送普通的*常亮*指令,并将测得的温度映射为相应的颜色。本脚本通过读取 `coretemp`/`k10temp` 并插入从绿到黄再到红的渐变色,复现了这一功能。 - 写入偏移量 `289 = 01` 会将更改提交至 flash,因此在执行动画/温度循环更新时,请避免在每一帧都执行此操作,以保护 flash 芯片。 ## 免责声明 本协议是基于对单块主板流量观察的逆向工程。它会直接向您主板的 LED 控制器写入 HID feature report;虽然在本机上运行良好,但不提供任何担保。使用风险由您自行承担。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:Linux工具, MSI主板, RGB灯效, USB协议, 云资产清单, 硬件控制, 端口探测, 逆向工程