---
tags:
  - Documentation
  - Bookstack
  - Notes
---
# ASUS Laptop

# Installing Keyboard LED

Ah, the output reveals exactly what's happening. OpenRGB is running in standalone mode and warning you about missing **udev rules**, which means it lacks the direct hardware permissions to hook into your Asus ROG laptop's internal SMBus/I2C controllers.

Because we are running this as a system startup task, the cleanest, most rock-solid approach is to completely sidestep OpenRGB and use the **native Linux kernel controls** (`sysfs`) that we found earlier. The kernel already has full root permissions and is running natively on your hardware without any extra utilities or udev rules required.

Let's test the native kernel interface directly. Run this command to see if your keyboard springs to life:

<div class="code-block ng-tns-c602925248-115 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash"><div class="formatted-code-block-internal-container ng-tns-c602925248-115"><div class="animated-opacity ng-tns-c602925248-115"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c602925248-115 ng-star-inserted"><span class="ng-tns-c602925248-115">Bash</span><div class="buttons ng-tns-c602925248-115 ng-star-inserted"></div></div></div></div></div>```
echo 3 | sudo tee /sys/class/leds/asus::kbd_backlight/brightness

```

<div class="code-block ng-tns-c602925248-115 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--1"><div class="formatted-code-block-internal-container ng-tns-c602925248-115"><div class="animated-opacity ng-tns-c602925248-115"></div></div></div>### Option A: If that turned your lights on (The Native Fix)

If the command above worked, we can make your startup service incredibly lightweight. We don't need OpenRGB or `rogauracore` at all.

1. Open your service file:
    
    <div class="code-block ng-tns-c602925248-116 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-116"><div class="animated-opacity ng-tns-c602925248-116"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c602925248-116 ng-star-inserted"><span class="ng-tns-c602925248-116">Bash</span><div class="buttons ng-tns-c602925248-116 ng-star-inserted"></div></div></div></div></div>```
    sudo nano /etc/systemd/system/keyboard-led.service
    
    ```
    
    <div class="code-block ng-tns-c602925248-116 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-116"><div class="animated-opacity ng-tns-c602925248-116"></div></div></div>
2. Replace the entire contents with this clean shell execution:
    
    <div class="code-block ng-tns-c602925248-117 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-117"><div class="animated-opacity ng-tns-c602925248-117"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c602925248-117 ng-star-inserted"><span class="ng-tns-c602925248-117">Ini, TOML</span><div class="buttons ng-tns-c602925248-117 ng-star-inserted"></div></div></div></div></div>```
    [Unit]
    Description=Asus ROG Keyboard LED Native Initialization
    After=multi-user.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/bin/sh -c "echo 3 > /sys/class/leds/asus::kbd_backlight/brightness"
    
    [Install]
    WantedBy=multi-user.target
    
    ```
    
    <div class="code-block ng-tns-c602925248-117 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-117"><div class="animated-opacity ng-tns-c602925248-117"></div></div></div>
3. Save, reload, and enable:
    
    <div class="code-block ng-tns-c602925248-118 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-118"><div class="animated-opacity ng-tns-c602925248-118"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c602925248-118 ng-star-inserted"><span class="ng-tns-c602925248-118">Bash</span><div class="buttons ng-tns-c602925248-118 ng-star-inserted"></div></div></div></div></div>```
    sudo systemctl daemon-reload
    sudo systemctl reset-failed keyboard-led.service
    sudo systemctl start keyboard-led.service
    sudo systemctl enable keyboard-led.service
    
    ```
    
    <div class="code-block ng-tns-c602925248-118 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-118"><div class="animated-opacity ng-tns-c602925248-118"></div></div></div>

### Option B: If you still want OpenRGB's specific color profiles

If you want to stick with OpenRGB (for instance, to set custom HEX colors or complex animations), we need to fix those `udev` rules so OpenRGB can talk to the hardware interface.

1. Download and install the official OpenRGB udev rules template:
    
    <div class="code-block ng-tns-c602925248-119 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-119"><div class="animated-opacity ng-tns-c602925248-119"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c602925248-119 ng-star-inserted"><span class="ng-tns-c602925248-119">Bash</span><div class="buttons ng-tns-c602925248-119 ng-star-inserted"></div></div></div></div></div>```
    sudo wget -O /etc/udev/rules.d/60-openrgb.rules https://gitlab.com/CalcProgrammer1/OpenRGB/-/raw/master/60-openrgb.rules
    
    ```
    
    <div class="code-block ng-tns-c602925248-119 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-119"><div class="animated-opacity ng-tns-c602925248-119"></div></div></div>
2. Reload your system's device rules:
    
    <div class="code-block ng-tns-c602925248-120 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-120"><div class="animated-opacity ng-tns-c602925248-120"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c602925248-120 ng-star-inserted"><span class="ng-tns-c602925248-120">Bash</span><div class="buttons ng-tns-c602925248-120 ng-star-inserted"></div></div></div></div></div>```
    sudo udevadm control --reload-rules && sudo udevadm trigger
    
    ```
    
    <div class="code-block ng-tns-c602925248-120 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-120"><div class="animated-opacity ng-tns-c602925248-120"></div></div></div>
3. Try running the OpenRGB command again to test:
    
    <div class="code-block ng-tns-c602925248-121 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-121"><div class="animated-opacity ng-tns-c602925248-121"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c602925248-121 ng-star-inserted"><span class="ng-tns-c602925248-121">Bash</span><div class="buttons ng-tns-c602925248-121 ng-star-inserted"></div></div></div></div></div>```
    sudo /usr/local/bin/openrgb --appimage-extract-and-run --device 0 --mode static --color 00FF00 --brightness 100
    
    ```
    
    <div class="code-block ng-tns-c602925248-121 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c602925248-121"><div class="animated-opacity ng-tns-c602925248-121"></div></div></div>

If you prefer the simplicity of a working keyboard without extra dependencies, **Option A** is highly recommended!