====== 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