Feature Request: Native Fan Control in TrueNAS SCALE

Problem/Justification
TrueNAS SCALE currently lacks native fan control via its UI or CLI. Users must rely on external hypervisors (e.g., Proxmox) or manually configure Docker containers to run lm-sensors and fancontrol. This approach is fragile, non-persistent across updates, and highly technical, making it inaccessible to most users. In my case, I (rockerplaner83) had to identify each PWM channel manually, map them to the connected fans, test with pwmconfig, and mount the configuration files through Docker to apply a working setup. Even then, any update or device path change can break it.


Impact
Integrating native fan control into TrueNAS SCALE would significantly enhance thermal management for all users. Benefits include:

  • Improved system stability and longevity through dynamic temperature-based fan control.
  • Quieter systems that don’t unnecessarily spin fans at full speed.
  • Better user experience by removing the need for advanced Linux or Docker knowledge.
  • Reduced power usage by adjusting fans to only spin up when needed.
  • Eliminates the need to move to external platforms like Proxmox to manage fan speeds.

There are no significant downsides; the required packages (lm-sensors, fancontrol) are lightweight, stable, and already compatible with Debian-based systems, such as SCALE.


User Story
I’m rockerplaner83, and I’ve set up a hybrid workstation/NAS on TrueNAS SCALE with a mix of storage and compute workloads. My system includes 18TB HDDs, SSD metadata drives, NVMe cache, and water cooling. I manually created a Docker container to manage fan speeds, mounted sensor config files, and tested each fan using pwmconfig. My setup includes:

  • PWM1: front intake fans (3+1 via splitter)
  • PWM4: rear exhaust fans (via splitter)
  • PWM5: 40mm HBA fan
  • CPU fan headers: radiator fans and pump

The process of mapping and controlling these was tedious and fragile. Native support in SCALE would have let me do all of this through a simple UI, with persistent, OS-managed control. Imagine navigating to System Settings > Fan Control, seeing detected sensors and PWM channels, and dragging fan curve sliders — no containers, no shell scripts, no hacks.

This feature would be a significant quality-of-life improvement for both power users and hardware enthusiasts.

1 Like

Fan control via IPMI wasn’t working for you? I thought there was a script for that.

This does not scream “Corporate Users”.

I’m just being honest here, I think the only way you will see something like this implemented is if you create the GUI interface and support code yourself, then iXsystems can evaluate it and implement it. But I’d like to be proven wrong once in a while. :+1:

I like this idea, but I have to agree with joeschmuck: it’s very hard to imagine iX implementing this unless you or someone else does all the work for them. And even then I have huge doubts; they take an eternity already just to respond to these feature requests, no matter how trivial some are.

In the meantime, would you be willing to share the code for your current solution that uses docker? I’d love to implement this on my system too. I currently have fan control just through BIOS, but it’s really not optimal at all, since it just monitors the CPU temp and throttles all the fans in response. My system has separate fans for the HDDs and the motherboard, so it’d be nice to control them separately based on the actual temperatures of each.

While I am an avid user of fanscript, I doubt iXsystems would EVER even consider touching it. Too much can go wrong, and usually the fans are chosen by an OEM to be performant under the most dire circumstances while still maintaining spec conditions for CPU and disks alike.

Where fanscript shines is systems like mine that are largely idle and ridiculously over-provisioned with fans. That in turn keeps the HDDs happy but make the system louder than it needs to be (diminishing returns and all that). Fanscript brings the noise levels down and maintains my HDDs at a steady 30*C.

But should fan script fail in some fashion where the defaultIPMI HI setting does not take over? That could get mighty expensive - in real terms, customer goodwill, or both. So no, I don’t think they’re going to go there.

1 Like

PMI would be ideal, but not everyone running SCALE is on server-grade gear. In my case, the system runs on a Z690 board with a 13700K processor inside a 4U rack, and the other Z690 system is housed in a Jonsbo case, running Proxmox. So, fan control via IPMI isn’t an option. Sure, I could hack together lm-sensors and fancontrol scripts—and I have—but they’re fragile, break on update, and aren’t something I’d hand off to another household member or casual admin.

This feature request isn’t about eye candy; it’s about usability and stability for mixed workloads (ZFS with SLOG/L2ARC, Docker, VMs, Storj node) that push thermals. A UI for native fan curves, tied to sensor data SCALE already sees, would be a quality-of-life upgrade for power users who don’t have or want IPMI.

I totally understand that GUI code has to come from somewhere; I’m just raising the use case for consideration by the team. Hopefully, more users chime in to show there’s interest.

2 Likes

Agree—it’s frustrating how slow the process can be, even for well-scoped requests. I’m not holding my breath for native support, but if enough of us show demand (and ideally share working solutions), maybe we can shift the tide a bit.

As for my setup, I’m not running a container for fan control yet, but I did get lm-sensors, fancontrol, and `mbpfan’ working on one of my SCALE systems. It’s a bit quirky because every update risks breaking the service files, but it does allow for individual PWM curve control based on detected temperatures, including HDDs and chipset sensors. I can post the service/unit files and config I used if you’re interested.

Long-term, I’m with the idea of bundling it into a Docker container or maybe even writing a Python service that reads lm-sensors and maps it to fan output via pwmconfig—Home Assistant’s control, but for SCALE.

If you’re experimenting, I can clean up my current setup and share it here.

2 Likes

Fair points. I think you’ve nailed the core reason iX won’t touch something like this—it introduces risk that’s hard to sandbox or validate across all the quirky hardware folks are using with TrueNAS.

That said, I think there’s room for a middle ground. The current BIOS/IPMI setups are either too rigid or opaque, and while fanscript and similar workarounds help, they’re fragile and prone to updates. What I’d love to see is an opt-in module—disabled by default—targeted at advanced users who understand the risks. Similar to how TrueNAS allows you to set tunables or modify sysctl values if you know what you’re doing.

For individuals like us who run overcooled boxes or mixed workloads, native sensor mapping to PWM channels—even through CLI or middleware configuration—would go a long way. However, it’ll probably remain a DIY project unless someone develops it into an app.

If anyone wants, I’m happy to help document or containerize what’s worked for me so far.

1 Like

Glad you said that because it is unfortunately true. If you want something done, do it yourself if you can.

1 Like

Just wrapped up a small project i called TrueFan — a lightweight web app for controlling system fans. Built with Flask and running in Docker, it uses lm-sensors to monitor temps and fan speeds, auto-refreshes in real time, and lets you switch between custom cooling profiles. There’s also quick-access reboot and shutdown buttons for convenience.

Perfect for headless servers or homelab setups where you want clean, browser-based fan control without bloated tools. Still local-only for now, but I might package it up if there’s interest.

4 Likes

That is great work. You found a problem you wanted solved and did it yourself. Most people would not do that. I’m certain there will be interest in it by some people. I would recommend that if you wanted to support it’s development, then build something anyone could use/setup. Add it to your signature line and place it on GitHub. Be upfront about if it you need special privledges or anything.

1 Like

I’d love to try this out. Will you be making it publicly available?

I just pushed it to Docker check out my signature.

It’s nothing special, here is a screenshot.

1 Like

Are there any nessessary config steps required? i got the app running, but it’s not showing fan speeds :confused:

1 Like

Neat!

Would you be willing to submit this as a Community Chart request on our Apps repo?

Here’s the related github:

Have you looked at the sample yaml?

I posted an issue for it

2 Likes