Lüftersteuerung
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Achtung!
Es sollte mit äußerster Aufmerksamkeit und Vorsicht vorgegangen werden, da bei falscher Handhabung die Hardware irreparabel beschädigt werden kann!
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Die Anleitung kann für Nutzer sinnvoll sein, bei denen der CPU-Lüfter ständig auf höchster Drehzahl läuft und deshalb viel Lärm verursacht. IBM/Lenovo Thinkpad-Notebooks können nicht mit LM-Sensors gesteuert werden. Bei diesen Notebooks hilft der Artikel Thinkpad ACPI (Abschnitt „Luefter“) weiter. Das betrifft auch zumindest einige Dell-Notebooks. Diese kann man mit den i8kutils
steuern, wobei auch eine automatische Steuerung direkt integriert ist.
Voraussetzungen¶
Mit Hilfe von LM-Sensors und eines Konfigurationsskriptes lassen sich die Lüfter im System, die per PWM angesteuert werden können, dynamisch anhand der Temperatur (z.B. der CPU) steuern. Voraussetzung für diese Anleitung ist die korrekte Installation und Konfiguration des Programms LM-Sensors [1] und die Installation von fancontrol:
fancontrol
Befehl zum Installieren der Pakete:
sudo apt-get install fancontrol
Oder mit apturl installieren, Link: apt://fancontrol
Konfiguration der Lüftersteuerung¶
Welche Lüfter sind regelbar?¶
Man startet das Konfigurationsskript in einem Terminal mit Rootrechten [2]:
sudo pwmconfig
Das Skript versucht nun festzustellen, welche Lüfter sich kontrollieren lassen. Dazu versucht es, einen Lüfter für 5 Sekunden anzuhalten - sollte das geschehen sein, bestätigt man die darauf folgende Abfrage mit Y . Es kann vorkommen, dass eine Fehlermeldung angezeigt wird und der Lüfter noch einmal abgeschaltet werden soll. Dies sollte durchgeführt und die folgende Abfrage wieder mit Y beantwortet werden. Nun sollte es funktionieren.
Lüfter konfigurieren¶
Hat man einen zu regelnden Lüfter gefunden, kann man ihn nach der entsprechenden mit Y zu bestätigenden Abfrage wie folgt konfigurieren:
What should be the path to your fancontrol config file (/etc/fancontrol)
Wenn die Konfigurationsdatei noch nicht vorhanden ist, dann wird sie von dem Skript erstellt. Man bestätigt die Abfrage dafür mit ⏎
Man erhält nun ein Menü ähnlich dem folgenden:
fan output to configure, or other action: 1) 9191-0290/pwm2 3) Just quit 5) Show configuration 2) Change INTERVAL 4) Save and quit
Nun drückt man 1 + ⏎ , um den entsprechenden Lüfter zu konfigurieren. Man wird nun nach dem Temperatursensor gefragt, nach dem sich die Drehzahl richten soll:
Select a temperature sensor as source for 9191-0290/pwm2: 1) 9191-0290/temp1_input 2) 9191-0290/temp2_input 3) None (Do not affect this PWM output)
Nun wählt man die entsprechende Nummer und bestätigt sie mit ⏎
Man wird nun nach der Temperatur gefragt, bei der sich der Lüfter ausschalten kann:
Enter the low temperature (C) at which the fan should be switched off (0):
Jetzt wählt man nach Prozessor und Kühler-/Lüfterkombination einen relativ niedrigen Wert (auf die Herstellerangaben der CPU achten!) und bestätigt sie mit ⏎
Nun wird festgelegt, bei welcher Temperatur der Lüfter auf seine maximale Drehzahl gebracht werden soll:
Enter the high temperature (C) at which the fan should be switched to full speed (60):
Auch hier achtet man auf die Angaben des Herstellers zur maximalen Prozessortemperatur. Man gibt am besten einen Wert an, der etwas darunter liegt.
Jetzt wird man nach der Geschwindigkeit gefragt, mit der der Lüfter beginnen soll, sich zu drehen, sobald die Minimaltemperatur, die man im ersten Schritt festgelegt hat, überschritten wird:
Enter the minimum PWM value (0-255) at which the fan STARTS spinning (press t to test) (150):
Man kann einen Wert von 0 (Lüfter aus)
bis 255 (maximale Drehzahl)
eingeben.
Außerdem hat man die Möglichkeit, mit der Taste T die Lüfterdrehzahl in 10er-Schritten von 0-255 zu erhöhen, bis man den entsprechenden Wert gefunden hat und mit Y bestätigt. Man sollte sich mit dem "Durchtesten" beeilen, da der Lüfter während des Testens vermutlich nicht mit der erforderlichen Drehzahl arbeitet und das im schlimmsten Fall zu einer Überhitzung führen kann.
Jetzt wird man nach der Geschwindigkeit gefragt, mit welcher der Lüfter gerade noch am Laufen ist. Dies beschreibt den Zustand, der erreicht wird, wenn von einer höheren Temperatur erfolgreich heruntergekühlt wurde:
Enter the minimum PWM value (0-255) at which the fan STOPS spinning (press t to test) (100):
Auch hier kann man wieder T eingeben, um die optimale Einstellung herauszufinden - nur diesmal von "maximaler Geschwindigkeit" bis "dreht sich gar nicht". Wenn der Lüfter nun aufhört sich zu drehen oder kurz davor ist, drückt man wieder Y .
Man sieht nun wieder folgendes Menü:
Select fan output to configure, or other action: 1) 9191-0290/pwm2 3) Just quit 5) Show configuration 2) Change INTERVAL 4) Save and quit
Jetzt speichert und beendet man die Konfiguration mit 4 + ⏎ . Um die Drehzahl und Temperatur zu verfolgen, benutzt man LM-Sensors [3].
Lüftersteuerung testen¶
sudo fancontrol
Strg + C bricht den laufenden Befehl ab.
Autostart einrichten¶
Für Systeme mit Systemd (Ubuntu 16.04 und neuer) wird der Autostart automatisch eingerichtet.
Deaktivieren lässt sich der Autostart mit:
sudo systemctl disable fancontrol
bzw. mit
sudo systemctl enable fancontrol
wieder reaktivieren.
Problembehebung¶
Drehzahl beim Beenden der Steuerung¶
Beim Beenden der Lüftersteuerung, z.B. wenn der Computer herunter gefahren wird, kann es auf einigen Systemen vorkommen, dass der Lüfter dann mit voller Drehzahl betrieben wird. Um dies zu unterbinden, kann man am Skript selber eine kleine Anpassung vornehmen. Dazu öffnet man mit einem Editor die Datei /usr/sbin/fancontrol und kommentiert in der Methode restorefans() die Zeile mit dem Eintrag pwmdisable $pwmo aus und fügt anschließend eine neue Zeile ein:
echo `expr ${AFCMAXPWM[$fcvcount]} - 25` > $pwmo
Sie bewirkt, dass der Lüfter beim Beenden der Lüftersteuerung mit dem in der /etc/fancontrol angegebenen Maximalwert minus 25 angesteuert wird.
Achtung!
Hierbei ist unbedingt zu beachten, dass auch mit dieser Einstellung die Komponenten immer noch genügend gekühlt werden müssen! Wird der Wert zu gering gesetzt, so kann es zur Beschädigung der Hardware führen! Dieses ist daher vorher für die eigene Hardware individuell zu ermitteln und zu testen.
Lüfter werden nach Ruhezustand/Energiesparmodus nicht mehr angesteuert¶
Nach einem Aufwecken aus dem Energiesparmodus oder Ruhezustand kann es auf einigen System vorkommen, dass die Lüfter nicht mehr auf eine manuelle Steuerung konfiguriert sind. Hier kann es sinnvoll sein, das Script dahingehend anzupassen, dass die Lüfter neu initialisiert werden, wenn fancontrol längere Zeit pausiert wurde. Dafür mit einem Editor /usr/sbin/fancontrol bearbeiten:
echo 'Starting automatic fan control...' # main loop calling the main function at specified intervals while true do UpdateFanSpeeds # Sleep while still handling signals sleep $INTERVAL & wait done
Dafür die oberen Zeilen gegen die unteren austauschen.
echo 'Starting automatic fan control...' TICK_LAST=$(date +%s) # main loop calling the main function at specified intervals while true do TICK_NOW=$(date +%s) if [ $(($TICK_NOW - $TICK_LAST)) -ge $(($INTERVAL * 5)) ];then echo 'fancontrol was paused for about '$(($TICK_NOW - $TICK_LAST))' seconds! (Hibernation, suspend or freeze?)' echo 'Re-enabling PWM on fans to be on the safe side...' let fcvcount=0 while (( $fcvcount < ${#AFCPWM[@]} )) # go through all pwm outputs do pwmo=${AFCPWM[$fcvcount]} pwmenable $pwmo if [ $? -ne 0 ] then echo "Error enabling PWM on $DIR/$pwmo" >&2 restorefans 1 fi let fcvcount=$fcvcount+1 done fi TICK_LAST=$TICK_NOW UpdateFanSpeeds # Sleep while still handling signals sleep $INTERVAL & wait done
Zur Erklärung: In jedem Intervall wird die aktuelle Zeit mit der des letzten Zyklus verglichen. Ist der letzte Zyklus länger als Intervall * 5 Sekunden her, so ist davon auszugehen, dass das System pausiert wurde und die Lüfter werden neu initialisiert.