A lightweight, native RGB LED controller for MSI-based gaming laptops Built with Rust + Native Windows Win32 API β no bloated software needed.
Features β’ Screenshots β’ Installation β’ Compatibility β’ Building β’ Hotkey β’ FAQ
MSI gaming laptops (and MSI-based OEM brands like Game Garaj) ship with keyboard RGB backlighting, but:
- β MSI Center / SteelSeries GG is bloated, uses 300+ MB RAM, and often fails to detect the keyboard
- β The default lighting software doesn't support OEM/rebranded MSI laptops (Game Garaj, XPG, etc.)
- β Keyboards sometimes get stuck in bootloader mode after sleep/hibernate β LEDs stop working entirely
- β No simple way to quickly toggle lighting modes without opening a full application
RustKeyboard is a tiny (~11 MB), zero-dependency native app that:
- π¨ Directly controls your keyboard LEDs via USB HID β no MSI Center needed
- π§ Automatically recovers keyboards stuck in bootloader mode (Artery MCU)
- β¨οΈ Fn+F8 hotkey to cycle through hardware lighting modes instantly
- π₯οΈ Runs silently in the system tray with 0% CPU usage when minimized
- π Supports English, German (Deutsch), and Turkish (TΓΌrkΓ§e) interfaces
| Mode | Description |
|---|---|
| Off | All LEDs disabled |
| Static Single Color | Solid color across all zones |
| Breathing Wave | Smooth fade in/out |
| Single Flashing | Single blink pattern |
| Double Flashing | Double blink pattern |
| Multi-color Shift | Colors shift across zones |
| Rainbow | Full RGB spectrum sweep |
- 7-zone color customization β pick any color for each keyboard zone
- System tray β minimize to tray, runs in background with 0% CPU usage
- Start on boot β optional Windows auto-start via Registry
- Bootloader recovery β auto-detect and wake up stuck keyboards
- Fn+F8 hotkey β cycle through all 7 hardware modes with a single keypress
- Multi-language UI β English π¬π§, Deutsch π©πͺ, TΓΌrkΓ§e πΉπ·
| Component | Details |
|---|---|
| Laptop | Game Garaj Slayer XL (MSI OEM) |
| Motherboard | MSI MS-17L2 |
| BIOS | E17L2IE2.103 (2021-07-22) |
| CPU | Intel Core i7-11800H @ 2.30GHz (11th Gen Tiger Lake) |
| GPU | NVIDIA GeForce RTX 3050 Ti Laptop + Intel UHD Graphics |
| RAM | 40 GB DDR4 |
| OS | Windows 11 Pro |
| Keyboard MCU | Artery AT32 (VID: 0x2E3C, Bootloader PID: 0xAF01) |
This tool communicates with MSI keyboards via USB HID using:
- Vendor ID:
0x1462(Micro-Star International) - Product IDs:
5474,5475,5476
It should work with any MSI laptop keyboard that uses these HID identifiers, including:
| Brand | Series | Notes |
|---|---|---|
| MSI | GE, GF, GP, GS, GT series | Steelseries per-key RGB keyboards |
| Game Garaj | Slayer series | Turkish MSI OEM brand |
| XPG / ADATA | Xenia series | Some MSI-based models |
Note
If your MSI laptop's keyboard uses different PIDs, you can check with a USB HID tool and open an issue to add support.
- Download
rustkeyboard.exefrom the Releases page - Place it in
C:\rustkeyboard\(or any folder) - Run
rustkeyboard.exe - (Optional) Enable "Start on Boot" in the Options panel
See Building from Source below.
| Key | Action |
|---|---|
| Fn + F8 | Cycle through hardware lighting modes: Off β Static β Breathing β Single Flash β Double Flash β Multi-color β Rainbow β Off β ... |
Tip
The hotkey works globally β even when the app is minimized to the system tray. It saves the new mode to config automatically.
- Rust (2024 edition)
- Windows 10/11 (x86_64)
git clone https://github.com/mahirgul/rustkeyboard.git
cd rustkeyboard
cargo build --releaseThe compiled binary will be at target\release\rustkeyboard.exe.
# Using the included deploy script:
deploy.batThis builds in release mode and copies the exe to the project root.
rustkeyboard/
βββ src/
β βββ main.rs # Entry point, registers window class and starts loops
β βββ window.rs # Native Win32 window (controls, custom drawing, events)
β βββ i18n.rs # Localization (EN/DE/TR translations)
β βββ hid.rs # USB HID communication with MSI keyboards
β βββ hook.rs # Global keyboard hook (Fn+F8 mode cycling)
β βββ tray.rs # Windows system tray icon + context menu
β βββ config.rs # JSON config persistence
β βββ startup.rs # Windows Registry auto-start management
β βββ globals.rs # Cross-thread shared state (atomics/mutexes)
βββ config.json # User configuration (auto-generated)
βββ icon.ico # System tray icon
βββ wresources.rc # Windows resource file (icon embedding)
βββ build.rs # Build script (embed-resource)
βββ deploy.bat # Build & deploy helper
βββ Cargo.toml # Rust dependencies
βββ README.md # This file
Settings are stored in config.json next to the executable:
{
"mode": 6,
"speed": 2,
"brightness": 10,
"colors": [[255,255,255], [255,0,0], [255,165,0], [255,255,0], [0,255,0], [0,255,255], [255,0,255]],
"close_to_tray": true,
"start_in_tray": true,
"language": "en"
}| Field | Type | Description |
|---|---|---|
mode |
0-6 |
Hardware effect mode |
speed |
0-2 |
Hardware effect speed (Slow/Medium/Fast) [config-only] |
brightness |
0-10 |
LED brightness level [config-only] |
colors |
[R,G,B]Γ7 |
7 RGB color zones |
close_to_tray |
bool |
Minimize to tray instead of closing |
start_in_tray |
bool |
Start minimized to system tray [config-only] |
language |
"en"/"de"/"tr" |
UI language |
Q: My keyboard LEDs stopped working after sleep/hibernate!
Click "β‘ Force Wake Up" in the Actions panel. The app will send a recovery command to the Artery bootloader MCU.
Q: The app says "Not Found" for keyboard status.
Make sure no other software (MSI Center, SteelSeries GG) is holding the HID device open. Close them and click "π Refresh".
Q: Does this work with per-key RGB?
Currently this controls keyboard-wide (zone-based) lighting, not individual per-key colors. Per-key support may be added in the future.
Q: Can I add my own MSI keyboard PID?
Yes! Open
src/hid.rsand add your PID to theMSI_PIDSarray. You can find your keyboard's PID using USBDeview or Device Manager.
Q: How does the background CPU usage remain at 0%?
The application is built entirely using the native Win32 API, eliminating GUI framework overhead. When minimized to the system tray, the window is hidden (
SW_HIDE), and standard Win32 message loop processing handles the system tray events, guaranteeing 0% CPU consumption.
| Crate | Version | Purpose |
|---|---|---|
hidapi |
2.6.2 | USB HID communication |
serde + serde_json |
1.0 | JSON config serialization |
windows-sys |
0.52.0 | Win32 API (hooks, tray, window management) |
rand |
0.9 | Randomness |
embed-resource |
2.5 | Build-time icon embedding |
This project is licensed under the MIT License.
Made with β€οΈ and π¦ Rust
If this tool helped you, please β star the repo!