Thermal Setup
Run this first
Without intervention, the MacBook Air 2020 CPU can sustain 97–100°C at near-idle fan speeds on CachyOS. This is not a minor issue — it risks hardware damage over time. Run 01-thermal-setup.sh immediately after installing.
Why This Happens
The default thermald configuration expects the fan to be at the traditional applesmc platform sysfs path. On the MacBook Air 2020 running kernel 6.19.x-cachyos, the fan is instead exposed via the ACPI APP0001:00 device:
/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1c/APP0001:00/thermald cannot find the fan at its expected path, so the fan stays near minimum speed (~2700 RPM) regardless of CPU temperature.
The Fix: mbpfan
mbpfan reads Apple SMC sensors directly via coretemp and drives the fan independently of thermald. The 01-thermal-setup.sh script:
- Installs
mbpfanvia your AUR helper - Writes
/etc/mbpfan.confwith the correct fan curve for this hardware - Writes
/etc/thermald/thermal-conf.xmlto restrictthermaldto Intel RAPL power capping only (no fan control) - Enables and starts
mbpfan.service
Running the Script
# Install as your normal user first (AUR helpers cannot run as root)
paru -S mbpfan
# Then run the setup script
sudo bash scripts/01-thermal-setup.shFan Curve
| CPU Temperature | Fan Speed |
|---|---|
| Below 55°C | 2700 RPM (near-silent) |
| 55–70°C | Linear ramp to 4500 RPM |
| 70–80°C | Ramp to 6500 RPM |
| Above 85°C | 8000 RPM (maximum) |
Monitoring
After running the script, monitor for 2 minutes:
watch -n 2 'sensors | grep -E "Package|fan1"'Expected: temperatures should drop from 100°C to below 70°C within a few minutes at idle. Fan speed will rise to match load.
Emergency Fan Override
If your CPU is critically hot before running the script:
# Find your fan sysfs path
find /sys/devices/LNXSYSTM:00 -name "fan1_output" 2>/dev/null
# Force fan to maximum (replace path with yours)
echo 1 | sudo tee /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1c/APP0001:00/fan1_manual
echo 8000 | sudo tee /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1c/APP0001:00/fan1_output
# Return to automatic control
echo 0 | sudo tee /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1c/APP0001:00/fan1_manualVerifying mbpfan is Running
systemctl status mbpfan
sudo journalctl -u mbpfan -n 30 --no-pager