====== Contrôle de la vitesse du ventilateur sur Proxmox (Lenovo ThinkCentre M73) ======
===== Contexte =====
Proxmox VE ne propose aucune gestion native de la vitesse des ventilateurs : c'est du Debian en dessous, donc on passe par les outils Linux standards **lm-sensors** + **fancontrol**.
===== Matériel testé =====
* Machine : Lenovo ThinkCentre M73 (carte mère "SHARKBAY")
* BIOS : Lenovo FHKT52AUS (2014)
* CPU : Intel Core i5-4570T
* Puce de supervision matérielle : **ITE IT8792E** (Super I/O)
===== 1. Installation des paquets =====
apt install lm-sensors fancontrol
===== 2. Détection des capteurs =====
sensors-detect
Réponses à donner aux questions posées (garder les valeurs par défaut, entre parenthèses, en appuyant sur Entrée) :
* "Do you want to scan for them?" (embedded sensors) → **YES** (défaut)
* "Do you want to scan for Super I/O sensors?" → **YES** (défaut) — c'est cette étape qui détecte la puce IT8792E
* "Do you want to scan for IPMI interfaces?" → **YES** (défaut, sans effet ici, pas d'IPMI sur ce matériel)
* "Do you want to scan the ISA I/O ports?" → **NO** (défaut)
* "Do you want to probe the I2C/SMBus adapters now?" → **YES** (défaut)
* Pour chaque adaptateur I2C/SMBus listé ensuite ("Do you want to scan it?") → **NO** (défaut, laisser passer, non nécessaire ici)
* "Do you want to add these lines automatically to /etc/modules?" → **yes** (répondre explicitement, ce n'est pas la valeur par défaut) — ajoute ''coretemp'' et ''it87'' à ''/etc/modules'' pour qu'ils se chargent automatiquement au démarrage
Le programme doit trouver :
Driver `it87':
* ISA bus, address 0xa40
Chip `ITE IT8792E Super IO Sensors' (confidence: 9)
Driver `coretemp':
* Chip `Intel digital thermal sensor' (confidence: 9)
Accepter l'ajout automatique des modules à ''/etc/modules''.
===== 3. Problème rencontré : "Device or resource busy" =====
Au chargement du module, erreur classique sur ce type de carte mère (le BIOS réserve la plage I/O du chip IT87 via ACPI) :
modprobe: ERROR: could not insert 'it87': Device or resource busy
**Solution** : autoriser le noyau à ignorer cette réservation ACPI.
Éditer ''/etc/default/grub'' et ajouter le paramètre à la ligne ''GRUB_CMDLINE_LINUX_DEFAULT'' :
GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi_enforce_resources=lax"
Puis :
update-grub
reboot
Après redémarrage, le module se charge normalement :
modprobe coretemp
modprobe it87
sensors
Le chip ''it8792-isa-0a40'' doit apparaître avec ''fan1'', ''pwm1'', et les températures.
===== 4. Génération de la courbe avec pwmconfig =====
pwmconfig
Le programme teste chaque PWM en coupant brièvement le ventilateur pour voir lequel réagit. Sur cette machine, seul **fan1 / pwm1** est câblé (fan2 et fan3 à 0 RPM = headers non utilisés).
Une fois le test terminé, un menu apparaît :
Select fan output to configure, or other action:
1) hwmon2/pwm1
2) Change INTERVAL
3) Just quit
4) Save and quit
5) Show configuration
select (1-n):
Navigation à suivre :
- Choisir **1)** hwmon2/pwm1 pour configurer ce ventilateur
- Sélectionner la sonde de température source → **hwmon1/temp1_input** (température CPU "Package id 0")
- Renseigner les 3 valeurs demandées à la suite : température basse (**40**), température haute (**75**), PWM à utiliser au-dessus de la température haute (**255**)
- De retour au menu, choisir **5)** Show configuration pour vérifier ce qui a été enregistré
- Choisir **4)** Save and quit pour écrire ''/etc/fancontrol''
Courbe mesurée (PWM → RPM) :
PWM 255 → 3110 RPM (vitesse max)
PWM 135 → 894 RPM (zone stable la plus basse)
< PWM 135 → comportement instable (RPM qui remonte au lieu de descendre)
**Réglages retenus** (sonde de référence : ''hwmon1/temp1_input'' = température CPU "Package id 0") :
* MINTEMP = 40°C → en dessous, ventilateur au minimum
* MAXTEMP = 75°C → au-dessus, ventilateur à fond
* MINSTART = 150 → PWM nécessaire pour relancer le ventilateur à l'arrêt
* MINSTOP = 100 → **corrigé manuellement après coup** (pwmconfig avait mis 0 par défaut, ce qui aurait laissé le ventilateur descendre dans la zone instable sous PWM 135)
* MAXPWM = 255
===== 5. Fichier /etc/fancontrol final =====
# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=10
DEVPATH=hwmon1=devices/platform/coretemp.0 hwmon2=devices/platform/it87.2624
DEVNAME=hwmon1=coretemp hwmon2=it8792
FCTEMPS=hwmon2/pwm1=hwmon1/temp1_input
FCFANS= hwmon2/pwm1=hwmon2/fan1_input
MINTEMP=hwmon2/pwm1=40
MAXTEMP=hwmon2/pwm1=75
MINSTART=hwmon2/pwm1=150
MINSTOP=hwmon2/pwm1=100
MAXPWM=hwmon2/pwm1=255
Correction de MINSTOP après génération :
sed -i 's/MINSTOP=hwmon2\/pwm1=0/MINSTOP=hwmon2\/pwm1=100/' /etc/fancontrol
===== 6. Activation du service =====
systemctl enable --now fancontrol
systemctl status fancontrol
===== 7. Vérification =====
sensors | grep pwm1
watch -n 2 'sensors | grep -E "pwm1|Package"'
**Note** : le libellé ''MANUAL CONTROL'' affiché à côté de pwm1 est normal une fois fancontrol actif — il indique que le pilotage est fait en logiciel (par fancontrol) plutôt que par l'automatisme du BIOS. Ce n'est pas une erreur.
Pour valider le comportement : lancer une charge CPU et observer que le PWM augmente progressivement entre 40°C et 75°C, puis redescend au repos jusqu'à MINSTOP (100).
===== Résumé des commandes =====
apt install lm-sensors fancontrol
sensors-detect
# éditer /etc/default/grub : ajouter acpi_enforce_resources=lax
update-grub && reboot
modprobe coretemp it87
pwmconfig
nano /etc/fancontrol # vérifier/corriger MINSTOP
systemctl enable --now fancontrol