Linux kernel driver for HP OMEN laptop RGB keyboard lighting. Controls 4-zone RGB lighting with brightness control.
Inspired by the original hp-omen-linux-module by James Churchill (@pelrun).
[!TIP]
Need help or want to chat? Join our official Discord server for support, questions, or to show off your RGB setups:
➡️ Click here to join Discord
| Model Series | Status |
|---|---|
| Omen 16-u0000sl | Tested & working |
| Omen 16-wf1xxx | Tested & working |
| Omen 16-wf0xxx | Tested & working |
| Omen 14-fb0xxx | Tested & working |
# Arch Linux
sudo pacman -S linux-headers base-devel alsa-lib
# Fedora
sudo dnf install kernel-devel kernel-headers @development-tools dkms alsa-lib-devel
# Ubuntu/Debian
sudo apt install linux-headers-$(uname -r) build-essential libasound2-dev
Note: The ALSA libraries are required for the mute button LED control feature. The driver will still compile without them, but LED sync functionality will be disabled.
[!IMPORTANT] We’ve noticed issues when using this driver at the same time with
hp_wmiloaded. Since we implement the same things but in an improved way, there’s no reason to keep both fighting each other for WMI events (which will cause issues)sudo modprobe -r hp_wmi echo "blacklist hp_wmi" | sudo tee /etc/modprobe.d/blacklist-hp.conf #regenerate your initramfs (dependent on your distro)
# Clone the repository
git clone https://github.com/alessandromrc/omen-rgb-keyboard.git
cd omen-rgb-keyboard
# Build and install
sudo make install
The module will be built and installed using DKMS, which will automatically rebuild it on kernel updates.
The driver is configured to load automatically on boot. If you need to set this up manually:
# Create modprobe configuration (for module options)
sudo cp omen_rgb_keyboard.conf /etc/modprobe.d/
# Create systemd module loading configuration
echo "omen_rgb_keyboard" | sudo tee /etc/modules-load.d/omen_rgb_keyboard.conf
# Create state directory
sudo mkdir -p /var/lib/omen-rgb-keyboard
Alternatively, use the provided installation script:
sudo ./install.sh
By default, controlling the RGB keyboard requires sudo privileges. To allow your user to control the RGB keyboard without sudo:
# Install udev rules and configure user permissions
sudo ./install-udev-rules.sh
This script will:
Important: After running this script, you need to log out and log back in (or run newgrp input) for the group membership to take effect.
After installation, you can control the keyboard without sudo:
# No sudo needed!
echo "rainbow" | tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "5" | tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Load the module
sudo modprobe omen_rgb_keyboard
# Check if it loaded successfully
lsmod | grep omen_rgb_keyboard
The driver creates sysfs attributes in /sys/devices/platform/omen-rgb-keyboard/rgb_zones/:
# Set zone 0 to red
echo "FF0000" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone00
# Set zone 1 to green
echo "00FF00" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone01
# Set zone 2 to blue
echo "0000FF" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone02
# Set zone 3 to purple
echo "FF00FF" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone03
# Set all zones to the same color
echo "FFFFFF" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/all
# Set brightness to 50%
echo "50" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/brightness
# Set brightness to 100% (maximum)
echo "100" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/brightness
# Turn off lighting (0% brightness)
echo "0" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/brightness
# Check current brightness
cat /sys/devices/platform/omen-rgb-keyboard/rgb_zones/brightness
# Check current animation mode
cat /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
# Check current animation speed
cat /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Check current zone colors
cat /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone00
cat /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone01
# etc...
Colors are specified in RGB hex format:
FF0000 = Red00FF00 = Green0000FF = BlueFFFFFF = White000000 = Black (off)Brightness is specified as a percentage (0-100):
0 = Completely off50 = 50% brightness100 = Maximum brightnessThe driver supports 10 different animation modes:
Basic Modes:
Advanced Modes:
Animation speed is controlled by a value from 1-10:
1 = Slowest animation5 = Default speed10 = Fastest animation# Red gaming theme
echo "FF0000" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/all
echo "75" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/brightness
echo "FF0000" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone00 # Red
echo "FF8000" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone01 # Orange
echo "FFFF00" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone02 # Yellow
echo "00FF00" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/zone03 # Green
echo "FFFFFF" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/all
echo "25" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/brightness
# Breathing red effect
echo "FF0000" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/all
echo "breathing" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "3" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Rainbow wave
echo "rainbow" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "5" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Chase effect
echo "00FF00" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/all
echo "chase" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "4" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Sparkle effect
echo "FFFFFF" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/all
echo "sparkle" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "2" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Aurora effect (uses its own colors)
echo "aurora" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "3" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Disco strobe effect
echo "disco" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "6" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
# Candle effect (uses its own warm colors)
echo "candle" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_mode
echo "4" | sudo tee /sys/devices/platform/omen-rgb-keyboard/rgb_zones/animation_speed
The driver intercepts the Omen key press and maps it to KEY_MSDOS, allowing you to bind custom shortcuts to it.
GNOME:
KDE Plasma:
i3/Sway: Add to your config file:
bindsym XF86DOS exec your-command-here
If you want to map the Omen key to a different key, edit src/wmi/omen_wmi.c:
static const struct key_entry hp_wmi_keymap[] = {
{ KE_KEY, OMEN_KEY_SCANCODE, { KEY_MSDOS } }, // Change KEY_MSDOS to your preferred key
{ KE_END, 0 }
};
After changing, rebuild with sudo make install.
# Check if WMI is supported
sudo dmesg | grep -i wmi
# Check for errors
sudo dmesg | grep -i omen_rgb_keyboard
# Verify the module loaded
lsmod | grep omen_rgb_keyboard
# Check sysfs path
ls -la /sys/devices/platform/omen-rgb-keyboard/rgb_zones/
omen-rgb-keyboard/var/lib/omen-rgb-keyboard/stateGPL-3.0
Feel free to submit issues and pull requests.
This driver is provided as-is, use at your own risk. The author is not responsible for any damage to your hardware.