Tested on: MinisForum BD790i motherboard, Proxmox 6.8.12-18-pve, IT8613E Super IO ⇒ no mainline driver — use it87 with force_id workaround.
Setup sensors
apt update
apt install lm-sensors
sensors-detectShould find “Chip ITE IT8613E Super IO Sensors” but “Note: there is no driver for ITE IT8613E Super IO Sensors yet”.
Install and test it87 module
# 1. Get, build and test it87 module
apt install git build-essential pve-headers-$(uname -r)
git clone https://github.com/frankcrawford/it87
cd it87
make
# hwmon-vid must load first (provides vid_from_reg / vid_which_vrm symbols)
modprobe hwmon-vid
# force_id=0x8622 treats IT8613E as the similar IT8622E
insmod it87.ko force_id=0x8622 ignore_resource_conflict=1
# IT8613E should now appear as it8622-isa-0a30
sensorsit87 Out-of-tree Linux kernel driver for ITE Super IO chips (IT8xxx series) — the family of chips that handle fan headers, voltage rails, and temperature sensors on many motherboards. The mainline kernel supports most variants; frankcrawford’s fork extends support to newer/uncommon ones like the IT8613E. “Out-of-tree” means it lives outside the official kernel source and must be compiled separately.
Install it87 permanently
# 2. Install via DKMS (survives kernel updates)
apt install dkms
VERSION=$(grep PACKAGE_VERSION dkms.conf | cut -d'"' -f2)
cp -r /root/it87 /usr/src/it87-$VERSION
dkms add it87/$VERSION
dkms build it87/$VERSION
dkms install it87/$VERSION
# 3. Configure module options
# force_id=0x8622 treats IT8613E as the similar IT8622E
echo "options it87 force_id=0x8622 ignore_resource_conflict=1" > /etc/modprobe.d/it87.conf
# 4. Load modules at boot
# hwmon-vid must load before it87 (provides vid_from_reg / vid_which_vrm symbols)
printf "hwmon-vid\nit87\n" > /etc/modules-load.d/it87.confDKMS (Dynamic Kernel Module Support) A framework that automatically recompiles out-of-tree kernel modules whenever a new kernel is installed. Without it, every kernel update would break your custom module silently. You register a module’s source with DKMS once; after that, apt upgrade triggers a rebuild automatically.
/etc/modprobe.d/ Drop-in config files for the modprobe command. Used to pass options to modules when they load (options it87 force_id=0x8622), create aliases, or blacklist modules. Files here are read by modprobe but don’t themselves trigger loading.
/etc/modules-load.d/ Tells systemd-modules-load.service which modules to load at boot, unconditionally. One module name per line. This is the modern replacement for /etc/modules.
Auto-set fan speed at boot
# 5. Fan speed script
cat > /usr/local/bin/set-fan-speed.sh << 'EOF'
#!/bin/bash
# SYS_FAN2 = pwm2 on the it8622 hwmon device. PWM range: 0-255.
# 55 ~ 500 RPM, 100 ~ 900 RPM, 150 ~ 1300 RPM, 200 ~ 1700 RPM
HWMON=$(grep -l "it8622" /sys/class/hwmon/hwmon*/name | head -1 | xargs dirname)
[ -n "$HWMON" ] || exit 1
echo 1 > "$HWMON/pwm2_enable" # switch to manual mode
echo 100 > "$HWMON/pwm2"
EOF
chmod +x /usr/local/bin/set-fan-speed.sh
# 6. Systemd service
cat > /etc/systemd/system/fan-control.service << 'EOF'
[Unit]
Description=Set SYS_FAN2 speed
After=systemd-modules-load.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/set-fan-speed.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now fan-control.service
# 7. Verify after reboot
systemctl status fan-control.service
cat /sys/class/hwmon/hwmon*/pwm2 # should be 100
sensors | grep fan2 # should be ~900 RPMNotes
pwm2_enable=2is firmware/auto mode (default). Setting it to1enables manual control.pwm4/fan4is the CPU fan — leave it alone.- Sensor temps under
it8622-isa-0a30: temp1 = board, temp2 = VRM, temp3 ≈ CPU die. - The ALARM warnings in
sensorsoutput are cosmetic — thresholds are not configured, not actual faults.
TMP
sensors | egrep "nvme|Composite"
sensors nvme-pci-0868 nvme-pci-06{80,88,d8,e0} | egrep "nvme|Composite"
SSD temps at pwm2=0: 38, 43, 54 = it86 49, 43 = MB 55, 54, 53, 52 = BIFURC — TBC
SSD temps at pwm2=50: 36, 41, 53 = it86 48, 43 = MB 52, 50, 47, 44 = BIFURC
SSD temps at pwm2=100 (nearly inaudible): 35, 41, 53 = it86 48, 43 = MB 48, 46, 43, 40 = BIFURC
SSD temps at pwm2=150 (audible): 34, 40, 52 = it86 48 (nvme-pci-0200, proxmox), 42 (nvme-pci-0868, truenas) = MB 45, 43, 40, 37 = BIFURC (nvme-pci-06xx, truenas)
SSD temps at pwm2=200 (loud): 34, 40, 54 = it86 47, 43 = MB 43, 41, 39, 36 = BIFURC