В Linux кулеры медленно вращаются. Настройка автоматизации работы кулеров в iMac после замены видеокарты

1. # Создайте директорию если нет

sudo mkdir -p /usr/local/bin

2. # Создайте скрипт

sudo nano /usr/local/bin/imac_fan_daemon.sh

3. Содержание файла:

#!/bin/bash

# Демон управления вентиляторами iMac 2011
# Автоматическая регулировка скорости на основе температуры CPU

echo "========================================="
echo " Запуск демона управления вентиляторами"
echo " iMac 2011 27\""
echo "========================================="
echo ""

# Включаем ручной режим для всех вентиляторов
echo "Включаем ручное управление вентиляторами..."
for i in 1 2 3; do
if [ -f "/sys/devices/platform/applesmc.768/fan${i}_manual" ]; then
echo 1 > "/sys/devices/platform/applesmc.768/fan${i}_manual"
echo " Fan$i: ручной режим включен"
fi
done

echo ""
echo "Начальные значения:"
for i in 1 2 3; do
if [ -f "/sys/devices/platform/applesmc.768/fan${i}_input" ]; then
current_rpm=$(cat "/sys/devices/platform/applesmc.768/fan${i}_input")
label=$(cat "/sys/devices/platform/applesmc.768/fan${i}_label" 2>/dev/null || echo "Unknown")
min_rpm=$(cat "/sys/devices/platform/applesmc.768/fan${i}_min")
max_rpm=$(cat "/sys/devices/platform/applesmc.768/fan${i}_max")
echo " Fan$i ($label): $current_rpm RPM (min: $min_rpm, max: $max_rpm)"
fi
done

echo ""
echo "Датчики температуры:"
sensors | grep -E "TC0P|TG0H|Tp2H|TPCD" | head -5

echo ""
echo "========================================="
echo "Начинаем мониторинг температуры..."
echo "Нажмите Ctrl+C для остановки"
echo "========================================="

# Основной цикл управления
while true; do
# Получаем температуру CPU из разных источников
TEMP1=$(sensors | grep 'TC0P' | awk '{print $2}' | sed 's/[+°C]//g' | cut -d. -f1)
TEMP2=$(sensors | grep 'Core 0' | awk '{print $3}' | sed 's/[+°C]//g' | cut -d. -f1 2>/dev/null || echo "0")

# Используем первый доступный датчик
if [ -n "$TEMP1" ] && [ "$TEMP1" != "" ]; then
TEMP=$TEMP1
SENSOR="TC0P"
elif [ -n "$TEMP2" ] && [ "$TEMP2" != "0" ]; then
TEMP=$TEMP2
SENSOR="Core 0"
else
TEMP=50
SENSOR="default"
fi

# Определяем RPM на основе температуры
if [ $TEMP -lt 40 ]; then
RPM=1200
LEVEL="Низкая"
elif [ $TEMP -lt 50 ]; then
RPM=1800
LEVEL="Средняя"
elif [ $TEMP -lt 60 ]; then
RPM=2500
LEVEL="Выше среднего"
elif [ $TEMP -lt 70 ]; then
RPM=3500
LEVEL="Высокая"
elif [ $TEMP -lt 80 ]; then
RPM=4500
LEVEL="Очень высокая"
else
RPM=5500
LEVEL="КРИТИЧЕСКАЯ!"
fi

# Устанавливаем RPM для всех вентиляторов
for i in 1 2 3; do
if [ -f "/sys/devices/platform/applesmc.768/fan${i}_output" ]; then
# Проверяем границы
min_rpm=$(cat "/sys/devices/platform/applesmc.768/fan${i}_min")
max_rpm=$(cat "/sys/devices/platform/applesmc.768/fan${i}_max")

if [ $RPM -lt $min_rpm ]; then
actual_rpm=$min_rpm
elif [ $RPM -gt $max_rpm ]; then
actual_rpm=$max_rpm
else
actual_rpm=$RPM
fi

echo $actual_rpm > "/sys/devices/platform/applesmc.768/fan${i}_output"
fi
done

# Получаем текущие RPM для отображения
fan1_rpm=$(cat "/sys/devices/platform/applesmc.768/fan1_input" 2>/dev/null || echo "N/A")
fan2_rpm=$(cat "/sys/devices/platform/applesmc.768/fan2_input" 2>/dev/null || echo "N/A")
fan3_rpm=$(cat "/sys/devices/platform/applesmc.768/fan3_input" 2>/dev/null || echo "N/A")

# Выводим информацию
echo "[$(date '+%H:%M:%S')] ${SENSOR}: ${TEMP}°C (${LEVEL}) -> RPM: ${actual_rpm} | Fan1: ${fan1_rpm} Fan2: ${fan2_rpm} Fan3: ${fan3_rpm}"

# Интервал проверки (секунды)
sleep 3
done

# При завершении возвращаем автоуправление (если скрипт завершится не по Ctrl+C)
echo ""
echo "Возвращаем автоуправление вентиляторами..."
for i in 1 2 3; do
if [ -f "/sys/devices/platform/applesmc.768/fan${i}_manual" ]; then
echo 0 > "/sys/devices/platform/applesmc.768/fan${i}_manual"
fi
done
echo "Демон остановлен."

4. Сделать скрипт исполняемым:

sudo chmod +x /usr/local/bin/imac_fan_daemon.sh

5. Тестовый запуск

sudo /usr/local/bin/imac_fan_daemon.sh

6. Создать службу для автоматического запуска:

sudo nano /etc/systemd/system/imac-fans.service

7. Содержание файла

[Unit]
Description=iMac Fan Control Service
After=multi-user.target
After=lm_sensors.service

[Service]
Type=simple
ExecStart=/usr/local/bin/imac_fan_daemon.sh
Restart=always
RestartSec=5
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

8.  Обновите systemd

sudo systemctl daemon-reload

9. Включите автозагрузку

sudo systemctl enable imac-fans.service

10. Запустите службу

sudo systemctl start imac-fans.service

11. Проверьте статус

sudo systemctl status imac-fans.service

12. Посмотрите логи

sudo journalctl -u imac-fans.service -f

13.  Проверьте текущие RPM

for i in 1 2 3; do
echo "Fan$i: $(cat /sys/devices/platform/applesmc.768/fan${i}_input) RPM"
done

# Проверьте режим управления
for i in 1 2 3; do
echo "Fan$i manual mode: $(cat /sys/devices/platform/applesmc.768/fan${i}_manual)"
done

14. Если нужно остановить службу: (на всякий случай)

sudo systemctl stop imac-fans.service

15. Скидываемся мне на TpLink

Прочитано 18 раз