tiistaina, lokakuuta 20, 2026

Dell OptiPlex tuulettimen kontrollointi

Pöytätietokoneeni Dell OptiPlex 7000 firmware päivittyi versioon 1.43.0. Sen jälkeen koneen tuuletin on pitänyt ikävää mekkalaa, pyörien jatkuvasti 3 500 kierroksen nopeudella, joka aiheuttaa häiritsevää suhinaa.

Avasin koneen, irrotin tuulettimen ja katsoin, että johdot olivat varmasti oikeilla paikoillaan. Se ei auttanut, tuuletin jatkoi huutamista.

Löysin reddit-keskustelun, jossa kirjoittajalla oli samanlainen ongelma Dellinsä kanssa ja hän oli ratkaisuut sen kirjoittamalla Python ohjelman, joka säätää tuulettimen kierroksia sen lämpötilan mukaan sekunnin välein.

Ensimmäinen vaihe oli konvertoida skripti python3-yhteensopivaksi. 

Ubuntu 26.04 käyttää oletuksena apt-paketinhallintaa ja GRUB-käynnistyslataajaa (toisin kuin Reddit-oppaan Arch/Pacman-ympäristö). Jotta skripti toimii Ubuntu 26.04 -versiossa, kernel-asetukset ja moduulin oikeudet on konfiguroitava oikein Ubuntu-pohjaiselle järjestelmälle.

1. Esivalmistelut Ubuntu 26.04:ssä

Asenna tarvittavat työkalut:

bash
sudo apt update && sudo apt install lm-sensors python3 -y


Aja tunnistus (ja vastaa YES tai y kaikkiin kysymyksiin):


bash
sudo sensors-detect


2. Dell-ajurin pakotus ja rajoitusten poisto

Ubuntun oletusasetuksissa Dellin SMM-ajuri saattaa olla rajoitettu tai estetty (`restricted=1`). Luo tai päivitä ajurin asetustiedosto:

bash
sudo nano /etc/modprobe.d/dell_smm_hwmon.conf



Lisää tiedostoon seuraava rivi:

options dell_smm_hwmon force=1 restricted=0 ignore_dmi=1


Tallenna tiedosto (`Control+o`, Enter, sitten `Control+x`).

Lataa ajuri uudelleen, jotta muutokset astuvat voimaan heti:

bash
sudo modprobe -r dell_smm_hwmon
sudo modprobe dell_smm_hwmon force=1 restricted=0 ignore_dmi=1


3. Grub-käynnistysparametrit

Ubuntu 26.04 käyttää GRUBia. Lisää tarvittava parametri käynnistykseen:

Avaa GRUB-konfiguraatio tiedosto /etc/default/grub

Etsi rivi, joka alkaa `GRUB_CMDLINE_LINUX_DEFAULT`, ja lisää loppuun (ennen lainausmerkkiä) `dell_smm_hwmon.ignore_dmi=1`: 

 

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash dell_smm_hwmon.ignore_dmi=1"

Tallenna ja päivitä GRUB:


bash
sudo update-grub




4. Python3-skripti (`ultra_fan.py`)

Tässä on optimoitu ja nykyaikaisille Python 3 -standardeille päivitetty versio skriptistä, joka etsii `dell_smm`- ja `coretemp`-polut dynaamisesti.

Koodi löytyy githubista: ultra-fan

Tallenna koodi kotihakemistoosi nimellä `ultra_fan.py` ja anna sille suoritusoikeudet:

 

bash
chmod +x ~/ultra_fan.py


 

5. Järjestelmäpalvelun (Systemd) luominen

Ohjeistettu tarkemmin skriptin repositoryssä, Quickstart kohdassa.

 

Lopuksi

Voit tarkistaa tilatiedot ja livenä tulevat tulosteet komennolla:

bash
journalctl -u dell-fan.service -f




Tuloksen pitäisi näyttää tälle:

Klikkaamalla kuva suuremmaksi

 

Dell firmware riippuvuus

Tämä ei aluksi toiminut, mutta kun palautin edellisen 1.42.0 firmware-version koneeseen (Dell onneksi tukee edelliseen firmware-version palauttamista), yllä olevat muutokset toimivat! 

Näyttää sille, että  Dellin järjestelmähallinta (SMM, System Management Mode) estää käyttöjärjestelmää ottamasta suoraa kontrollia tuulettimen rekistereistä uudemmassa firmwaressa. Dell on kyseisessä 1.43.0 versiossa tiukentanut emolevyn turvatasoja ja lukinnut SMM-väylän niin, että käyttöjärjestelmän kautta tulevat kirjoituskomennot (pwm1_enable ja pwm1) torjutaan suoraan rautasuojauksella, mistä I/O error johtuu.

Kone toimii nyt lähes äänettömästi ja ultra_fan.py tarkkailee prosessorin lämpöä ja muokkaa tuulettimen kierroksia lennossa.

Otan kiitollisena vastaan mahdolliset parannukset ohjelmaan. 

Ei kommentteja:

Lähetä kommentti

Voit jättää kirjoitukseen liittyvän kommentin.