Перейти к содержанию

Fan Control

os-fanctl · Оборудование устройства

Считывает и записывает все температуры и вентиляторы устройства и управляет вентиляторами на чипе Super I/O, которыми FreeBSD управлять не может, возвращая их оборудованию, как только что-то идёт не так.

В меню

  • С установленным os-xgs-npu: XGS: Fan Control
  • Без os-xgs-npu: System: Fan Control
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

os-fanctl Выпуски