Okay, super, dann dürfte mein Skript auch bei dir funktionieren. Ich versuche, es so genau wie möglich zu beschreiben:
Als erstes einen Ordner und darin das Skript anlegen:
Code:
sudo mkdir /opt/radeon_fanctl
sudo nano /opt/radeon_fanctl/radeon_fanctl.sh
Dann folgenden Code reinkopieren:
Code:
#!/bin/bash
#Enable manual PWM control
echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable
TEMP_IDLE=52
TEMP_LOW=56
TEMP_MID=66
TEMP_HIGH=72
TEMP_DELTA=5
FACTOR=1000
FACTOR2=10000
FACTOR_PWM1=16
FACTOR_PWM2=13
FACTOR_PWM3=14
PWM_IDLE=1
while true
do
TEMP=$(/usr/bin/cat /sys/class/drm/card0/device/hwmon/hwmon0/temp1_input)
PWM_FACT1=$(($TEMP*$FACTOR_PWM1))
PWM_FACT1=$(($PWM_FACT1/$FACTOR2))
PWM_FACT2=$(($TEMP*$FACTOR_PWM2))
PWM_FACT2=$(($PWM_FACT2/$FACTOR2))
PWM_FACT3=$(($TEMP*$FACTOR_PWM3))
PWM_FACT3=$(($PWM_FACT3/$FACTOR2))
TEMP=$(($TEMP/$FACTOR))
if [ $TEMP -gt $TEMP_HIGH ]
then
echo $PWM_FACT1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1
else
if [ $TEMP -gt $TEMP_MID ] && [ $TEMP -lt $(($TEMP_HIGH-$TEMP_DELTA)) ]
then
echo $PWM_FACT3 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1
else
if [ $TEMP -gt $TEMP_LOW ] && [ $TEMP -lt $(($TEMP_MID-$TEMP_DELTA)) ]
then
echo $PWM_FACT2 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1
else
if [ $TEMP -lt $TEMP_IDLE ]
then
echo $PWM_IDLE > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1
fi
fi
fi
fi
sleep 3
done
Danach nano mit STRG+X schließen und mit Y bestätigen und Enter drücken damit es gespeichert wird.
Anschließend die Datei ausführbar machen:
Code:
sudo chmod +x /opt/radeon_fanctl/radeon_fanctl.sh
Da das Skript von alleine im Hintergrund laufen und automatisch gestartet werden soll, müssen wir noch einen Systemd-Service anlegen. Dazu folgendes ausführen:
Code:
sudo nano /etc/systemd/system/radeon_fanctl.service
Anschließend folgenden Code einfügen:
Code:
[Unit]
Description=Run fan control for Radeon card
[Service]
Type=simple
ExecStartPre=/bin/sleep 8
ExecStart=/opt/radeon_fanctl/radeon_fanctl.sh
[Install]
WantedBy=multi-user.target
Wie gehabt, mit STRG+X beenden, mit Y und anschließend Enter das Speichern bestätigen.
Als letztes noch Systemd sagen, dass der Service bei jedem Start geladen werden soll:
Code:
sudo systemctl enable radeon_fanctl.service
Noch ein paar Hinweise zum Skript:
Das Skript hat mehrere Variablen, die du nach deinem Belieben einstellen kannst:
TEMP_IDLE: Unterhalb der Temperatur wird PWM_IDLE angewandt, das ist die niedrigste Lüfterdrehzahl. Für dich habe ich "1" für zero fan eingestellt.
TEMP_LOW, TEMP_MID und TEMP_HIGH: Das sind die Schwellen, oberhalb denen die Steilheit der Lüfterkurve geändert wird.
Die Steilheit steckt in den Variablen FACTOR_PWM1 bis FACTOR_PWM3. Die Temperatur wird mit dem Faktor multipliziert, was den PWM-Wert, der angelegt wird, ergibt.
TEMP_DELTA: Das ist die Hysterese, damit die Lüfterdrehzahl nicht springt, wenn die Temperatur zwischen zwei Schwellen toggelt.
Beachte, dass TEMP_LOW, TEMP_MID und TEMP_HIGH sich mindestens um TEMP_DELTA +1 untescheiden müssen.
FACTOR und FACTOR2 sind nur da, um die Temperatur und das Produkt aus Temperatur und PWM-Faktor zu normieren, da der gelesene Temperaturwert um Faktor 1000 zu groß ist.
Falls noch etwas unklar ist, einfach fragen.