Cómo arrancar prematuramente el ventilador del procesador para evitar temperaturas altas.

Cómo arrancar prematuramente el ventilador del procesador para evitar temperaturas altas

Miguel Menéndez Comentarios

Por alguna extraña razón, los últimos días el procesador de mi portátil se está calentando demasiado y el ventilador tarda bastante en arrancar para bajar la temperatura.

No tengo tiempo para investigar por qué. El portátil es un Lenovo X240 con Arch, he hecho lo siguiente:

~$ sudo -i
~# sensors

Me devuelve esto:

Adapter: ISA adapter
Package id 0:  +69.0°C  (high = +100.0°C, crit = +100.0°C)
Core 0:        +64.0°C  (high = +100.0°C, crit = +100.0°C)
Core 1:        +69.0°C  (high = +100.0°C, crit = +100.0°C)

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +62.0°C  (crit = +200.0°C)

thinkpad-isa-0000
Adapter: ISA adapter
fan1:           0 RPM
temp1:        +62.0°C  
temp2:         +0.0°C  
temp3:         +0.0°C  
temp4:         +0.0°C  
temp5:         +0.0°C  
temp6:         +0.0°C  
temp7:         +0.0°C  
temp8:         +0.0°C 

¿Temperatura alta igual a temperatura crítica? ¿100°C? ¡Para hervir agua!

Instalo el paquete thinkfan (de AUR). Instalaría también el paquete lm_sensors pero ya lo estaba:

~# pacman -Ql thinkfan

Compruebo que se ha creado el archivo de configuración del módulo thinkpad_acpi:

~# cat /usr/lib/modprobe.d/thinkpad_acpi.conf

Me devuelve:

options thinkpad_acpi fan_control=1

Si no:

~# echo "options thinkpad_acpi fan_control=1" > /usr/lib/modprobe.d/thinkpad_acpi.conf

En ambos casos, reinicio el ordenador.

Tras el reinicio cargo el módulo thinkpad_acpi:

~# modprobe thinkpad_acpi

Y compruebo el estado del ventilador:

~# cat /proc/acpi/ibm/fan

Me devuelve:

status:         enabled
speed:          0
level:          auto

El ventilador está disponible pero apagado (va a 0 revoluciones por minuto)… Y el procesador a 80°C y subiendo.

Para configurar los umbrales de temperatura tengo que crear el archivo /etc/thinkfan.conf (hay ejemplos en /usr/share/doc/thinkfan/examples/). Antes de crear este archivo, debo saber dónde están los sensores de temperatura:

~# find /sys/devices -type f -name "temp*_input"

Me devuelve esto:

/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp6_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp3_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp7_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp4_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp8_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp1_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp5_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp2_input
/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp3_input
/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp2_input
/sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input

Ahora sí, con estos datos creo el archivo de configuración /etc/thinkfan.conf:

~# nano /etc/thinkfan.conf

Con el siguiente contenido:

tp_fan /proc/acpi/ibm/fan

hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp6_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp3_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp7_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp4_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp8_input
#hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp1_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp5_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp2_input
hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp3_input
hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp2_input
hwmon /sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input

#  Syntax:
#  (LEVEL, LOW, HIGH)
#  LEVEL is the fan level to use (0-7 with thinkpad_acpi)
#  LOW is the temperature at which to step down to the previous level
#  HIGH is the temperature at which to step up to the next level

(0,     0,      55)
(1,     48,     60)
(2,     50,     61)
(3,     52,     63)
(4,     56,     65)
(5,     59,     66)
(7,     63,     32767)

Pruebo la configuración:

~# thinkfan -n

Si da error algún sensor (no lo encuentra), comenta su línea en el archivo /etc/thinkfan.conf. Cuando esté todo correcto, el anterior comando devolverá algo parecido a:

Temperatures(bias): 0(0), 52(0), 52(0), 49(0), 50(0) -> level 0
Temperatures(bias): 0(0), 50(0), 52(0), 51(4), 50(0) -> level 1
Temperatures(bias): 0(0), 46(0), 46(0), 44(0), 47(0) -> level 0
Temperatures(bias): 0(0), 57(15), 61(19), 61(22), 50(2) -> level 7
Temperatures(bias): 0(0), 48(0), 50(0), 50(0), 51(0) -> level 2
Temperatures(bias): 0(0), 45(0), 46(0), 45(0), 47(0) -> level 0

¡Y oirás cómo arranca el ventilador a partir del nivel 1!

Sólo queda activar el servicio de thinkfan:

~# systemctl enable thinkfan

Fuentes: Wiki de Arch, Thinkwiki y Amirul Abu en Medium.