<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Liquidctl on The Danesh Project</title>
    <link>https://thedaneshproject.com/tags/liquidctl/</link>
    <description>Recent content in Liquidctl on The Danesh Project</description>
    <image>
      <title>The Danesh Project</title>
      <url>https://thedaneshproject.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://thedaneshproject.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sat, 25 Apr 2026 09:24:57 -0500</lastBuildDate>
    <atom:link href="https://thedaneshproject.com/tags/liquidctl/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Controlling RGB Lighting on Linux with liquidctl</title>
      <link>https://thedaneshproject.com/posts/controlling-rgb-lighting-on-linux-with-liquidctl/</link>
      <pubDate>Fri, 24 Apr 2026 00:00:00 -0500</pubDate>
      <guid>https://thedaneshproject.com/posts/controlling-rgb-lighting-on-linux-with-liquidctl/</guid>
      <description>How I used liquidctl to control my NZXT and ASUS RGB devices on Arch Linux, sample colors from my wallpaper, and persist settings across reboots with systemd.</description>
      <content:encoded><![CDATA[<p>I recently wanted to match my PC RGB lighting to my desktop theme on Arch Linux. On Windows this is handled by manufacturer software (NZXT CAM, ASUS Armory Crate), but on Linux the tool of choice is <a href="https://github.com/liquidctl/liquidctl">liquidctl</a>. Here&rsquo;s how I got it working.</p>
<h2 id="hardware">Hardware</h2>
<ul>
<li>NZXT Control Hub</li>
<li>NZXT Kraken 2024 Elite RGB (AIO cooler)</li>
<li>NZXT F420 RGB Core fans (×2, connected to Control Hub)</li>
<li>NZXT F120 RGB fan (connected to Control Hub)</li>
<li>ASUS Aura LED Controller (motherboard ARGB/RGB headers)</li>
</ul>
<h2 id="installation">Installation</h2>
<p>liquidctl is available in the Arch repos:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo pacman -S liquidctl
</span></span></code></pre></div><h2 id="discovering-devices">Discovering Devices</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>liquidctl list
</span></span></code></pre></div><pre tabindex="0"><code>Device #0: NZXT Control Hub
Device #1: NZXT Kraken 2024 Elite RGB
Device #2: ASUS Aura LED Controller
Device #3: ASUS Aura LED Controller
</code></pre><p>Four devices show up. Device #3 is a duplicate — the ASUS Aura controller exposes two HID interfaces but only one accepts writes. Even with <code>sudo</code>, device #3 returns <code>OSError('Could not write to device')</code>. Safe to ignore it.</p>
<h2 id="initializing-devices">Initializing Devices</h2>
<p>Before setting colors, devices need to be initialized:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;ASUS&#34;</span> --pick <span style="color:#ae81ff">0</span> initialize
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> initialize
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Kraken&#34;</span> initialize
</span></span></code></pre></div><p>The <code>--pick 0</code> flag selects the first result when multiple devices match the same filter.</p>
<h2 id="identifying-control-hub-channels">Identifying Control Hub Channels</h2>
<p>The Control Hub showed three LED channels during init (<code>led2</code>, <code>led4</code>, <code>led5</code>), but I wasn&rsquo;t sure which was which. I set each to a distinct color to identify them:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led2 color fixed ff0000  <span style="color:#75715e"># red</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led4 color fixed 00ff00  <span style="color:#75715e"># green</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led5 color fixed 0000ff  <span style="color:#75715e"># blue</span>
</span></span></code></pre></div><p>Result:</p>
<ul>
<li><code>led2</code> — nothing (no device connected)</li>
<li><code>led4</code> — F420 RGB fan unit #1</li>
<li><code>led5</code> — F120 RGB fan</li>
</ul>
<p>I then tried <code>led1</code>, <code>led2</code>, <code>led3</code> and found the second F420 on <code>led3</code>. So the full map is:</p>
<table>
  <thead>
      <tr>
          <th>LED Channel</th>
          <th>Device</th>
          <th>Fan Channel</th>
          <th>RPM</th>
          <th>Physical Fans</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>led3</code></td>
          <td>NZXT F420 RGB Core (unit #2)</td>
          <td>Hub Fan 2</td>
          <td>~600</td>
          <td>3× 140mm (front or bottom)</td>
      </tr>
      <tr>
          <td><code>led4</code></td>
          <td>NZXT F420 RGB Core (unit #1)</td>
          <td>Hub Fan 4</td>
          <td>~600</td>
          <td>3× 140mm (front or bottom)</td>
      </tr>
      <tr>
          <td><code>led5</code></td>
          <td>NZXT F120 RGB</td>
          <td>Hub Fan 5</td>
          <td>~585</td>
          <td>1× 120mm (back)</td>
      </tr>
      <tr>
          <td>— (Kraken)</td>
          <td>AIO radiator fans</td>
          <td>Kraken Fan</td>
          <td>~680</td>
          <td>3× 140mm (top, LED uncontrollable)</td>
      </tr>
  </tbody>
</table>
<h2 id="setting-colors">Setting Colors</h2>
<p><strong>ASUS Aura</strong> uses <code>static</code> mode:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;ASUS&#34;</span> --pick <span style="color:#ae81ff">0</span> set sync color static E41C91
</span></span></code></pre></div><p>The <code>sync</code> channel sets all channels (ARGB + RGB) at once. You can also target <code>led1</code> or <code>led2</code> individually.</p>
<p><strong>NZXT Control Hub</strong> uses <code>fixed</code> mode:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led3 color fixed E41C91
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led4 color fixed E41C91
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led5 color fixed E41C91
</span></span></code></pre></div><p>Other supported modes for the Control Hub: <code>off</code>, <code>fading</code>, <code>spectrum-wave</code>, <code>covering-marquee</code>, <code>super-rainbow</code>.</p>
<h2 id="sampling-the-color-from-my-wallpaper">Sampling the Color from My Wallpaper</h2>
<p>Rather than picking a color by eye, I sampled the dominant colors from my wallpaper using ImageMagick:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>convert wallpaper.jpg -resize 100x100 -colors <span style="color:#ae81ff">8</span> -format <span style="color:#e6db74">&#34;%c&#34;</span> histogram:info: | sort -rn
</span></span></code></pre></div><p>This gave me the top colors by pixel count. The dominant purple was <code>#5C3A8C</code> and the hot pink accent was <code>#E41C91</code> — I went with the hot pink.</p>
<h2 id="kraken-2024-elite-rgb--partial-support">Kraken 2024 Elite RGB — Partial Support</h2>
<p>The Kraken 2024 is a newer device and liquidctl&rsquo;s driver doesn&rsquo;t support ring LED control yet (<code>_color_channels</code> is empty). However, the LCD screen is controllable:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Show coolant temperature (default)</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Kraken&#34;</span> set lcd screen liquid
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Display a static image (640×640)</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Kraken&#34;</span> set lcd screen static /path/to/image.png
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Adjust brightness</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Kraken&#34;</span> set lcd screen brightness <span style="color:#ae81ff">80</span>
</span></span></code></pre></div><p>I kept it on <code>liquid</code> mode to show coolant temperature.</p>
<h2 id="persisting-with-systemd">Persisting with systemd</h2>
<p>Colors reset on reboot, so I created a script and systemd service to reapply them automatically.</p>
<p><code>~/.local/bin/set-rgb.sh</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Hot pink from wallpaper (3-milad-fakurian.jpg)</span>
</span></span><span style="display:flex;"><span>COLOR<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;E41C91&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># ASUS Aura LED Controller (device #2) — motherboard ARGB/RGB headers</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;ASUS&#34;</span> --pick <span style="color:#ae81ff">0</span> initialize
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;ASUS&#34;</span> --pick <span style="color:#ae81ff">0</span> set sync color static $COLOR
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># NZXT Control Hub — led3/led4: F420 RGB fans, led5: F120 RGB fan</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> initialize
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led3 color fixed $COLOR
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led4 color fixed $COLOR
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Control Hub&#34;</span> set led5 color fixed $COLOR
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># NZXT Kraken 2024 Elite RGB — ring LEDs not supported by liquidctl yet</span>
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Kraken&#34;</span> initialize
</span></span><span style="display:flex;"><span>liquidctl --match <span style="color:#e6db74">&#34;Kraken&#34;</span> set lcd screen liquid
</span></span></code></pre></div><p><code>/etc/systemd/system/set-rgb.service</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[Unit]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Description</span><span style="color:#f92672">=</span><span style="color:#e6db74">Set RGB LED colors</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">After</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Service]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Type</span><span style="color:#f92672">=</span><span style="color:#e6db74">oneshot</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">ExecStart</span><span style="color:#f92672">=</span><span style="color:#e6db74">/home/danny/.local/bin/set-rgb.sh</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">RemainAfterExit</span><span style="color:#f92672">=</span><span style="color:#e6db74">yes</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Install]</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">WantedBy</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span>
</span></span></code></pre></div><p>Enable it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl daemon-reload
</span></span><span style="display:flex;"><span>sudo systemctl enable --now set-rgb.service
</span></span></code></pre></div><h2 id="summary">Summary</h2>
<table>
  <thead>
      <tr>
          <th>Device</th>
          <th>Controllable</th>
          <th>Notes</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>ASUS Aura LED Controller</td>
          <td>Yes</td>
          <td><code>set sync color static &lt;hex&gt;</code></td>
      </tr>
      <tr>
          <td>NZXT Control Hub (fans)</td>
          <td>Yes</td>
          <td><code>set ledX color fixed &lt;hex&gt;</code></td>
      </tr>
      <tr>
          <td>NZXT Kraken 2024 LCD</td>
          <td>Yes</td>
          <td><code>set lcd screen liquid/static/gif</code></td>
      </tr>
      <tr>
          <td>NZXT Kraken 2024 ring</td>
          <td>No</td>
          <td>Not yet supported in liquidctl v1.16.0</td>
      </tr>
      <tr>
          <td>NZXT Kraken 2024 AIO fans (top 3)</td>
          <td>No</td>
          <td>Connected to Kraken head, not Control Hub — same limitation as ring</td>
      </tr>
  </tbody>
</table>
]]></content:encoded>
    </item>
  </channel>
</rss>
