An open-source Linux interface for iCUE LINK Hub and other Corsair AIOs, Hubs. Manage RGB lighting, fan speeds, system metrics, as well as keyboards, mice, and headsets via a web dashboard.
Available in other languages: Portuguese (Brazil)
- Web-based UI accessible at
http://localhost:27003 - Control AIO coolers, fans, hubs, pumps, LCDs and RGB lighting
- Manage keyboards, mice and headsets
- Support for DDR4 and DDR5 memory
- Custom fan profiles, temperature sensors and RGB editor
- If you need system tray menu - https://github.com/jurkovic-nikola/openlinkhub-tray
- Supported device list
- SCUF Controller Audio Config
- KDE System Monitor Sensor Face
- Memory DDR4 / DDR5
- Motherboard PWM
- OpenRGB Integration
- This project was created out of necessity to control fans and pumps on workstations after switching everything to Linux.
- I take no responsibility for this code at all. Use this at your own risk.
- Most of the devices are actually tested on live hardware.
- Take care and have fun!
- This project is not an official Corsair product.
- Download either .deb or .rpm package from the latest Release, depending on your Linux distribution
- Open a terminal
- Navigate to the folder where the package is downloaded
# Debian-Based (deb) $ sudo apt install ./OpenLinkHub_?.?.?_amd64.deb # RPM-based (rpm) $ sudo dnf install ./OpenLinkHub-?.?.?-1.x86_64.rpm$ sudo add-apt-repository ppa:jurkovic-nikola/openlinkhub $ sudo apt update $ sudo apt-get install openlinkhub$ sudo dnf copr enable jurkovic-nikola/OpenLinkHub $ sudo dnf install OpenLinkHub- libudev-dev
- usbutils
- libpipewire-dev
- pkg-config
- go 1.23.8 - https://go.dev/dl/
# Required packages (deb) $ sudo apt-get install libudev-dev $ sudo apt-get install usbutils $ sudo apt-get install libpipewire-0.3-dev $ sudo apt-get install pkg-config # Required packages (rpm) $ sudo dnf install libudev-devel $ sudo dnf install usbutils $ sudo dnf install pipewire-devel $ sudo dnf install pkg-configOr use the provided devcontainer in VScode. This is useful for immutable distributions.
$ git clone https://github.com/jurkovic-nikola/OpenLinkHub.git $ cd OpenLinkHub/ $ go build . $ chmod +x install.sh $ sudo ./install.sh# Download latest build from https://github.com/jurkovic-nikola/OpenLinkHub/releases/latest $ wget "https://github.com/jurkovic-nikola/OpenLinkHub/releases/latest/download/OpenLinkHub_$(curl -s https://api.github.com/repos/jurkovic-nikola/OpenLinkHub/releases/latest | jq -r '.tag_name')_amd64.tar.gz" $ tar xf OpenLinkHub_?.?.?_amd64.tar.gz $ cd /home/$USER/OpenLinkHub/ $ chmod +x install.sh $ sudo ./install.sh# Do not install RPM or DEB packages on immutable distributions, they will not work. # This same procedure may be followed to update an existing installation. # Download the latest tar.gz from the Release page, or use the following command to download the latest release. $ wget "https://github.com/jurkovic-nikola/OpenLinkHub/releases/latest/download/OpenLinkHub_$(curl -s https://api.github.com/repos/jurkovic-nikola/OpenLinkHub/releases/latest | jq -r '.tag_name')_amd64.tar.gz" # Extract the package to your home directory $ tar xf OpenLinkHub_?.?.?_amd64.tar.gz -C /home/$USER/ # Go to the extract folder $ cd /home/$USER/OpenLinkHub # Make install-user-space.sh executable $ chmod +x install-user-space.sh # Run install-user-space.sh. Enter your password for sudo when asked to copy 99-openlinkhub.rules file $ ./install-user-space.sh # Restart $ systemctl reboot # Check if service is running $ systemctl status --user OpenLinkHub.servicesudo systemctl start OpenLinkHub.service xdg-open http://127.0.0.1:27003/opt/OpenLinkHub/config.json
{ "debug": false, "listenPort": 27003, "listenAddress": "127.0.0.1", "cpuSensorChip": "k10temp", "manual": false, "frontend": true, "metrics": true, "resumeDelay": 15000, "memory": false, "memorySmBus": "i2c-0", "memoryType": 4, "exclude": [], "decodeMemorySku": true, "memorySku": "", "logFile": "", "logLevel": "info", "enhancementKits": [], "temperatureOffset": 0, "amdGpuIndex": 0, "amdsmiPath": "", "cpuTempFile": "", "graphProfiles": false, "ramTempViaHwmon": false, "nvidiaGpuIndex": [0], "defaultNvidiaGPU": 0, "enableGamepad": true, "enableMotherboard": false, "motherboardBiosOnExit": false }- listenPort: HTTP server port.
- listenAddress: Address for HTTP server to listen on.
- cpuSensorChip: CPU sensor chip for temperature.
k10temporzenpowerfor AMD andcoretempfor Intel - manual: set to true if you want to use your own UI for device control. Setting this to true will disable temperature monitoring and automatic device speed adjustments.
- frontend: set to false if you do not need the WebUI console, and you are making your own UI app.
- metrics: enable or disable Prometheus metrics
- resumeDelay: amount of time in milliseconds for the program to reinitialize all devices after sleep / resume
- memory: Enable overview / control over the memory
- memorySmBus: i2c smbus sensor id
- memoryType: 4 for DDR4, 5 for DDR5
- exclude: list of device IDs in uint16 format to exclude from program control
- decodeMemorySku: set to false to manually define
memorySkuvalue. - memorySku: Memory part number, e.g. (CMT64GX5M2B5600Z40)
- You can find the memory part number by running the following command:
sudo dmidecode -t memory | grep 'Part Number' - logFile: custom location for logging. Default is empty.
- Defining
-for logFile will send all logs to standard console output. - If you change the location of logging, make sure the application username has permission to write to that folder.
- Defining
- logLevel: log level to log in console or file.
- enhancementKits: DDR4/DDR5 Light Enhancement Kits addresses.
- If your kit is installed in the first and third slot, the value would be:
"enhancementKits": [80,82],. This value is a byte value converted from hexadecimal output ini2cdetect- When kits are used, you need to set
decodeMemorySkutofalseand definememorySku
- When kits are used, you need to set
- temperatureOffset: Temperature offset for AMD Threadripper CPUs
- amdGpuIndex: GPU device index. You can find your GPU index via
amd-smi static --asic --json - amdsmiPath: Manual path to amd-smi binary (not recommended). A better way is to define
amd-smipath in$PATHvariable if missing. - cpuTempFile: custom hwmon temperature input file, e.g. tempX_input. Use in combination with
cpuSensorChip. - graphProfiles: Setting this value to
truewill enable graph-based temperature profiles on/temperatureendpoint and enable temperature interpolation. - ramTempViaHwmon: Switch to true if you want to monitor RAM temperature via the hwmon system. With this option, you don't have to unload modules to get the temperature. (Require 6.11+ kernel)
- nvidiaGpuIndex: NVIDIA multi-gpu setup.
- defaultNvidiaGPU: default index of NVIDIA GPU, default is 0.
- If you use vfio-pci/pass-through, you have to set it to -1 to avoid conflicts with NVIDIA modules.
- enableGamepad: Enable or disable Virtual Gamepad used for SCUF controllers.
- enableMotherboard: Enable control of motherboard PWM headers.
- motherboardBiosOnExit: Switch PWM headers to BIOS mode when program exits.
The web UI supports installation as a progressive web app (PWA). With a supported browser, this allows the UI to appear as a standalone application. Chromium-based browsers support PWAs; Firefox currently does not. GNOME 'Web,' also known as 'Epiphany', is a good option for PWAs on GNOME systems.
# Stop service sudo systemctl stop OpenLinkHub.service # Remove application directory sudo rm -rf /opt/OpenLinkHub/ # Remove systemd file (file location can be found by running sudo systemctl status OpenLinkHub.service) sudo rm /etc/systemd/system/OpenLinkHub.service # or sudo rm /usr/lib/systemd/system/OpenLinkHub.service # Reload systemd sudo systemctl daemon-reload # Remove udev rules sudo rm -f /etc/udev/rules.d/99-openlinkhub.rules sudo rm -f /etc/udev/rules.d/98-corsair-memory.rules # Reload udev sudo udevadm control --reload-rules sudo udevadm triggerAs an alternative, OpenLinkHub can be run in Docker, using the Dockerfile in this repository to build it locally. A configuration file has to be mounted to /opt/OpenLinkHub/config.json
$ docker build . -t openlinkhub $ # To build a specific version, you can use the GIT_TAG build argument $ docker build --build-arg GIT_TAG=0.1.3-beta -t openlinkhub . $ docker run --privileged openlinkhub # For WebUI access, networking is required $ docker run --network host --privileged openlinkhub- LCD images / animations are located in
/opt/OpenLinkHub/database/lcd/images/
- Device Dashboard is accessible by browser via the link
http://127.0.0.1:27003/ - Device Dashboard allows you to control your devices.
- RGB configuration is located at
database/rgb/your-device-serial.jsonfile - RGB can be configured via the RGB Editor in the Dashboard
- OpenLinkHub ships with a built-in HTTP server for device overview and control.
- Documentation is available at API Page
