Я собрал новый рабочий стол с графическим процессором Radeon RX5700 и системой Ubuntu 18.04. Вентилятор графического процессора вращается только тогда, когда я загружаю компьютер, а затем останавливается. Использование команды датчиков сообщает об ошибке:
$ sensors
amdgpu-pci-2f00
Adapter: PCI adapter
vddgfx: +0.78 V
ERROR: Can't get value of subfeature fan1_input: I/O error
fan1: N/A (min = 0 RPM, max = 3600 RPM)
edge: N/A (crit = +118.0°C, hyst = +0.0°C)
(emerg = +80000.0°C)
junction: N/A (crit = +80000.0°C, hyst = +0.0°C)
(emerg = +80000.0°C)
mem: N/A (crit = +80000.0°C, hyst = +0.0°C)
(emerg = +80000.0°C)
power1: 8.00 W (cap = 160.00 W)
Я не уверен, что здесь не так. У кого-нибудь есть решение?
Вам не нужно получать скорость вращения вентилятора. Утилита fancontrol работает очень хорошо без какой-либо информации о текущей скорости вращения вентилятора. Вы можете установить через
sudo apt-get install fancontrol
Мою конфигурацию fancontrol в /etc/fancontrol:
INTERVAL=10
DEVPATH=hwmon2=devices/platform/it87.2608 hwmon3=devices/pci0000:00/0000:00:01.0/0000:01:00.0
DEVNAME=hwmon2=it8728 hwmon3=amdgpu
FCTEMPS=hwmon3/pwm1=hwmon3/temp1_input
FCFANS=hwmon3/pwm1=hwmon2/fan1_input
MINTEMP=hwmon3/pwm1=60
MAXTEMP=hwmon3/pwm1=100
MINSTART=hwmon3/pwm1=60
MINSTOP=hwmon3/pwm1=20
MINPWM=hwmon3/pwm1=0
MAXPWM=hwmon3/pwm1=255
Мой корпус резонирует на некоторых частотах, поэтому я написал скрипт на Python для перехода на эти частоты (Fan RPMS). Это работает очень хорошо для меня. Я запускаю его поверх управления вентилятором ... если он каким-то образом выходит из строя, управление вентилятором берет на себя ... Вот почему time.sleep составляет 0,25 секунды, если срабатывает более длительное управление вентилятором ...
Мой скрипт python:
import os,time
from subprocess import Popen
from subprocess import PIPE
os.system('echo auto > /sys/class/drm/card0/device/power_dpm_force_performance_level')
keepcooling=False
while True:
time.sleep(0.25)
with Popen(["cat","/sys/class/drm/card0/device/hwmon/hwmon3/temp1_input"], stdout=PIPE) as proc:
fantemp=int(proc.stdout.read().decode('ascii'))
temp=fantemp/1000
if temp <=45:
fanpwm=0
if temp >45 and temp <= 75:
fanpwm=temp
if (temp >75 ) and (temp <=95):
fanpwm=temp+55
if temp>95:
fanpwm=200
keepcooling=True; #cool until 80C reached
if temp>=100:
os.system('reboot')
if temp<=80:
keepcooling=False
if keepcooling and temp > 80:
fanpwm=200
print('temp',temp,'fanpwm',int(fanpwm))
os.system('echo '+str(int(fanpwm))+' > /sys/class/drm/card0/device/hwmon/hwmon3/pwm1')
# print('echo '+str(int(fanpwm))+' > /sys/class/drm/card0/device/hwmon/hwmon3/pwm1')
Be тщательно настроить и проверить много раз, если вы хотите использовать его. Мониторить можно через лм-сенсоры и псенсоры... и скорость вентилятора через
cat /sys/class/drm/card0/device/hwmon/hwmon3/pwm1