After multiple searches I found a bunch of posts about loud fans for the DXP2800 but not how to control the fans. This applies to those who do not use UGOS PRO but unRAID, Debian, Ubuntu, Fedora etc.
Note
In cooperation with AI, we've upstreamed the driver for the it87 chipset for the latest linux kernel (April 2026), dropped old kernel support for kernel version 2.7.x since there will be no UGREEN NAS with such a low linux kernel available. Im not good with C so any help, bug fixings and reviews are highly welcome :-)
Here is a step by step guide on how to do this:
- gcc
- make
- dkms
- dwarves
- kernel-headers
- lm_sensors
- git
- SSH Client
- Basic knowledge with Linux and terminal commands
The automated installer handles driver building via DKMS, systemd service setup, and configuration protection. It ensures the driver loads reliably after reboots and kernel updates, and guards against fancontrol configuration loss.
-
SSH into your UGREEN NAS
-
Install the required packages
# Fedora/RHEL
sudo dnf install gcc make dkms dwarves kernel-headers lm_sensors git
# Debian/Ubuntu
sudo apt install gcc make dkms dwarves linux-headers-$(uname -r) lm-sensors git
# Arch
sudo pacman -S gcc make dkms linux-headers lm_sensors git- Clone the repository and run the installer
git clone --recurse-submodules https://github.com/0n1cOn3/UGREEN-Fan-Control.git
cd UGREEN-Fan-Control
sudo ./scripts/install.sh- Detect sensors and configure fan control
sudo sensors-detectYou can answer all questions with Y.
Note
If you have previously executed lm_sensors and the dkms module has not yet been installed, you may see the following message:
Found `ITE IT8613E Super IO Sensors' Success!
(address 0xa30, driver `to-be-written')That's normal behavior and will still appear even when the driver has been installed. The interface to the ventilation is now available.
- Configure which fan uses which channel
sudo pwmconfigThis utility will create the fancontrol config file in /etc/fancontrol.
- Enable and start the fancontrol service
sudo systemctl enable --now fancontrolThe installer automatically sets up systemd services that ensure:
- The it87 driver is loaded before fancontrol starts (prevents race conditions)
- The fancontrol configuration is backed up and restored if corrupted
- Device paths are updated automatically if they change after reboot
Click to expand manual installation steps
-
SSH into your UGREEN NAS
-
Install the packages mentioned above like
sudo dnf install gcc make dkms dwarves kernel-headers lm_sensors- Building the dkms module and installing it
cd it87
make -j4
sudo make install[!NOTE] If you see this: Skipping BTF generation [module name] due to unavailability of vmlinux.
You can simply run:
cp /sys/kernel/btf/vmlinux /usr/lib/modules/`uname -r`/build/And clean up the previous, interrupted build and do a clean build from scratch
make clean && make -j4 && sudo make install
- Testing and configure the fans by configuring lm_sensors
sudo sensors-detectYou can answer all questions with Y.
- Configure fan channels with pwmconfig
sudo pwmconfigThis small application will take over for creating the fancontrol config file in /etc
- Activate the fancontrol service at boot time
systemctl enable --now fancontrolTo remove the driver, services, and configuration files:
sudo ./scripts/uninstall.shThis preserves your /etc/fancontrol configuration. Remove it manually if no longer needed.
The automated installer prevents this by setting up proper systemd service ordering. If you installed manually, ensure the it87 module is loaded before fancontrol starts:
# Check if the module is loaded
lsmod | grep it87
# Load it manually
sudo modprobe it87 ignore_resource_conflict=1
# Make it persistent across reboots
echo "it87" | sudo tee /etc/modules-load.d/it87.conf
echo "options it87 ignore_resource_conflict=1" | sudo tee /etc/modprobe.d/it87.confThe automated installer includes a config guard that backs up and restores the configuration. To manually restore from backup:
sudo /usr/local/sbin/fancontrol-config-guard.sh restoreTo recreate the configuration from scratch:
sudo systemctl stop fancontrol
sudo pwmconfig
sudo systemctl start fancontrol# Check DKMS status
dkms status it87
# Rebuild for current kernel
cd it87
make clean
sudo make dkmsThe idea for this project has been brought by this Reddit post
That was written by
- Copyright (C) 2001 Chris Gauthron
- Copyright (C) 2005-2010 Jean Delvare jdelvare@suse.de and archived by a1wong
Tested with
# sensors-detect version 3.6.0
# System: UGREEN DXP2800 [EM_DXP2800_V1.0.25]
# Board: Default string Default string
# OS: Fedora 42 Server Edition
# Kernel: 6.14.5-300.fc42.x86_64 x86_64
# Processor: Intel(R) N100 (6/190/0)root@lainpool:/# fancontrol
Loading configuration from /etc/fancontrol ...
Common settings:
INTERVAL=10
Settings for hwmon2/pwm3:
Depends on hwmon1/temp3_input
Controls hwmon2/fan3_input
MINTEMP=22
MAXTEMP=60
MINSTART=105
MINSTOP=26
MINPWM=24
MAXPWM=255
AVERAGE=1sensors
it8613-isa-0a30
Adapter: ISA adapter
in0: 660.00 mV (min = +0.00 V, max = +2.81 V)
in1: 1.12 V (min = +0.00 V, max = +2.81 V)
in2: 2.07 V (min = +0.00 V, max = +2.81 V)
in4: 2.06 V (min = +0.00 V, max = +2.81 V)
in5: 2.08 V (min = +0.00 V, max = +2.81 V)
3VSB: 3.30 V (min = +0.00 V, max = +5.61 V)
Vbat: 3.15 V
+3.3V: 3.37 V
fan2: 0 RPM (min = 0 RPM)
fan3: 1726 RPM (min = 0 RPM)
temp1: +40.0°C (low = -128.0°C, high = +127.0°C) sensor = thermistor
temp2: +23.0°C (low = -128.0°C, high = +127.0°C) sensor = thermistor
temp3: +42.0°C (low = -128.0°C, high = +127.0°C)
intrusion0: ALARM
acpitz-acpi-0
Adapter: ACPI interface
temp1: +27.8°C
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 0: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 1: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 2: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 3: +49.0°C (high = +105.0°C, crit = +105.0°C)Please report them here.
It took me a few hours to prepare, testing and deliver this for you. :) I'll appreciate any contribution to the coffee fund :3
BTC: 3EdkooEbQJurjCHScwUjPHGCCszoFh1pmM
ETH: 0x0dB50ef6C03c354795e306133B71A69d8F2e9cc6