A Qt 6 / QML desktop app that controls Alienware RGB lighting on Linux, with a visual zone selector that mirrors the physical laptop layout (lid logo, power button, keyboard sections, numpad).
The lighting is driven by the alien-lights
utility, which talks to the Alienware AW-ELC USB controller (187c:0550)
directly via libusb — no Alienware Command Center, no Windows.
- Visual zone selector matching the real hardware layout: each zone shows its current color as backlit keys and an LED strip
- The selected zone previews the color you are about to apply before you apply it
- Per-zone and all-zone color control
- Named colors or
#RRGGBBvalues, live preview swatches and a custom RGB picker - Global brightness control (0-100%)
- 5 built-in themes — Alien Green, Nebula Blue, Cyber Red, Ultraviolet, and a light "Moon Ghost" — with animated accent color changes
- Vector Alienware-style head logo rendered in QML, also used as the app icon
- Last color/brightness is saved and re-applied on every boot
- Companion
kbdCLI andkbd-idzone-identification helper
The AW-ELC controller on this machine exposes 7 lighting segments; the app controls the 6 that are actually visible on the hardware:
| # | Zone |
|---|---|
| 0 | Lid (Alienware logo) |
| 1 | Power button |
| 2 | Keyboard – left |
| 3 | Keyboard – middle |
| 4 | Keyboard – right |
| 5 | Numpad |
Zone ordering can differ between Alienware models. Run kbd-id to identify
each segment on your hardware.
- Linux (tested on Ubuntu 24.04 / Pop!_OS)
- An Alienware system with AW-ELC USB controller (
187c:0550) - Qt 6 (Core, Quick) and CMake ≥ 3.16
- Python 3 +
libusb-1.0foralien-lights
# 1. Install the alien-lights backend (installs the CLI to ~/.local/bin
# and a udev rule so the controller is accessible without sudo)
git clone https://github.com/JakeLaney/alien-lights.git
cd alien-lights && ./install.sh && cd ..
# 2. Build the app
cd kbd-app
cmake -S . -B build
cmake --build build
# 3. Run
./build/alienware-kbdOptional: install the desktop launcher (the app window also uses the bundled Alienware head icon):
cp kbd-app/alienware-kbd.desktop ~/.local/share/applications/
mkdir -p ~/.local/share/icons/hicolor/256x256/apps
cp kbd-app/icons/alienware-kbd.png ~/.local/share/icons/hicolor/256x256/apps/
gtk-update-icon-cache -f -t ~/.local/share/icons/hicolor || trueInstall the udev rule so the controller is accessible to desktop users and
plugdev members, then log out and back in:
sudo cp 99-alienfx.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo usermod -aG plugdev $USERThe app (and kbd CLI) save the last color and brightness to
~/.config/alienware-kbd/state.conf. A systemd unit re-applies it at boot:
sudo cp kbd-restore.service /etc/systemd/system/
sudo systemctl enable --now kbd-restoreThe service and scripts reference per-user paths (
/home/…); adjustkbd-restore.serviceandkbd-restore.shfor your own user.
./kbd color cyan # all zones cyan
./kbd lid red # lid only
./kbd numpad 00FF00 # numpad only, hex color
./kbd bright 200 # brightness (0-255 CLI input, stored/applied as 0-100%)
./kbd off # lights off
./kbd-id # flash each zone to identify itA GitHub Actions workflow (.github/workflows/build.yml) builds the app on
Ubuntu, lints the QML with qmllint, smoke-tests it headlessly, and
syntax-checks the shell scripts on every push and PR.
alien-lights: AW-ELC is present but its USB device node is not writable— the udev rule is missing or your user is not inplugdev.- The controller does not report its current color/brightness; the app restores the last saved state instead.