Skip to content

riberomr/tt-lcd-controller

Repository files navigation

Thermaltake LA240-S ARGB Sync AIO Liquid Cooler LCD Controller (Linux)

Caution

DISCLAIMER: This project is an unofficial, community-made tool. It is not affiliated with, authorized, maintained, sponsored, or endorsed by Thermaltake or any of its affiliates. Use it at your own risk.

A lightweight Linux driver and Python bridge for Thermaltake LA240-S ARGB Sync AIO Liquid Cooler LCD Controller. This script reverse engineers the USB protocol used by the native Windows application to communicate with the LCD screen, allowing it to natively run on Linux with minimal resource usage (~1% CPU, 30MB RAM).

Features

  • Reads hardware CPU temperatures via psutil natively (k10temp for AMD Ryzen, etc).
  • Reads GPU temp and utilization via pynvml (NVIDIA) or standard Linux sensors.
  • Grabs Gigabyte / it8686 specific fan and pump RPMs.
  • Syncs system time and date for the internal LCD clock.
  • Designed with extreme hardware polling efficiency (5Hz screen refresh, 1Hz sensor polling).
  • Runs entirely in the background as a systemd user service.

Requirements

You must have Python 3 and a venv created to run this. The program expects a virtual environment named venv in the program's root directory.

python3 -m venv venv
source venv/bin/activate
pip install pyusb psutil
# Optional: pip install pynvml (for NVIDIA GPU monitoring)

Special Hardware Configuration (IT87 Driver)

This project includes a helper script (load_it87.sh) specifically designed to load the it87 driver with the ignore_resource_conflict=1 parameter. This is necessary for some Gigabyte motherboards (like the AORUS B450 series) to report fan RPM correctly in Linux.

Setting up the IT87 Driver (with DKMS)

For modern kernels, you should use DKMS to ensure the custom driver remains active after kernel updates (optional, for motherboards that do not work out of the box):

  1. Install dependencies:
    # On openSUSE (tested):
    sudo zypper install dkms kernel-default-devel
    
    # On Ubuntu / Debian / Pop!_OS:
    sudo apt install dkms linux-headers-$(uname -r)
    
    # On Fedora:
    sudo dnf install dkms kernel-devel
    
    # On Arch Linux:
    sudo pacman -S dkms linux-headers
  2. Download and Build with DKMS: This step is necessary if your motherboard does not natively report fan RPMs. Clone the driver repository and install it:
    git clone https://github.com/groeck/it87.git
    cd it87
    sudo make dkms
    cd ..

Using the Helper Script

The project includes a helper script (load_it87.sh) that correctly flags the driver for Gigabyte it8686 chips (using ignore_resource_conflict=1 force_id=0x8686).

Ensure it is executable:

chmod +x load_it87.sh

Enabling the IT87 Helper

By default, the script attempts to detect if you are running on an AORUS B450 motherboard. You can explicitly enable or disable this behavior using the TT_LOAD_IT87 environment variable in your .env file:

  • export TT_LOAD_IT87=true: Force the helper to run.
  • export TT_LOAD_IT87=false: Disable the helper (default for non-AORUS B450 boards).

If you have a different motherboard that requires special drivers, you should modify load_it87.sh and the recruitment logic in sensor_tracker.py.

Installation

Ensure your virtual environment is properly configured, and then run the installer script:

chmod +x install_service.sh
./install_service.sh

This will automatically create a dynamic systemd user service configured to your specific user path, meaning you can place this repository anywhere in your home folder. The service automatically starts up upon login.

Commands & Status

Once installed, you can monitor the service with standard systemctl user commands:

  • Status: systemctl --user status tt-lcd.service
  • Follow Logs: journalctl --user -u tt-lcd.service -f
  • Restart: systemctl --user restart tt-lcd.service
  • Stop: systemctl --user stop tt-lcd.service

Architecture

  • main.py: The entry point and main polling loop managing reconnects.
  • sensor_tracker.py: Interfaces with Linux kernel hwmon via psutil and implements sensor caching.
  • lcd_controller.py: Sends bulk interrupts directly to the Thermaltake LCD via pyusb without kernel drivers.

About

Thermaltake LA240-S ARGB Sync AIO Liquid Cooler LCD controller for linux

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors