pve-m900-1, a Lenovo M900 Tiny, is one of the small Proxmox boxes in my homelab — it runs dev/test workloads and the NetFlow collector VM. It has no spinning disk (single SSD), so the only moving part worth monitoring is the fan. sensors was already showing coretemp and PECI temperatures just fine, but no fan RPM at all — not a zero, just absent, as if the box didn’t have a fan sensor.

The dead end: no error, just nothing

The Super I/O chip on these Tiny-series boards is a Nuvoton NCT6683, and the matching kernel driver is nct6683 (part of lm-sensors). Normally you modprobe nct6683, run sensors-detect, and get fan1/fan2 readings for free. Here, modprobe nct6683 returned cleanly, but sensors still showed no fan entry:

modprobe nct6683
sensors
# coretemp-isa-0000 and peci entries present, no nct6683 block at all
dmesg | grep -i nct6683
# (nothing)

No error message, no log line, nothing in dmesg — the module just wasn’t registering a device. That absence of any error is the tell: this isn’t a missing-driver problem, it’s a driver that loaded and then quietly declined to attach to the hardware.

The cause: an EC firmware/vendor check

The nct6683 driver does a sanity check against the embedded controller’s firmware build ID before it will bind — it’s a safety measure, since writing to the wrong registers on an unrecognized EC build can do bad things. This M900 Tiny’s EC firmware build (1.0 build 12/30/15) isn’t in the driver’s list of known-good builds, so the check fails and the driver bails out with ENODEV before ever creating the sensor device — silently, since this is treated as “unsupported hardware,” not an error condition.

The driver exposes an escape hatch for exactly this: a force module parameter that skips the vendor/build check and binds anyway.

modprobe -r nct6683
modprobe nct6683 force=1
sensors

With force=1, sensors immediately reports a new block with fan2 reading a baseline of roughly 980 RPM, alongside the existing coretemp/PECI entries.

Making it persistent

A manual modprobe force=1 doesn’t survive a reboot, and doesn’t help if nct6683 isn’t in the auto-loaded module list at all. Two small config files fix both:

# Force the parameter every time the module loads
echo "options nct6683 force=1" > /etc/modprobe.d/nct6683.conf

# Make sure the module actually loads at boot
echo "nct6683" >> /etc/modules

update-initramfs -u
reboot

After the reboot, sensors shows fan2 without any manual intervention — same as it would if the driver’s built-in check had recognized the board in the first place.

Reference

ItemValue
HardwareLenovo M900 Tiny (pve-m900-1)
Super I/O chipNuvoton NCT6683
Drivernct6683 (lm-sensors)
Symptommodprobe succeeds, no fan entry in sensors, nothing in dmesg
Root causeEC firmware build 1.0 build 12/30/15 fails the driver’s vendor/build check → silent ENODEV
Fixforce=1 module parameter
Persistence/etc/modprobe.d/nct6683.conf (options nct6683 force=1) + nct6683 in /etc/modules
Resultsensors reports fan2, ~980 RPM baseline

If a Super I/O sensor driver loads without error but produces zero fan/temp entries and dmesg is silent, a vendor or firmware-build allowlist check inside the driver — not a missing driver — is worth suspecting before anything else.


This guide was written by Claude, an AI assistant made by Anthropic, based on a hands-on troubleshooting session working through this exact problem.