https://blog.ktz.me/a-usb-fan-controller-that-now-works-under-linux/ ktz. * About * Technical * Travel A USB Fan Controller that now works under Linux * * * * * technical A USB Fan Controller that now works under Linux Relying on the built-in motherboard headers on server grade motherboards to reliably control fans with Linux has been a crapshoot since forever. I'm pleased to report that last summer the Corsair Commander Pro received native Linux kernel driver support in the 5.9 release. * Alex Kretzschmar Alex Kretzschmar Read more posts by this author. Alex Kretzschmar Alex Kretzschmar 7 Apr 2021 * 3 min read A USB Fan Controller that now works under Linux Relying on the built-in motherboard headers on server grade motherboards to reliably control fans with Linux has been a crapshoot since forever. I can tune out a constant white noise pretty easily but the one thing that is unacceptable are fan notes that change wildly or oscillate. Well my friends, I'm pleased to report that last summer the Corsair Commander Pro received native Linux kernel driver support in the 5.9 release. This device used to be Windows only so it was a really lovely surprise to find that this driver shipped last year. BIG thanks to the developer Marius Zachmann who made this happen. This sleek black box can be had for $40-75, I was fortunate enough to get mine for $40 because it seemed like a good idea before I realised it didn't support Linux and had to run a Windows VM for control. That changes today! [image] Configuration of this device is quite straightforward but is a little time consuming. You will need a kernel of at least 5.9 or later. I created a tiny Arch VM to run automatically on boot under ESXI and passed the USB device through to the guest for this purpose which uses 256mb of RAM. Configuration First you'll need to connect the Commander Pro to a USB header on your motherboard, hook up some fans and at least one temperature probe. Next, ensure that fancontrol and lm_sensors are installed (this varies per distro so no instructions here). Then run: sensors-detect Follow the prompts and you should see the fan speeds and temp probe readings like this: [[email protected] ~]# sensors corsaircpro-hid-3-2 Adapter: HID adapter in0: 12.01 V in1: 4.90 V in2: 3.33 V fan1 4pin: 898 RPM fan2 4pin: 924 RPM fan3 4pin: 1062 RPM fan4 4pin: 1075 RPM fan5 4pin: 1013 RPM temp1: +26.4degC Now it's time to run pwmconfig and follow the prompts on the screen to test the various PWM values and how they interact with the RPM values of your fans. That process will look something like this: [image-1] At the end of the pwmconfig wizard you'll be asked to set which temp probe correlates to which fan. You might decide it's easier to configure these values later and hit the "just save" button. Once you have a working config (my full config is posted at the end of this article), you can test things out by running watch sensors in one terminal window and then fancontrol in another. If things aren't working quite right make changes to /etc/fancontrol and then repeat running fancontrol and so on. If you're happy with the outcome then enable the fancontrol service with: systemctl enable fancontrol --now There you have it. Native fan control via a USB controller on Linux. My /etc/fancontrol for reference The snippet below is my tweaked /etc/fancontrol file which took about 10 minutes of tweaking values to get everything just where I wanted. Hopefully it's a useful reference for you, fancontrol is quite helpful with errors if you screw up some values so tweak away! [[email protected] ~]# cat /etc/fancontrol # Configuration file generated by pwmconfig, changes will be lost INTERVAL=2 DEVPATH=hwmon1=devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/2-2.1/2-2.1:1.0/0003:1B1C:0C10.0002 DEVNAME=hwmon1=corsaircpro FCTEMPS=hwmon1/pwm2=hwmon1/temp1_input hwmon1/pwm1=hwmon1/temp1_input hwmon1/pwm3=hwmon1/temp1_input hwmon1/pwm4=hwmon1/temp1_input hwmon1/pwm5=hwmon1/temp1_input FCFANS=hwmon1/pwm2=hwmon1/fan2_input hwmon1/pwm1=hwmon1/fan1_input hwmon1/pwm3=hwmon1/fan3_input hwmon1/pwm4=hwmon1/fan4_input hwmon1/pwm5=hwmon1/fan5_input MINTEMP=hwmon1/pwm2=50 hwmon1/pwm1=50 hwmon1/pwm3=50 hwmon1/pwm4=50 hwmon1/pwm5=50 MAXTEMP=hwmon1/pwm2=60 hwmon1/pwm1=60 hwmon1/pwm3=60 hwmon1/pwm4=60 hwmon1/pwm5=60 MINSTART=hwmon1/pwm2=24 hwmon1/pwm1=24 hwmon1/pwm3=16 hwmon1/pwm4=16 hwmon1/pwm5=16 MINSTOP=hwmon1/pwm2=24 hwmon1/pwm1=24 hwmon1/pwm3=115 hwmon1/pwm4=115 hwmon1/pwm5=165 MINPWM=hwmon1/pwm2=24 hwmon1/pwm1=24 hwmon1/pwm3=115 hwmon1/pwm4=115 hwmon1/pwm5=165 MAXPWM=hwmon1/pwm2=195 hwmon1/pwm1=165 hwmon1/pwm3=185 hwmon1/pwm4=185 hwmon1/pwm5=185 More in technical * Deploying mkdocs using DroneCI and Gitea 7 Sep 2021 - 6 min read * Access a Synology NAS with Traefik on DSM7 1 Sep 2021 - 4 min read * Punching through tricky NAT with Nebula Mesh VPN and OPNSense 30 Aug 2021 - 2 min read See all 47 posts - Building my "Ultimate Mega Desk" (Part 2) - The Tinkerspace 1.0 maker Building my "Ultimate Mega Desk" (Part 2) - The Tinkerspace 1.0 I needed a space where I could explode an entire computer, or 3d printer, or some other overly complex piece of equipment without getting in the way of the rest of the house. * Alex Kretzschmar Alex Kretzschmar Alex Kretzschmar 4 May 2021 * 8 min read Why I stopped using Intel GVT-g on Proxmox with Quick Sync technical Why I stopped using Intel GVT-g on Proxmox with Quick Sync The promise of GVT-g technically was very high. One box to rule them all. However in practice, it just didn't live up to expectations. * Alex Kretzschmar Alex Kretzschmar Alex Kretzschmar 23 Feb 2021 * 4 min read ktz. (c) 2021 Latest Posts Ghost