OpenRGB – An RGB Software I Want to Use (It Runs on Linux!)

If you are in the market for anything gaming PC or gaming laptop related, chances are, you have come across the industry-wide trend of RGB illuminated hardware and peripherals. Everything is RGB, from the graphics card to the RAM, to your headset (because you can see the lights when you wear it 🙄), and many, many more. I am not against RGB lighting per se, but if you follow the industry as a PC hardware enthusiast, it is evident that in some aspects, this has gone too far.

Quick side note: after a rant about RGB software, I will show examples of using OpenRGB on Windows and Linux. If you are interested in only that, skip the rant and scroll to the bottom.

The Rant

Be that as it may, the worst offenders in my book are the RGB control software suites. RGB gives you the option to make your computer look fantastic, a massive benefit of this technology. With a few clicks of a mouse, your black and red computer turns into white and blue. To do that, you must deal with one or more different tools, depending on how you mix and match components. Every prominent hardware manufacturer has established its own technology and API. Unless you manage to stay in one or two ecosystems, you will not have much choice other than to install several tools to control your lights, each with its quirks and shortcomings.

In the past, I was using up to three applications:

  • for an all-in-one liquid cooler from NZXT
  • for an ASUS motherboard and the RAM installed on it
  • a gigabyte graphics card

I wasn’t thinking about it much at that time, but moving on to MSI hardware in the last year, I started to despise this trend – because of MSI’s software. Until recently, when I dabbled in Linux once more and casually, without expecting to find anything, searched for some Linux compatible RGB control software. And that is when I found my savior: OpenRGB.

But before I move on, let me quickly explain why I am not too fond of RGB software and why MSI’s in particular. Do not worry. I will also share how to use OpenRGB and set it up to apply colors on system-boot without it running in the background.

Involuntarily I already teased the most significant selling point in the last sentence. OpenRGB can set your preferred color scheme and then not use any more of your system’s resources because it does not need to keep running in the background (small asterisk: it might depend on your hardware and the effect you want to achieve). That is one disadvantage of the many hardware manufacturer’s control applications. Gamers Nexus has performed tests to show how much or how little performance some of these tools can cost. Granted, their testing is based on a quad-core CPU to exaggerate the effects. I am running a 6-core CPU with SMT for several years now and plan to upgrade to Ryzen 5000 shortly. Hence, the impact is likely not to be as noticeable. Also, I have 32 GB of memory, so wasting RAM should technically not be an argument either. However, sometimes it is about the principle.

As the Gamers Nexus video shows, some software can negatively affect your gaming experience. Maybe the software mentioned has improved in the meantime, I do not know. One thing that I do know is how much stuff MSI installs with their Dragon Center. In the past, MSI used to offer Mystic Light as a standalone application but have since then incorporated it into their behemoth of a piece of crap that installs more services into Windows than the mythical Hydra can grow heads. If all you want to do is control the lights on your GPU, you get about six or seven additional Windows services. They even run in the background if you disable basically everything in Dragon Center except the Mystic Light for RGB. Worst of it all, Dragon Center installs a network traffic shaping driver – for better streaming and online gameplay bla bla. Although it may not be malicious in its intent from what I have researched, this is not okay. What is next, keyloggers? Every additional service is a potential gateway for malware to find its way onto your system. What do you think a network driver can do, sitting between your operating system and the data coming in over the wire? Just, No! You might think, well, why don’t you just uninstall it? Sure, but as the Hydra mentioned above, it grows back the next time Dragon Center starts.

I created a small set of commands, saved them to a BAT file, and ran that on system boot with a delay of about a minute or two. This gave Dragon Center enough time to start and apply the lights. Afterward, the script blew its services into oblivion. There may be instances where light effects require the application to run, though. In that case, if you plan to copy my workaround, you may not be able to terminate all or any services.

The following script is the best I could find with a quick Internet search. This is the only thing I never backed up so I do not have my most recent version any more. MSI may have added more services in the meantime, so check your Task Manager. There might also be something about a cFosSpeed service – the infamous "Internet-Accelerator + Ping optimizer", as the vendor markets it.

taskkill /IM "LEDKeeper2.exe" /F 
taskkill /IM "MSI.TrueColor.exe" /F 
taskkill /IM "DCv2.exe" /F 
taskkill /IM "RuntimeBroker.exe" /F 
taskkill /IM "LightKeeperService.exe" /F
taskkill /IM "MSI.CentralServer.exe" /F 
taskkill /IM "MSI_Central_Service.exe" /F 
taskkill /IM "Mystic_Light_Service.exe" /F 
exit

There is one other point to it than performance and egregious install routines: usability. Have you watched the video? Have you seen how some of the UIs look? Granted, if I only use an application for about 10 minutes after installation to figure out how it works and then set it up correctly, this is not a dealbreaker. But why must some of these applications look like skinned-to-death shareware from the nineties? Take Dragon Center as an example again. You cannot resize it, and its controls are massive. It is like Duplo bricks vs. Lego bricks as if MSI expects you to navigate the application with the palm of your hand instead of a precise mouse pointer. I understand that not all applications look terrible and work even worse. NZXT’s Cam was pleasant enough – ignoring the fact that I had to apply a read-only lock to its database file or else it would revert to defaults every time it started. Even Gigabyte’s RGB Fusion was acceptable to control my RAM modules.

OpenRGB

Which finally brings me to OpenRGB. Let me lighten the mood and tell you how much I like it. It is a lot, and that is precisely for the points I mentioned. It is not using terrible skins, but rather the system’s look and feel. It does not install a bunch of services that are running in the background. It does not install unwanted software.

There is one crucial piece of information to keep in mind, though. As an Open Source solution, somebody’s hobby, this application cannot possibly support all the latest RGB-enabled hardware on the market. Its list is pretty long, and in my case, I can control the core components, being the RAM and the graphics card. My motherboard, an MSI X570 Tomahawk, is detected too, but I cannot control the lighting. But I made sure it could be disabled in the BIOS before I bought it 😉. My graphics card is not fully supported either. It seems like everything is detected, but I can only effectively change the color for all LEDs at once, and it only works in some modes. Since I prefer a static color, it is fine with me. What I could also try is to connect the case RGB to the motherboard and see what happens. But, since my computer case, the be quiet! Pure Base 500 DX comes with a hardware RGB controller, and I do not need crazy effects, I ignorantly forego that option. This is an instance where I prefer hardware-controlled over software-controlled any day.

To put it short, it works very well for me, but it is not perfect, and that is something you should be aware of when you try it out. You could be lucky or out of luck.

Installation

You can find the latest release on the author’s Gitlab release page. Scroll down to see the compiled binaries for several platforms. If you prefer to compile it yourself, go ahead and have fun. That is the beauty of Open Source Software. I went with the 64 bit Windows binary archive and the amd64 Debian package. On Windows, extract the files to wherever you want. The most logical place would be C:\Program Files. For the 32 bit versions, it would be C:\Program Files (x86). Technically it does not matter, and it is merely about consistency.

On Windows, you will also require a C++ runtime if it is not already installed.

That is all there is to it.

(Self-compilers can figure out by themselves where to put it and how to make it run 😅)

Usage

I am confident you all know how to find the executable and, well, execute it. Windows users need to know that some hardware is only detected when OpenRGB is run with admin privileges, which was the case for me. On Linux, this is not an issue.

The user interface is more or less self-explanatory. You can select your preferred colors and effects on-demand or save them to a profile for later use. There is one quirk with the profiles, and that is when you try to load them from the CLI. In some instances, the colors and effects are not applied correctly. It works fine from the UI, but not the command line. Therefore, when you try to automate OpenRGB, you are better served by specifying the full list via parameters. I will not provide a detailed description of how it works but rather describe my use-case and how I solved it, hoping it is a good starting point.

Command Line Interface

To print the help, type openrgb --help. From there you will find all you need.

My first step was to get a list of the devices OpenRGB detected.

$ openrgb --list-devices

Attempting to connect to local OpenRGB server.
Connection attempt failed
Local OpenRGB server unavailable, running standalone.
0: ASUS Aura DRAM
  Type:           DRAM
  Description:    ASUS Aura SMBus Device
  Version:        DIMM_LED-0103
  Location:       I2C: /dev/i2c-0, address 0x72
  Modes: Direct Off [Static] Breathing Flashing 'Spectrum Cycle' Rainbow 'Chase Fade' Chase 'Random Flicker'
  Zones: Unknown
  LEDs: 'Unknown LED 1' 'Unknown LED 2' 'Unknown LED 3' 'Unknown LED 4' 'Unknown LED 5'

1: ASUS Aura DRAM
  Type:           DRAM
  Description:    ASUS Aura SMBus Device
  Version:        DIMM_LED-0103
  Location:       I2C: /dev/i2c-0, address 0x73
  Modes: Direct Off [Static] Breathing Flashing 'Spectrum Cycle' Rainbow 'Chase Fade' Chase 'Random Flicker'
  Zones: Unknown
  LEDs: 'Unknown LED 1' 'Unknown LED 2' 'Unknown LED 3' 'Unknown LED 4' 'Unknown LED 5'

2: MSI GeForce GTX 1660 Super Gaming X 6G
  Type:           GPU
  Description:    MSI GPU Device
  Location:       I2C: /dev/i2c-3, address 0x68
  Modes: Off Rainbow [Static] Raindrop Magic Patrolling Streaming Lightning Wave Meteor Stack Rhythm Flowing Whirling Twisting Laminating Fadein Breathing Flashing Doubleflashing
  Zones: GPU
  LEDs: 'Color 1' 'Color 2' 'Color 3'

Now that I know which components are assigned which "id", I created the following command line. For each device (-d), I set the desired effect (-m Static) and the colors for the individual LED(s) (-c ff0000,ff0000,ff3c00,ff0000,ff0000).

openrgb \ 
  -d 0 -m Static -c ff0000,ff0000,ff3c00,ff0000,ff0000 \
  -d 1 -m Static -c ff0000,ff0000,ff3c00,ff0000,ff0000 \ 
  -d 2 -m Static -c "ff1400"

I want my RAM modules to be red on the outside with an orange accent in the middle. Therefore, I specified colors for all available LEDs. The graphics card on the other hand only accepts a single color from OpenRGB, despite its three LEDs. Thus, I only set one color, an orange hue that approximates the RAM sticks’ accent color.

I know, red accents are a gamer cliché. But it gives me ten more fps, and with my slow 1660 Super at 1440p, I need every advantage I can get.

Run on Linux Boot

First, I created a small bash script and placed it in /opt/set-rgb.sh. You can, of course, place it wherever you want.

#!/bin/bash 
openrgb -d 0 -m Static -c ff0000,ff0000,ff3c00,ff0000,ff0000 -d 1 -m Static -c ff0000,ff0000,ff3c00,ff0000,ff0000 -d 2 -m Static -c "ff1400"

It is the same command as in the previous section. I wanted to show the full file because the very first line is essential. At first, my script only contained the openrgb command line, and it did not want to work. It threw some obscure error. After a bit of digging, I palmed my face and added the shebang #!/bin/bash.

Next, you need to create a service file (assuming systemd) in /etc/systemd/system/, e.g. /etc/systemd/system/openrgb.service.

In my case, it contains the following.

[Unit]
After=network.service

[Service]
ExecStart=/opt/set-rgb.sh

[Install]
WantedBy=default.target

Lastly, reload the services and enable your custom openrgb.service.

sudo systemctl daemon-reload 
sudo systemctl enable openrgb.service

To try it out, mess up the colors, reboot, and enjoy the show. I have also tried to use cron or run a script through .bashrc and .bash_login. The only reliable solution for me was systemd.

Run on Windows Boot

The OpenRGB Wiki contains an entry in the FAQ on that topic. My solution was to create a scheduled task using Windows’ Task Scheduler. The following images show the most important settings. I had to play around to find the right combination of checkboxes to make it work. Remember, for my hardware, OpenRGB requires admin privileges.

Under "Actions", locate the OpenRGB.exe file and specify the command line in the respective input field. That should do the trick.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.