Zum Inhalt

Fan Control

os-fanctl · Hardware des Geräts

Liest und protokolliert jede Temperatur und jeden Lüfter der Appliance und steuert Lüfter an einem Super-I/O-Chip, den FreeBSD nicht steuern kann – und gibt sie an die Hardware zurück, sobald etwas schiefgeht.

Im Menü

  • Mit installiertem os-xgs-npu: XGS: Fan Control
  • Ohne os-xgs-npu: System: Fan Control
Fan Control in der Weboberfläche
Seine Seite in der Weboberfläche, auf Englisch.

FreeBSD bietet keinen Weg, den Tastgrad eines Lüfters an einem Super-I/O-Chip zu setzen: Jedes sysctl, das der Treiber ncthwm(4) registriert, ist schreibgeschützt. Das Plugin bringt ein kleines C-Hilfsprogramm mit, das auf der Firewall von deren eigenem Compiler gebaut wird, die Register des Chips schreibt und sonst nichts tut.

Es findet die Temperatursensoren, indem es den Kernel fragt, welche sysctl-Knoten Temperaturen sind, und liest so auch Hardware, auf der es nie getestet wurde. Auf der Sophos XGS 3300 liest es die boardeigenen Sensoren – die CPU, den Die des Koprozessors und die Ansaugluft – sowie beide Lüfter, über ein Werkzeug, das os-xgs-npu installiert. Dort werden die Lüfter beobachtet, nicht gesteuert: Das Board gibt dem Host kein Register, um sie zu setzen.

Nach der Installation wird nichts gesteuert. Ein Kanal wird nur gesteuert, wenn seine Untergrenze – der niedrigste Tastgrad, bei dem sein Lüfter noch dreht – auf genau dieser Maschine gemessen wurde oder er fest auf 100 % gehalten wird, und wenn sein Lüfter meldet, dass er dreht. Jeder Schreibvorgang wird zurückgelesen; weicht der Wert ab, gehen die Lüfter an die Hardware zurück und das Plugin hört auf.

Die Lüftersteuerung wurde auf einer Maschine getestet, einer früheren Sophos XG 330 rev 2 mit einem Nuvoton NCT6779D, unter OPNsense 26.7.4_1.

Funktionen

  • Jeder Sensor

    Temperaturen werden aus den eigenen Deklarationen des Kernels gefunden, nicht aus einer Liste von Treibernamen. Die Seite zeigt jede mit Minimum, Mittel und Maximum über den gewählten Zeitraum und jeden Lüfter mit seiner Drehzahl.

  • Ein Protokoll, jede Minute

    Minimum, Maximum und zeitgewichtetes Mittel über die letzte Stunde, den letzten Tag, die letzte Woche und den letzten Monat sowie die Zeit über jeder Stufe einer festen Leiter. Eine Messung kostet 1,4 ms, das Protokoll bleibt unter 503 KiB.

  • Was mehr Lüfter bringt

    Aus Vorher-nachher-Paaren um echte Tastgradänderungen schätzt es, wie viele Grad mehr Lüfter bringt, und sagt es, wenn der Effekt kleiner ist als die Rundung der Sensoren.

  • Sechs Bedingungen vor jedem Schreiben

    Der richtige Chip, ein Tabelleneintrag, der Steuerung erlaubt, der erfasste Ursprungszustand der Lüfter, eine gemessene Untergrenze oder feste 100 %, ein drehender Lüfter und lesbare Temperaturen – vor jeder Entscheidung erneut geprüft.

  • Zurück an die Hardware bei jedem Ausgang

    Ein sauberer Stopp, ein Fehler, ein Signal, der Watchdog, ein stehender Lüfter, ein fehlgeschlagenes Zurücklesen, die Paniktemperatur und das Entfernen des Pakets enden alle in einer Wiederherstellung.

  • Dashboard-Widget

    Die Lüfter und jede Temperatur auf dem Dashboard.

Installieren und aktualisieren

Auf einer Sophos XGS Appliance kommt es mit dem Image von xgs-image-builder und startet im reinen Beobachtungsmodus: Es schreibt auf keinen Lüfterchip, bis eine Kurve gewählt ist. Neue Releases werden von Hand über den Tab Plugins von XGS: Updates installiert; nichts wird von selbst aktualisiert. Anderswo führen Sie install/install.sh aus einer Kopie des Repositorys aus; ein erneuter Lauf behält die Einstellungen und die Messungen der Untergrenzen, und sein self-update.py installiert ein neueres Release. Die Seite ist System: Fan Control, mit installiertem os-xgs-npu XGS: Fan Control.

Grenzen, und was noch nicht getestet ist

  • Lüftersteuerung ist nur auf der Sophos XG 330 rev 2 erlaubt, wo sie an der Maschine erprobt wurde. Die XGS 136 wird bisher nur gelesen, und andere Maschinen werden gelesen und gemeldet, bis ihre Untergrenzen gemessen sind (docs/contributing-fans.md).
  • Auf der XGS 3300 lassen sich die Lüfter nicht steuern: Das Board behält seine eigene Lüfterkurve, ohne ein Register, das der Host schreiben kann.

Repository

Erste Veröffentlichung: 2026-10-16

os-fanctl Releases