Fan Control
os-fanctl · Hardware del equipo
Lee y registra cada temperatura y cada ventilador del equipo, y controla los ventiladores de un chip Super I/O que FreeBSD no puede controlar, devolviéndolos al hardware en cuanto algo falla.
En el menú
- Con os-xgs-npu instalado: XGS: Fan Control
- Sin os-xgs-npu: System: Fan Control

FreeBSD no ofrece ninguna forma de fijar el ciclo de trabajo de un ventilador en un chip Super I/O: todos los sysctl que registra el controlador ncthwm(4) son de solo lectura. El plugin incluye un pequeño programa auxiliar en C, compilado en el propio cortafuegos con su compilador, que escribe los registros del chip y no hace nada más.
Encuentra los sensores de temperatura preguntando al kernel qué nodos sysctl son temperaturas, así que también lee hardware en el que nunca se probó. En el Sophos XGS 3300 lee los sensores de la propia placa —la CPU, el chip del coprocesador y el aire de entrada— y ambos ventiladores, mediante una herramienta que instala os-xgs-npu. Allí los ventiladores se vigilan, no se controlan: la placa no da al host ningún registro para fijarlos.
Tras la instalación no se controla nada. Un canal solo se controla cuando su mínimo —el ciclo de trabajo más bajo con el que su ventilador sigue girando— se midió en esa misma máquina o se mantiene fijo al 100 %, y su ventilador indica que gira. Cada escritura se vuelve a leer; si no coincide, los ventiladores vuelven al hardware y el plugin se detiene.
El control de ventiladores se probó en una máquina, un antiguo Sophos XG 330 rev 2 con un Nuvoton NCT6779D, con OPNsense 26.7.4_1.
Funciones
-
Cada sensor
Las temperaturas se encuentran a partir de las propias declaraciones del kernel, no de una lista de nombres de controladores. La página muestra cada una con su mínimo, media y máximo en el periodo elegido, y cada ventilador con su velocidad.
-
Un registro, cada minuto
El mínimo, el máximo y la media ponderada en el tiempo de la última hora, día, semana y mes, y el tiempo pasado por encima de cada peldaño de una escala fija. Una muestra cuesta 1,4 ms y el registro no pasa de 503 KiB.
-
Lo que devuelve más ventilador
A partir de pares de antes y después en torno a cambios reales del ciclo de trabajo, estima cuántos grados compra más ventilador, y lo dice cuando el efecto es menor que el redondeo de los sensores.
-
Seis condiciones antes de escribir
El chip correcto, una entrada de la tabla que permite el control, el estado original de los ventiladores guardado, un mínimo medido o un 100 % fijo, un ventilador que gira y temperaturas legibles, todo comprobado de nuevo antes de cada decisión.
-
De vuelta al hardware en cada salida
Una parada limpia, un error, una señal, el watchdog, un ventilador detenido, una relectura fallida, la temperatura de pánico y la eliminación del paquete terminan todos en una restauración.
-
Widget del panel
Los ventiladores y cada temperatura en el panel (dashboard).
Instalar y actualizar
En un equipo Sophos XGS viene con la imagen de xgs-image-builder y arranca en su modo de solo vigilancia: no escribe en ningún chip de ventiladores hasta que se elige una curva. Sus nuevas versiones se instalan a mano desde la pestaña Plugins de XGS: Updates; nada se actualiza por sí solo. En cualquier otro sitio, ejecute install/install.sh desde una copia del repositorio; volver a ejecutarlo conserva los ajustes y las mediciones de los mínimos, y su self-update.py instala una versión más reciente. La página es System: Fan Control, o XGS: Fan Control con os-xgs-npu instalado.
Límites, y lo que aún no se ha probado
- Controlar ventiladores solo está permitido en el Sophos XG 330 rev 2, donde se probó en la máquina. El XGS 136 es de solo lectura por ahora, y las demás máquinas se leen y se informa de ellas hasta que se midan sus mínimos (docs/contributing-fans.md).
- En el XGS 3300 los ventiladores no se pueden controlar: la placa mantiene su propia curva, sin ningún registro que el host pueda escribir.
Repositorio
Primera versión: 2026-10-16