ACPI_THERMAL(4)

✨ acpi_thermal β€” ACPI thermal management subsystem πŸ’–

okay bestie, welcome to ACPI_THERMAL(4), straight out of the Kernel Interfaces Manual πŸ“– β€” this is the page about the driver that keeps your machine from literally cooking itself πŸ”₯. it's giving "your laptop's personal bodyguard," no cap.


🌸 NAME 🌸

acpi_thermal β€” the ACPI thermal management subsystem. yes, the whole vibe is "temperature, but make it handled."


πŸŽ€ SYNOPSIS πŸŽ€

device acpi

that's it. that's the whole summoning ritual πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

so the acpi_thermal driver is the part of the ACPI module that does the thermal management glow-up. it comes with two whole interfaces, and honestly, obsessed:

the sysctls spill all the tea about every ACPI thermal zone object's properties. ✨

here's the thing β€” a system can have multiple thermal zones, like, a lot of them. for example, every CPU and the enclosure could each be their own separate thermal zone, and each one has its own setpoints and its own cooling devices. main character energy for every zone, fr fr. thermal zones get numbered sequentially in the order they show up in the AML. πŸ”’

and the driver doesn't just sit there being cute β€” it also activates the active cooling system according to each thermal zone's setpoints. it's doing the work. πŸ‘‘


πŸ’œ SYSCTL VARIABLES πŸ’œ

  • hw.acpi.thermal.min_runtime β€” how many seconds to keep active cooling going once it's already started. a new active cooling level won't get picked until this interval has fully expired. like, let the fans finish their moment. πŸŒ€
  • hw.acpi.thermal.polling_rate β€” how many seconds between polls of the current temperature. that's the vibe check interval. 🌑️
  • hw.acpi.thermal.user_override β€” if you set this to 1, you're allowed to override the various setpoints listed below. the original values for these settings come from the BIOS, so changing them means system overheating and possible damage could occur 😭 β€” yes, actual hardware damage, this is not a drill. default is 0 (no override). don't be messy with this one.
  • hw.acpi.thermal.tz%d.active β€” the current active cooling system state. if this is non-negative, the appropriate _AC%d object is running. set this value to the active cooling level you want to force the corresponding fan object to that level. you're literally the DJ of the fans. πŸŽ›οΈ
  • hw.acpi.thermal.tz%d.passive_cooling β€” if set to 1, passive cooling is enabled. this is the chill-but-fanless route: it does its cooling using cpufreq(4) as the mechanism for controlling CPU speed. default is enabled for tz0, where it's available. 🐒
  • hw.acpi.thermal.tz%d.thermal_flags β€” the current thermal zone status. these are bit-masked values. 🏳️
  • hw.acpi.thermal.tz%d.temperature β€” the current temperature for this zone. the moment of truth. πŸ‘€
  • hw.acpi.thermal.tz%d._PSV β€” the temperature that starts passive cooling by throttling down the CPU, etc. this value can be overridden by the user. ✍️
  • hw.acpi.thermal.tz%d._HOT β€” the temperature that starts critical suspend to disk (S4). this value can be overridden by the user. πŸ’€
  • hw.acpi.thermal.tz%d._CRT β€” the temperature that starts critical shutdown (S5). this value can be overridden by the user. πŸ’€
  • hw.acpi.thermal.tz%d._ACx β€” the temperatures at which to switch to the corresponding active cooling level. the lower the _ACx value, the higher the cooling power. so like, tiny number = big fan energy. πŸ“‰πŸ”₯

all temperatures are printed in Celsius. you can set values in Celsius by giving a trailing "C", or in Kelvin by leaving off any trailing letter. and listen β€” when you're setting a value via sysctl(8), do not put a trailing decimal. it's 90C, not 90.0C. keep it clean, bestie. 🧼


🌈 NOTIFIES 🌈

notifies get passed to userland via devd(8). peep /etc/devd.conf and devd.conf(5) for examples. the acpi_thermal driver sends events with these attributes:

  • system β€” ACPI
  • subsystem β€” Thermal
  • type β€” the fully qualified thermal zone object path, as in the ASL.
  • notify β€” an integer designating the event:
    • 0x80 β€” the current temperature has changed. 🌑️
    • 0x81 β€” one or more trip points (_ACx, _PSV) have changed. 🎯
    • 0x82 β€” one or more device lists (_ALx, _PSL, _TZD) have changed. πŸ“
    • 0xcc β€” a non-standard notify meaning the system will shut down if the temperature stays above _CRT or _HOT for one more poll cycle. 🚨 like, this is the "last warning, bestie" notification. genuinely scary. take it seriously.

🫢 SEE ALSO 🫢


πŸ‘‘ AUTHORS πŸ‘‘

Michael Smith

this manual page was written by Takanori Watanabe.


lowkey the whole point of this page: your thermal zones have setpoints, your fans have levels, and the BIOS had opinions before you did. respect the defaults unless you know what you're doing πŸ’…

and that's the page, bestie β€” this one came from the Debian crew and it's dated March 17, 2007 πŸŽ‚, so give it the little nostalgic kiss it deserves. stay cool (literally), and don't touch user_override unless you mean it. mwah πŸ’–πŸ¦‹βœ¨

πŸ“¦ where this page comes from