- Shell 76.8%
- Python 23.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| vendor | ||
| .gitignore | ||
| .gitmodules | ||
| beelink-fan-control.example.json | ||
| beelink-fan-control.service | ||
| beelink-fan-controller.py | ||
| beelink-it87.conf | ||
| README.md | ||
| setup-beelink-fan-control.sh | ||
Beelink Mini S13 fan control
Interactive Ubuntu installer for quiet, fail-safe fan control on an AZW/Beelink Mini S13 with an ITE IT8613E Super I/O controller. It maps and calibrates pulse-width modulation (PWM) channels, monitors CPU and Non-Volatile Memory Express (NVMe) temperatures, verifies fan speed in revolutions per minute (RPM), and optionally applies Intel Running Average Power Limit (RAPL) Power Limit 1 (PL1) and Power Limit 2 (PL2).
Use
git clone --recurse-submodules <repository-url>
cd fan-noise
./setup-beelink-fan-control.sh sweep # optional acoustic test
./setup-beelink-fan-control.sh install
./setup-beelink-fan-control.sh status
./setup-beelink-fan-control.sh validate # monitored ten-minute CPU load
./setup-beelink-fan-control.sh uninstall
Mutating modes require an interactive terminal and exact typed confirmations. The installer checks Desktop Management Interface (DMI) identity, rejects competing controllers, preserves original power limits, and commands near-full fan duty on control failure. It never disables hardware thermal throttling or shutdown.
Validated profile
The included example records the tested machine, not a universal configuration: PWM2/fan2, floor 96, normal ceiling 112, PL1 6 W, and PL2 25 W. A 600-second four-worker validation peaked at 75 °C CPU and 59 °C NVMe with no thermal-throttle counter increase or service failure. The IT8613E changes mode at PWM 255, so the controller uses PWM 254 (99.6% duty) as its verifiable near-full hardware command.
Files
setup-beelink-fan-control.sh— installer, acoustic sweep, validation, status, and uninstall.beelink-fan-controller.py— installed controller.beelink-fan-control.service— systemd unit.beelink-fan-control.example.json— validated example; installation generates the live configuration.beelink-it87.conf— module-load rule.vendor/it87— pinnedfrankcrawford/it87submodule used by Dynamic Kernel Module Support (DKMS).
The installer verifies submodule commit 490f76f61900c163fac5328506c49969bd716dc6 and rejects modified build inputs. If the submodule is absent, it fetches that exact revision from upstream for standalone-script compatibility.