thermalright-lcd-control
A Linux application for controlling Thermalright LCD displays with an intuitive graphical interface.
git clone https://github.com/rejeb/thermalright-lcd-control.gitrejeb/thermalright-lcd-controlThermalright LCD Control
A Linux application for controlling Thermalright LCD displays with an intuitive graphical interface.
Overview
Thermalright LCD Control provides an easy-to-use interface for managing your Thermalright LCD display on Linux systems.
Since version 2.0, the application is a single desktop app: the GUI embeds the device controller, so there is no separate root service anymore. Device access is granted through udev rules, and the app can start automatically with your session (minimized to the system tray).
I performed reverse engineering on the Thermalright Windows application to understand its internal mechanisms.
During my analysis, I identified four different USB VID:PID combinations handled by the Windows application, all sharing the same interaction logic.
Since I have access only to the Frozen Warframe 420 BLACK ARGB, my testing was limited exclusively to this specific device.
Also, this application implements reading metrics from Amd, Nvidia, and Intel GPU. My testing was limited to Nvidia GPU.
Feel free to contribute to this project and let me know if the application is working with other devices.
For backgrounds, i have included all media formats supported by the Windows application and added the option to select a collection of images to cycle through on the display.
Features
- 🖥️ User-friendly GUI - Modern native Qt interface with light/dark theme
- ⚙️ Single-app architecture - The device controller runs inside the app; no root service needed (udev rules grant device access)
- 🔌 Multi-device support - Several displays can be connected and driven at the same time, each with its own configuration; a per-device tab bar lets you switch between them, and edits are saved automatically before switching
- 🔎 Automatic device detection - Connected devices are detected on the fly: plug or unplug a display and it appears or disappears in the GUI without restarting the app (its configuration is kept for when it comes back)
- ➕ Add devices without code - Register a new device from the GUI (or a small YAML file) using the generic, data-driven driver: pick transport, encoding and header format — no Python required. Known devices pre-fill the form automatically
- ⚡ Fast device switching - Cached thumbnails and per-device render engines make switching between devices and themes near-instant
- 🎨 Theme support - Customizable display themes with bundled presets, per-resolution backgrounds and foregrounds (the matching foreground is auto-selected for your resolution)
- 🖼️ Rich media backgrounds - Images, animated GIFs and videos; imported media is automatically resized to your screen resolution, and bundled video backgrounds are downloaded on demand
- 🧩 Widget editor - Drag-and-drop metric, clock, date and text widgets with per-widget font, size, bold/italic, color and precision (multi-selection supported)
- 🔄 Display rotation - 0°/90°/180°/270° orientation with rotation-aware backgrounds and foregrounds
- 📊 Hardware & OS metrics - all displayable as widgets, grouped by device:
- CPU: temperature, usage, frequency
- GPU: temperature, usage, frequency (AMD, Nvidia and Intel)
- Memory: RAM usage, RAM used/available (GB), swap usage
- Disk: filesystem usage, read/write throughput (MB/s)
- Network: download/upload throughput (MB/s)
- System: uptime, load average, process count
- 🔤 Font management - Use any installed system font (plus bundled fallbacks) in your themes
- 💡 RGB LED controller support - Drives Thermalright digital LED coolers (the
0416:8001controller), auto-detected over USB with the hardware layout identified via the device handshake. A dedicated, kind-aware control panel provides:- global colour (colour picker, RGB, brightness, presets) and On/Off
- six animation modes: static, breathing, colourful, rainbow, temperature-linked, load-linked
- per-zone colour/brightness/on-off for multi-zone models (PA120, LF10), with an optional zone-sync carousel
- CPU/GPU sensor linkage and a diagnostic test mode
- a live preview that renders the real per-model layout — including the actual digit/clock readout for the digital segment displays (temperature, load, memory/disk stats, clock)
- 12 cooler layouts supported: AX120, PA120, AK120, LC1, LF8, LF10, LF11, LF12, LF13, LF15, CZ1, LC2
- 📋 System integration - Tray icon, session autostart (starts minimized), desktop notifications; rendering pauses while the window is hidden to save CPU
Supported devices
LCD displays
| VID:PID | Chip / Family | Thermalright product(s) | Protocol |
|---|---|---|---|
| 0402:3922 | — | Frozen Warframe 420 BLACK ARGB (tested) | SCSI BOT |
| 0416:5302 | Winbond USBDISPLAY | Frozen Magic 240 / 360 (HID variants) | HID type 2 |
| 0416:5406 | Winbond LCD (SCSI) | Frozen Warframe / Magic (SCSI variant) | SCSI |
| 0416:5408 | Trofeo Vision (LY) | **Trofeo Vision | LY bulk |
| 0416:5409 | Trofeo Vision (LY1) | **Trofeo Vision (LY1 firmware) | LY bulk |
| 0418:5303 | ALi Corp LCD (HID type 3) | Frozen Magic 360 SCENIC / AIO 480 variants | HID type 3 |
| 0418:5304 | ALi Corp LCD (HID type 3) | Frozen Magic 360 SCENIC / AIO 480 variants | HID type 3 |
| 87AD:70DB | ChiZhu Tech GrandVision family | AIO variants with 320x320 or 480x480 screen | |
| 87CD:70DB | ChiZhu Tech (variant) | AIO variants (alternate firmware) | USB Bulk |
If you own one of the other devices, please test and report — see Contributing.
If your device is not in the list, you can most likely add it yourself without writing any code, thanks to the generic device support: see the Add new device section.
RGB LED controllers
| VID:PID | Device | Supported cooler layouts |
|---|---|---|
| 0416:8001 | Thermalright digital LED controller | AX120, PA120, AK120, LC1, LF8, LF10, LF11, LF12, LF13, LF15, CZ1, LC2 |
The LED controller is auto-detected over USB; the specific cooler layout is resolved at connection time from the device handshake. A plugged-in LED controller appears as its own device tab with the dedicated LED control panel.
Note: LED support was developed against the reference protocol and firmware layouts. If you own one of these coolers, testing and feedback are very welcome — see Contributing.
Installation
Download Packages
Download the appropriate package for your Linux distribution from the Releases page:
.targ.gz- For any distribution
Installation
-
Check for required dependencies: /!\ Make sure you have these required dependencies installed:
- python3
- python3-pip
- python3-venv
- libhidapi-* or hidapi depending on your distribution
-
Download the
.tar.gzpackage:wget https://github.com/rejeb/thermalright-lcd-control/releases/download/2.0.0/thermalright-lcd-control-2.0.0.tar.gz -P /tmp/
-
Untar the archive file:
cd /tmp tar -xvf thermalright-lcd-control-2.0.0.tar.gz
-
Install application:
cd /thermalright-lcd-control sudo bash install.sh
That's it! The application is now installed. You can see the default theme displayed on your Thermalright LCD device.
Troubleshooting
If nothing is displayed on your device:
- Make sure the application is running (check the system tray)
- Check the application logs located in
~/.local/state/thermalright-lcd-control/(also reachable from the tray menu via "Open Logs") - Make sure the udev rules were installed (
/etc/udev/rules.d/99-thermalright.rules) and re-plug the device
If the device is detected but the display stays black, the frame header is probably not correct for your device. If an image is displayed but looks blurry or scrambled, the image encoding does not match your device. In both cases, see the Add new device section: with the generic device support you can adjust the header and encoding from the GUI without touching any code.
Usage
Launch the Application
- From Applications Menu: Search for "Thermalright LCD Control" in your application launcher
- From Terminal: Run
thermalright-lcd-control
Autostart and system tray
The application starts automatically with your session (minimized to the system tray) and keeps driving the display in the background. Closing the window minimizes to the tray instead of quitting; use the tray menu to reopen the window, open the logs or quit the application.
While the window is hidden, the on-screen preview is paused to keep CPU usage minimal — the device itself keeps updating.
System Requirements
- Operating System: Ubuntu 20.04+ / Debian 11+ / Other modern Linux distributions
- Python: 3.8 or higher (automatically managed)
- Desktop Environment: Any modern Linux desktop (GNOME, KDE, XFCE, etc.)
- Hardware: Compatible Thermalright LCD device
Add new device
There are two ways to add support for a new device:
- Generic device (recommended, no code): describe the device (transport, image encoding, frame header) either
directly from the GUI with the "+" button in the header, or in a small
device_<id>.yamlfile. The data-driven generic driver does the rest. - Native device (Python code): implement a dedicated device class, for protocols the generic driver cannot express.
In HOWTO.md I detail all the steps I went through to find out how my device works (USB capture and protocol reverse engineering), and how to add a new device using either approach.
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Author
REJEB BEN REJEB - benrejebrejeb@gmail.com
🤝 Contributing
Contributions are welcome! To contribute:
- Fork the project
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -am 'Add my feature') - Push to your branch (
git push origin feature/my-feature) - Create a Pull Request
more like this
gns3theme
Custom color themes for GNS3 GUI. Built-in schemes, custom JSON themes, device symbols. Supports Linux and macOS.