Fan Control
os-fanctl · Оборудование устройства
Считывает и записывает все температуры и вентиляторы устройства и управляет вентиляторами на чипе Super I/O, которыми FreeBSD управлять не может, возвращая их оборудованию, как только что-то идёт не так.
В меню
- С установленным os-xgs-npu: XGS: Fan Control
- Без os-xgs-npu: System: Fan Control

В FreeBSD нет способа задать коэффициент заполнения вентилятора на чипе Super I/O: все sysctl, которые регистрирует драйвер ncthwm(4), доступны только для чтения. Плагин поставляет небольшую вспомогательную программу на C, которая собирается на межсетевом экране его собственным компилятором, пишет в регистры чипа и больше ничего не делает.
Датчики температуры он находит, спрашивая ядро, какие узлы sysctl являются температурами, поэтому читает и оборудование, на котором никогда не проверялся. На Sophos XGS 3300 он читает собственные датчики платы — процессор, кристалл сопроцессора и воздух на входе — и оба вентилятора через инструмент, который устанавливает os-xgs-npu. Там вентиляторы только наблюдаются, а не управляются: плата не даёт хосту регистра для их настройки.
После установки ничем не управляется. Канал управляется, только если его нижний предел — наименьший коэффициент заполнения, при котором вентилятор ещё вращается, — измерен на этой же машине или канал держится на фиксированных 100 %, и вентилятор сообщает, что вращается. Каждая запись считывается обратно; при расхождении вентиляторы возвращаются оборудованию, и плагин останавливается.
Управление вентиляторами проверено на одной машине — бывшем Sophos XG 330 rev 2 с Nuvoton NCT6779D, под OPNsense 26.7.4_1.
Возможности
-
Каждый датчик
Температуры находятся по объявлениям самого ядра, а не по списку имён драйверов. Страница показывает каждую с минимумом, средним и максимумом за выбранное время, а каждый вентилятор — с его скоростью.
-
Запись раз в минуту
Минимум, максимум и взвешенное по времени среднее за последний час, день, неделю и месяц, а также время выше каждой ступени фиксированной шкалы. Один отсчёт стоит 1,4 мс, запись не превышает 503 KiB.
-
Что даёт больший обдув
По парам «до и после» вокруг реальных изменений коэффициента заполнения он оценивает, сколько градусов даёт больший обдув, и говорит об этом, когда эффект меньше округления датчиков.
-
Шесть условий перед записью
Нужный чип, запись в таблице, разрешающая управление, сохранённое исходное состояние вентиляторов, измеренный нижний предел или фиксированные 100 %, вращающийся вентилятор и читаемые температуры — всё проверяется заново перед каждым решением.
-
Возврат оборудованию при любом выходе
Штатная остановка, ошибка, сигнал, сторожевой таймер, остановившийся вентилятор, неудачное обратное чтение, аварийная температура и удаление пакета — всё заканчивается восстановлением.
-
Виджет панели
Вентиляторы и все температуры на панели мониторинга (dashboard).
Установка и обновление
На устройстве Sophos XGS он входит в образ xgs-image-builder и запускается в режиме только наблюдения: ничего не пишет в чип вентиляторов, пока не выбрана кривая. Новые выпуски устанавливаются вручную на вкладке Plugins в XGS: Updates; ничего не обновляется само. В остальных случаях запустите install/install.sh из копии репозитория; повторный запуск сохраняет настройки и измерения нижних пределов, а его self-update.py устанавливает более новый выпуск. Страница — System: Fan Control, или XGS: Fan Control при установленном os-xgs-npu.
Ограничения и то, что ещё не проверено
- Управление вентиляторами разрешено только на Sophos XG 330 rev 2, где оно опробовано на самой машине. XGS 136 пока только читается, а другие машины читаются и показываются, пока не измерены их нижние пределы (docs/contributing-fans.md).
- На XGS 3300 вентиляторами управлять нельзя: плата держит собственную кривую, без регистра, в который хост мог бы писать.
Репозиторий
Первый выпуск: 2026-10-16