Builds will be periodically uploaded to the releases tab.
You may also download pre-compiled versions from here (requires github account) by clicking the latest entry with a ✅ and going under the "artifacts" section.
All stock effects: Static, Breath, Smooth, LeftWave, RightWave.
Custom effects:
- Lightning: Adds a little spark.
- AmbientLight: Reacts to content on your screen.
- Smooth(Left/Right)Wave: An implementation of the classic wave effect.
- (Left/Right)Swipe: Transitions the selected colors from side to side, useful for custom waves.
- Disco: A portable dance floor!
- Christmas: Even keyboards can get festive.
- Fade: Turns off the keyboard lights after a period of inactivity.
- Temperature: Displays a gradient based on the current CPU temperature. (Linux only)
The best way to add a new effect is to directly edit the source code, as it allows the most flexibility. You can however also use the built-in feature to make basic effects.
- You can make custom effects using a
json
file with the following format:
{
"effect_steps": [
{"rgb_array": [0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0], "step_type": "Set", "brightness": 1, "steps": 100, "delay_between_steps": 100, "sleep": 100},
{"rgb_array": [0, 100, 0, 0, 0, 200, 0, 0, 200, 200, 0, 0], "step_type": "Transition", "brightness": 1, "steps": 100, "delay_between_steps": 100, "sleep": 100}
],
"should_loop": true
}
- effect_steps: Contains the different "steps" the effect will go through.
- rgb_array: An array describing the colours to use in the
[r,g,b,r,g,b...]
format. - step_type: The type of step to use. You may instantly swap the colours with
Set
or smoothly transition to them withTransition
. - brightness: The brightness of the step, can be
1
(low) or2
(high). - steps: To smoothly transition between colours, the keyboard LEDs are set at small intervals until they reach the desired color. This controls the number of them.
- delay_between_steps: How much time to wait between each interval (In ms).
- sleep: The time to wait before going to the next
effect_step
(In ms).
- rgb_array: An array describing the colours to use in the
- should_loop: Whether the effect should start again once it reaches the last step.
Note: By default, on Linux you will have to run the program with root privileges, however, you can remedy this by adding the following udev
rule (in a path similar to /etc/udev/rules.d/99-kblight.rules
):
- 2023 Models:
# Regular legions
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c985", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c984", MODE="0666"
# LOQ Models
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c983", MODE="0666"
- 2022 Models:
# Regular legions
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c975", MODE="0666"
# Ideapad models
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c973", MODE="0666"
- 2021 Models:
# Regular legions
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c965", MODE="0666"
# Ideapad models
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c963", MODE="0666"
- 2020 Models:
SUBSYSTEM=="usb", ATTR{idVendor}=="048d", ATTR{idProduct}=="c955", MODE="0666"
And then reloading the rules:
sudo udevadm control --reload-rules && sudo udevadm trigger
Execute the file by double-clicking on it. You may pass extra startup options via the CLI by also specifying the --gui
flag.
Configuration for this mode is saved by default on the folder the program was executed in a file called settings.json
, you can override this location by setting the LEGION_KEYBOARD_CONFIG
environment variable.
Usage:
legion-kb-rgb [OPTIONS] [SUBCOMMAND]
Examples:
- Getting the help prompt
legion-kb-rgb --help
- Setting the keyboard to red
legion-kb-rgb set -e Static -c 255,0,0,255,0,0,255,0,0,255,0,0
- Using the SmoothWave effect going to the left with speed
4
and brightness at high
legion-kb-rgb set -e SmoothWave -s 4 -b 2 -d Left
This program has been tested to work on:
- Legion 5 (Pro) 2020, 2021, 2022, 2023, 2024
- Ideapad Gaming 3 2021, 2022, 2023, 2024
- Legion 7(i): Won't work, the backlight on these is per-key and uses a different way of communicating.
- Any variant with a white backlight: Haven't figured out how to talk to this one yet, but given the limited number of states (off, low, high) there's not many effects I'd be able to add anyways.
sudo apt-get install -y libclang-dev libxcb-shm0-dev libusb-1.0-0-dev libx11-dev nasm libdbus-1-dev libudev-dev libxcb-randr0-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libxi-dev libxtst-dev
Works on both Windows and Linux.
- Install
cargo-make
cargo install cargo-make
- Clone the repository
git clone https://github.com/4JX/L5P-Keyboard-RGB.git
- Build the project
cd L5P-Keyboard-RGB/
cargo make build-release
-
Download and bootstrap VCPKG
-
You'll need to set an environment variable called
VCPKG_ROOT
pointing to the directory where you downloaded and bootstrapped VCPKG. -
Download the VCPKG dependencies
Windows:
vcpkg update && vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static
Linux:
vcpkg update && vcpkg install libvpx libyuv
- Clone the repository
git clone https://github.com/4JX/L5P-Keyboard-RGB.git
- Build the project
cd L5P-Keyboard-RGB/
cargo build --release
I cannot guarantee this solution will work for anyone but myself. That being said feel free to open an issue if you encounter any of these problems on the issues tab.
Thanks to legendk95#0574 (272711294338072577) over at discord for initially reverse engineering the way to talk to the keyboard.