Control the HP OMEN 30L desktop case lighting from Linux, with no vendor software.
HP's OMEN Gaming Hub is Windows-only, and no Linux RGB tool covers these machines —
OpenRGB has only unresolved issues for OMEN desktops, and
OmenLinux / hp-omen-linux-module target OMEN
laptops (keyboard backlight, fans). This is a single dependency-free Python script that talks
to the lighting controller directly.
$ omen-led on jungle
on — cycle, theme=jungle, speed=medium, 100% (/dev/hidraw0)
sudo install -m 755 omen-led /usr/local/bin/omen-led
sudo install -m 644 99-omen-tracerled.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger --subsystem-match=hidraw
sudo usermod -aG plugdev "$USER" # log out/in for this to take effectThe udev rule gives group plugdev write access to the controller so you don't need sudo.
Requires Python 3.6+ and nothing else — no hidapi, no pyusb.
omen-led off turn everything off
omen-led on [THEME] [SPEED] [PCT] colour cycle
omen-led color RRGGBB [PCT] one static colour
omen-led brightness PCT change brightness, keep current theme/speed
omen-led status show what was last set
THEME galaxy (purple/blue, default) · volcano (red/orange) · jungle (green) · ocean (blue/cyan)
SPEED slow | medium | fast (default medium)
PCT 25 | 50 | 75 | 100 (default 100)
Arguments may be given in any order: omen-led on 50 jungle slow.
omen-led off # nightly
omen-led on jungle # green cycle
omen-led on ocean slow 25 # dim, slow, blue
omen-led color 00FF40 # solid green
omen-led brightness 50 # dim without losing the themeTested on an HP OMEN 30L Desktop GT13-0xxx (board "HP 8703"), Linux 5.4.
The controller is a USB HID device 103c:84fd "HP TracerLED". The kernel binds usbhid
automatically and exposes it as /dev/hidrawN, which is all this script needs. It should also
work on the OMEN 25L and other models using the same controller — reports welcome.
Not covered: the GPU's illuminated logo. On this machine the card is an HP OEM board
(10de:2204, subsystem 103c:88d5); nvidia-settings exposes no illumination attributes and
OpenRGB's NVIDIA support targets Founders-Edition/AIB controllers this board doesn't have. It
appears hard-wired on — physical remedies only.
Each write is 0x00 (report-ID prefix) + 57 data bytes = 58 bytes to /dev/hidrawN.
This matches the device's own HID report descriptor:
95 39 Report Count = 57, no Report ID item (unnumbered)
91 02 Output (Data,Var,Abs)
| Byte | Meaning |
|---|---|
| 0 | report ID — always 0x00 |
| 2 | 0x12 command header — mandatory |
| 3 | mode: 0x05 off · 0x01 static · 0x06 breathing · 0x07 colour-cycle · 0x08 blink |
| 4, 5 | custom colour count / number (0x01) |
| 8, 9, 10 | R, G, B — static/custom modes only |
| 48 | brightness: 0x19 25% · 0x32 50% · 0x4b 75% · 0x64 100% |
| 49 | 0x0a normal (0x04 = system-vitals mode) |
| 54 | module id (bit flag): 0x01 front · 0x02 LED bar · 0x04 fan · more exist |
| 55 | 0x01 |
| 56 | theme: galaxy / volcano / jungle / ocean = 0x01..0x04 |
| 57 | speed: slow / medium / fast = 0x01..0x03 |
- Omitting
[2] = 0x12makes the device silently ignore the report. The write succeeds and returns no error — the LEDs simply don't change. - The commonly documented module IDs (
0x01/0x02/0x04) are incomplete. On this machine the large front fan light ignored all three and only responded after sweeping the wider bit-flag range. This script therefore writes to every known module ID, which is harmless.
Also worth knowing: deauthorizing the USB device does not turn the lights off
(echo 0 > /sys/bus/usb/devices/X-Y/authorized). The controller holds its state in firmware —
you have to tell it to turn off.
Themes are sequenced in the controller's firmware, so selecting a palette works natively; no host-side colour streaming is required.
The report layout was reverse-engineered by rchiruma/HPOmenLED
(a Windows/pywinusb script) — without that work this would not exist. This project is an
independent Linux implementation written against hidraw; it shares no code with the original,
only the factual protocol description, which it extends with the corrected module-ID handling and
firmware-descriptor verification described above.
MIT — see LICENSE.
Note that the upstream project declares no license. Only interface facts (byte offsets and values) were used from it, not its code; protocol facts are generally not copyrightable. If you are the author of the original and would like different attribution, please open an issue.