[[Vorlage(Getestet, xenial)]] {{{#!vorlage Warnung Es sollte mit äußerster Aufmerksamkeit und Vorsicht vorgegangen werden, da bei falscher Handhabung die Hardware irreparabel beschädigt werden kann! }}} {{{#!vorlage Wissen [:Lm_sensors: LM-Sensors einrichten] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(2)]] 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#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:LM-Sensors] und eines Konfigurationsskriptes lassen sich die Lüfter im System, die per [wikipedia:Pulsweitenmodulation: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: {{{#!vorlage Paketinstallation fancontrol }}} = Konfiguration der Lüftersteuerung = == Welche Lüfter sind regelbar? == Man startet das Konfigurationsskript in einem Terminal mit [:sudo:Rootrechten] [2]: {{{#!vorlage Befehl 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 [[Vorlage(Tasten, 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 [[Vorlage(Tasten, 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 [[Vorlage(Tasten, 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 [[Vorlage(Tasten, ENTER)]] 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 [[Vorlage(Tasten, 1+Enter)]], 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 [[Vorlage(Tasten, ENTER)]] 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 [[Vorlage(Tasten, ENTER)]] 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 [[Vorlage(Tasten, t)]] die Lüfterdrehzahl in 10er-Schritten von 0-255 zu erhöhen, bis man den entsprechenden Wert gefunden hat und mit [[Vorlage(Tasten, 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 [[Vorlage(Tasten, 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 [[Vorlage(Tasten, 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 [[Vorlage(Tasten, 4+Enter)]]. Um die Drehzahl und Temperatur zu verfolgen, benutzt man LM-Sensors [3]. == Autostart einrichten == Falls ein Programm bereits beim Systemstart ausgeführt werden soll, verwendet man die Datei [:rc.local:/etc/rc.local]. Dabei spielt es keine Rolle, ob es sich um einen klassischen Dienst, ein alleinstehendes Programm oder ein Skript handelt. === Bei Ubuntu 12.10 === {{{#!vorlage Befehl sudo fancontrol }}} Die entsprechende Zeile für '''/etc/rc.local''' lautet also: {{{ fancontrol }}} Hinweis: Der Befehl ist zwischen "# By default this script does nothing." und " exit 0" einzutragen. Möglicherweise ist diese Art des Vorgehens mittlerweile auch bei 12.04 erforderlich. == 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. {{{#!vorlage Warnung 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. # tag: Hardware, System, Lüfter