Lapop fan Kontrol Programı var mı?

Lenovo Fan kontrol programı var mı ?
3 aydır kullanıyorum sevdim pardusu silesim yok bilgisayarım canlandı sanki

1 Beğeni

Donanım destekliyorsa kendiniz de yazabilirsiniz, Cursor, vscode vs gibi vibe coding araçları ile kolay şekilde yapılabilir

1 Beğeni

Genelde pek özel çabaya ihtiyaç duyulmadan otomatik kontrol altında iyi çalıştığından, özel ihtiyaca göre özel çaba sarf etmek gerekiyor.
Biraz İnternet arama motoru, biraz Yapay Zeka yardımıyla bir şeyler yapılabilir.
Burası (ve thinkfan kurup denemek) başlangıç noktası olabilir: Kevin Boone: Using thinkfan for fan control on Lenovo (Linux) laptops

1 Beğeni

Bir uygulama yazdım. Şu adımları takip edin:

1. Paketleri yükleme

Aşağıdaki komutları terminale yazın:

# Sistem paket listesini güncelle
sudo apt update

# Python ve PySide6 arayüz kütüphanesini kur
sudo apt install python3 python3-pip python3-pyside6 -y

# Sıcaklık okuma kütüphanesini kur
pip3 install psutil --break-system-packages

2. Bilgisayara programı tanıtma

Bu komutu da terminale eksiksiz yazın:

echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkpad_acpi.conf

ÖNEMLİ NOT: Bu ayarın bilgisayarınıza işlenmesi için bu komuttan sonra bilgisayarınızı bir kez yeniden başlatmalısınız.

3. Dosyayı oluşturma

Masaüstünde fankontrol.py adlı bir dosya oluşturun ve içine bunu kopyalayın:

import sys
import os
import psutil
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, 
                             QLabel, QSlider, QPushButton, QFrame, QMessageBox)
from PySide6.QtCore import QTimer, Qt

class FanKontrolleri(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Fan kontrolleri")
        self.setFixedSize(360, 480)
        
        self.driver, self.pwm_path, self.enable_path = self.detect_driver()
        self.init_ui()
        
        self.timer = QTimer()
        self.timer.timeout.connect(self.refresh)
        self.timer.start(2000)
        self.refresh()

    def detect_driver(self):
        if os.path.exists("/proc/acpi/ibm/fan"):
            return "lenovo", "/proc/acpi/ibm/fan", None
        
        hwmon_base = "/sys/class/hwmon"
        if os.path.exists(hwmon_base):
            for hwmon in os.listdir(hwmon_base):
                path = os.path.join(hwmon_base, hwmon)
                pwm_file = os.path.join(path, "pwm1")
                if os.path.exists(pwm_file):
                    en_file = os.path.join(path, "pwm1_enable")
                    return "hp_generic", pwm_file, en_file if os.path.exists(en_file) else None
        return None, None, None

    def init_ui(self):
        central = QWidget()
        self.setCentralWidget(central)
        layout = QVBoxLayout(central)
        
        self.setStyleSheet("""
            QMainWindow { background-color: #ECEFF1; }
            QLabel { color: #263238; font-family: sans-serif; }
            QPushButton { background-color: #1976D2; color: white; border-radius: 6px; padding: 12px; font-weight: bold; }
            QPushButton:hover { background-color: #1565C0; }
            QPushButton#btn_auto { background-color: #388E3C; }
            QPushButton#btn_auto:hover { background-color: #2E7D32; }
            QSlider::handle:horizontal { background: #1976D2; width: 20px; border-radius: 10px; }
            QFrame#card { background-color: white; border-radius: 12px; border: 1px solid #CFD8DC; }
        """)

        card = QFrame()
        card.setObjectName("card")
        card_layout = QVBoxLayout(card)

        self.lbl_temp = QLabel("Sıcaklık: Hesaplanıyor...")
        self.lbl_temp.setStyleSheet("font-size: 20px; font-weight: bold; color: #D32F2F;")
        card_layout.addWidget(self.lbl_temp)

        durum = "Bulunamadı (Yetki veya Sürücü Eksik)"
        if self.driver == "lenovo": durum = "Lenovo / Thinkpad (Tam Destek)"
        elif self.driver == "hp_generic": durum = "HP / Standart hwmon (Destekli)"
        
        self.lbl_driver = QLabel(f"Sistem: {durum}")
        self.lbl_driver.setStyleSheet("color: #546E7A; font-size: 11px;")
        card_layout.addWidget(self.lbl_driver)
        layout.addWidget(card)

        # GÜVENLİK: Minimum limitler belirlendi
        self.lbl_slider_info = QLabel("Fan Hızı (Güvenli Aralık)")
        layout.addWidget(self.lbl_slider_info)

        self.slider = QSlider(Qt.Horizontal)
        if self.driver == "lenovo":
            self.slider.setRange(2, 7)
        else:
            self.slider.setRange(80, 255) 
        layout.addWidget(self.slider)

        self.btn_set = QPushButton("HIZI SABİTLE (MANUEL)")
        self.btn_set.clicked.connect(self.apply_speed)
        self.btn_set.setEnabled(self.driver is not None)
        layout.addWidget(self.btn_set)

        self.btn_auto = QPushButton("OTOMATİK KONTROL (GÜVENLİ)")
        self.btn_auto.setObjectName("btn_auto")
        self.btn_auto.clicked.connect(self.set_auto)
        self.btn_auto.setEnabled(self.driver is not None)
        layout.addWidget(self.btn_auto)

        if not self.driver:
            QMessageBox.warning(self, "Donanım Bulunamadı", 
                "Fan dosyaları bulunamadı!\n\n1. Uygulamayı 'sudo' ile çalıştırmayı deneyin.\n2. HP Elitebook'lar için 'lm-sensors' paketini kurup terminalde 'sudo sensors-detect' komutunu çalıştırarak donanım taraması yapmanız gerekebilir.")

    def refresh(self):
        try:
            temps = psutil.sensors_temperatures()
            for name in ['coretemp', 'cpu_thermal', 'acpitz', 'pch_skylake', 'k10temp']:
                if name in temps and temps[name]:
                    t = int(temps[name][0].current)
                    self.lbl_temp.setText(f"İşlemci Sıcaklığı: {t}°C")
                    break
        except: pass

    def run_cmd(self, cmd):
        try: os.system(cmd)
        except: pass

    def apply_speed(self):
        val = self.slider.value()
        if self.driver == "lenovo":
            self.run_cmd(f'echo "level {val}" | sudo tee {self.pwm_path}')
        elif self.driver == "hp_generic":
            if self.enable_path:
                self.run_cmd(f'echo 1 | sudo tee {self.enable_path}')
            self.run_cmd(f'echo {val} | sudo tee {self.pwm_path}')

    def set_auto(self):
        if self.driver == "lenovo":
            self.run_cmd(f'echo "level auto" | sudo tee {self.pwm_path}')
        elif self.driver == "hp_generic" and self.enable_path:
            self.run_cmd(f'echo 2 | sudo tee {self.enable_path}')

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = FanKontrolleri()
    win.show()
    sys.exit(app.exec())

4. Uygulamayı çalıştırma

Terminale cd Masaüstü (veya kaydettiğiniz konumu) yazdıktan sonra şu komutu yazın:

sudo python3 fankontrol.py

Artık uygulamayı test edebilirsiniz ancak tehlikeli işlere (fan hızını 0/1 gibi değerlere almak veya işiniz bittiğinde otomatik moda geçmemek gibi) dikkat edin

1 Beğeni

Berkay,

Sistem paketlerini kırdırma insanlara. :wink:

yok ya venv ile uğraşmayalım diye yaptım yoksa bu da olur:

sudo apt install python3-psutil -y

nasıl yazacağım ? Bağlantı veya Eğitim içeren video bulabilir miyim ?

Önerebileceğim bu var çok ayrıntılı ve discord üzerinden geliştiricilere ulaşıp sorunumuda iletmiştim aktif en iyi fan control uygulması budur.

Bu konu son yanıttan 10 gün sonra otomatik olarak kapatıldı. Yeni yanıtlara artık izin verilmiyor.