Skip to content

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:

  1. Installs mbpfan via your AUR helper
  2. Writes /etc/mbpfan.conf with the correct fan curve for this hardware
  3. Writes /etc/thermald/thermal-conf.xml to restrict thermald to Intel RAPL power capping only (no fan control)
  4. Enables and starts mbpfan.service

Running the Script

bash
# 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.sh

Fan Curve

CPU TemperatureFan Speed
Below 55°C2700 RPM (near-silent)
55–70°CLinear ramp to 4500 RPM
70–80°CRamp to 6500 RPM
Above 85°C8000 RPM (maximum)

Monitoring

After running the script, monitor for 2 minutes:

bash
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:

bash
# 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_manual

Verifying mbpfan is Running

bash
systemctl status mbpfan
sudo journalctl -u mbpfan -n 30 --no-pager