Fan Control
os-fanctl · アプライアンスのハードウェア
アプライアンスのすべての温度とファンを読み取って記録し、FreeBSD が制御できない Super I/O チップ上のファンを駆動し、何か問題が起きればファンをハードウェアに戻します。
メニューの場所
- os-xgs-npu をインストールした場合: XGS: Fan Control
- os-xgs-npu がない場合: System: Fan Control

FreeBSD には Super I/O チップ上のファンのデューティを設定する手段がありません。ncthwm(4) ドライバが登録する sysctl はすべて読み取り専用です。このプラグインは小さな C のヘルパーを同梱し、ファイアウォール上でその自身のコンパイラでビルドします。ヘルパーはチップのレジスタを書き込むだけで、それ以外は何もしません。
温度センサーは、どの sysctl ノードが温度なのかをカーネルに問い合わせて見つけるため、テストしたことのないハードウェアでも読み取れます。Sophos XGS 3300 では、os-xgs-npu がインストールするツールを通じて、ボード自身のセンサー(CPU、コプロセッサのダイ、吸気)と両方のファンを読み取ります。そこではファンは監視するだけで駆動しません。ボードがホストに設定用のレジスタを与えていないためです。
インストール後は何も制御しません。チャネルを駆動するのは、そのフロア(ファンが回り続ける最低デューティ)がそのマシン自身で測定されているか、チャネルが 100% に固定されていて、かつファンが回転していると報告している場合だけです。書き込みはすべて読み戻され、一致しなければファンをハードウェアに戻して停止します。
ファン制御のテストは 1 台のマシン、Nuvoton NCT6779D を搭載した元 Sophos XG 330 rev 2 で、OPNsense 26.7.4_1 上で行いました。
機能
-
すべてのセンサー
温度はドライバ名の一覧ではなく、カーネル自身の宣言から見つけます。ページには各温度の選択期間内の最低・平均・最高と、各ファンの回転数を表示します。
-
1 分ごとの記録
直近の 1 時間・1 日・1 週間・1 か月の最低、最高、時間加重平均と、固定の段階それぞれを上回っていた時間。1 回のサンプルは 1.4 ms、記録は 503 KiB 未満に収まります。
-
ファンを増やして何度下がるか
実際のデューティ変更の前後のペアから、ファンを増やすと何度下がるかを推定し、その効果がセンサーの丸めより小さいときはそう表示します。
-
書き込み前の 6 条件
正しいチップ、制御を許可する表の項目、ファンの元の状態の保存、測定済みのフロアまたは 100% 固定、回転しているファン、読み取れる温度。判断のたびにすべて再確認します。
-
どの終わり方でもハードウェアに戻す
正常停止、エラー、シグナル、ウォッチドッグ、ファンの停止、読み戻しの失敗、パニック温度、パッケージの削除のいずれも復元で終わります。
-
ダッシュボードウィジェット
ファンとすべての温度をダッシュボードに表示します。
インストールと更新
Sophos XGS アプライアンスでは xgs-image-builder のイメージに含まれ、監視専用モードで起動します。カーブを選ぶまでファンのチップには何も書き込みません。新しいリリースは XGS: Updates の Plugins タブから手動でインストールします。自動では何も更新されません。それ以外の環境では、リポジトリのコピーから install/install.sh を実行します。再実行しても設定とフロアの測定値は保持され、同梱の self-update.py で新しいリリースをインストールできます。ページは System: Fan Control、os-xgs-npu がインストールされていれば XGS: Fan Control です。
制限と、まだテストされていないこと
- ファンの駆動が許可されているのは Sophos XG 330 rev 2 のみで、実機で試験済みです。XGS 136 は今のところ読み取り専用で、その他のマシンはフロアが測定されるまで読み取りと報告のみです(docs/contributing-fans.md)。
- XGS 3300 ではファンを駆動できません。ボードが独自のファンカーブを持ち、ホストが書き込めるレジスタがありません。
リポジトリ
最初のリリース: 2026-10-16