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).
- Reads hardware CPU temperatures via
psutilnatively (k10tempfor AMD Ryzen, etc). - Reads GPU temp and utilization via
pynvml(NVIDIA) or standard Linux sensors. - Grabs Gigabyte /
it8686specific 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
systemduser service.
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)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.
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):
- 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
- 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 ..
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.shBy 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.
Ensure your virtual environment is properly configured, and then run the installer script:
chmod +x install_service.sh
./install_service.shThis 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.
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
main.py: The entry point and main polling loop managing reconnects.sensor_tracker.py: Interfaces with Linux kernelhwmonviapsutiland implements sensor caching.lcd_controller.py: Sends bulk interrupts directly to the Thermaltake LCD viapyusbwithout kernel drivers.