跳到正文

手把手:在 Linux 改主板 ARGB 颜色,并按时间自动切换

目录

手把手:在 Linux 改主板 ARGB 颜色,并按时间自动切换

全套脚本在 这个 gist,四个文件:aura_set.py、schedule.py、schedule.json、lightctl.service。下面是从零到能用的完整过程。

适用与前提

  • 华硕主板,带 Aura USB 灯控(0b05:19af),Z490 之后的基本都是这套
  • Ubuntu / Debian,有 root
  • 内存条灯是另一条路(SMBus + OpenRGB),单独说
  • 不需要 Windows,也不需要 Armoury Crate

第 1 步:确认灯控在

lsusb | grep -i 19af
# Bus 003 Device 008: ID 0b05:19af ASUSTek Computer, Inc. AURA LED Controller

ls /sys/class/hidraw/
# hidraw0  hidraw1  ...

没有这个设备就别往下走了:要么 BIOS 里 Aura 被关掉,要么这块板子的灯控不走 USB,本文不适用。

第 2 步:装依赖

sudo apt install python3-hid openrgb
python3 -c "import hid; print('ok')"

python3-hid 是 hidapi 的绑定,openrgb 只用来改内存条。

第 3 步:改主板颜色

把 aura_set.py 放到任意目录,然后:

sudo python3 aura_set.py ff3300                  # 橙色
sudo python3 aura_set.py ffffff --mainboard      # 纯白,连主基本区那几颗一起
sudo python3 aura_set.py 000000                  # 全黑(相当于关灯)

参数只有三个:

参数作用默认
color六位十六进制 RGB必填
--leds每个 ARGB 接口刷多少颗灯珠255
--mainboard主基本区(板载灯)也刷关

脚本启动时会先读一次固件的配置表,于是能知道这块板子有几个 ARGB 接口、几个 12V 接口、本区几颗灯,不需要按型号维护一张表:

ARGB 接口 3 个,12V 接口 3 个,主基本区 3 颗
已写入 #e05a1e

第 4 步:内存条

内存灯不走 USB,走 SMBus,每根条子一个灯控芯片。用 OpenRGB 最简单:

sudo openrgb --list-devices

找 Type: DRAM 的条目,记下前面的序号:

0: ENE DRAM
  Type:           DRAM
  Version:        I2C: /dev/i2c-3, address 0x71
  Modes: Direct Off [Static] ...
sudo openrgb -d 0 -m Static -c FFFFFF
sudo openrgb -d 1 -m Static -c FFFFFF

Modes 里方括号就是当前模式,写成功会变成 [Static],可以当回执看。不是 ENE 的条子(海盗船之类)OpenRGB 也支持,序号和方法一样。

第 5 步:让它按时间自动切

5.1 放文件

sudo mkdir -p /opt/lightctl /etc/lightctl
sudo cp aura_set.py schedule.py /opt/lightctl/
sudo cp schedule.json /etc/lightctl/

5.2 时间表

/etc/lightctl/schedule.json:

{
  "argb_leds": 255,
  "dram_devices": [0, 1],
  "segments": [
    {"start": "00:00", "color": "000000"},
    {"start": "05:00", "color": "e05a1e"},
    {"start": "07:00", "color": "ffffff"},
    {"start": "17:00", "color": "e05a1e"},
    {"start": "21:00", "color": "000000"}
  ]
}
  • segments:从某个时刻开始用什么颜色,最后一段一直持续到第二天零点
  • argb_leds:每个接口的刷写颗数,灯链长就写大点(见下面坑二)
  • dram_devices:内存条的 OpenRGB 序号,不想管内存就写 []

5.3 服务

lightctl.service 放到 /etc/systemd/system/,然后:

sudo systemctl daemon-reload
sudo systemctl enable --now lightctl.service
systemctl status lightctl
journalctl -u lightctl -f

正常会看到:

17:00:12 -> #e05a1e

服务每 30 秒看一次时间,只在颜色真的变了的时候才下发。

这里有个容易踩的坑:不要把「每 N 分钟重刷一次」当成保底手段。每次下发都是「切 direct → 写所有灯珠 → 提交」,灯带在切换瞬间会断一下,看起来就是周期性闪一下。代价是睡眠唤醒后可能停在上一次的颜色,sudo systemctl restart lightctl 一下就好。

5.4 改时间表

改完 JSON 执行 sudo systemctl restart lightctl 即可,不用重装。

三个坑,踩过才知道

坑一:只发颜色不提交,灯一动不动

Aura 点灯是三步,少一步都不行:

EC 35 <ch> 00 00 FF        切 direct 模式
EC 40 <0x80|ch> <off> <cnt> <RGB…>   每包 20 颗,末包置 0x80
EC 3F 55                   提交

很多资料只写了中间那步,结果就是“命令没报错,灯没反应”。

坑二:颗数不够,后半段灯变黑

配置表里每个 ARGB 接口只标 1 颗灯珠,照着发就只点亮第一颗,同一根链上后面的灯珠因为没数据被固件当成黑色。

一根链上挂几把风扇时尤其明显:常见的一把 20~30 颗,六把就是 120~180 颗。本文默认 255(协议里 count 是 1 字节,255 是安全上限),一根链基本都盖得住。

坑三:颜色发白、发粉

浅色(比如 #d97757 这种珊瑚色)在灯罩和导光柱下会被冲淡成粉白。想要“看起来是橙”,得提高饱和度,比如 #e05a1e。这不是 bug,是灯珠显色 + 亮度的物理限制——品牌色和“看起来像品牌色”往往是两个值。

排障速查

现象原因处理
没有找到 AURA 控制器灯控没被识别BIOS 里确认 Aura 开启;lsusb 看 0b05:19af
脚本报配置表读取失败回包被拆成两段用本文脚本(已处理 1 字节 ack + 两个 32 字节 report)
灯不亮但没报错少了 commit用本文脚本
只有一部分灯亮--leds 太小调到 255
重启后恢复原样直控是易失的交给本服务开机重刷,或在 BIOS 里设静态色
内存条不变它在 SMBus,不在 USB用 openrgb -d <序号>

恢复原状

sudo systemctl disable --now lightctl.service
sudo openrgb -d 0 -m Direct        # 或直接用 Armoury Crate / BIOS 设一次

断电重启后,主板和内存都会回到 BIOS / 固件的默认灯效——这也是为什么“定时切换”要靠服务在开机时重新下发一次。


脚本:gist.github.com/koharachan/3f762b51abe08914e119230356f5ff80

手把手:在 Linux 改主板 ARGB 颜色,并按时间自动切换 作者:小原酱 · 发布于 2026-10-24 许可协议:CC BY-NC-SA 4.0 ,转载请注明出处。
请我喝杯咖啡

评论

评论区滚动到这里时加载(基于 GitHub Discussions)