[Internal testing communication] NVIDIA GeForce 风扇控制配置详细使用 Resolved
Tofloor
poster avatar
LiuYongzhang
deepin
2025-12-19 19:19
Author

NVIDIA GeForce 风扇 手动开启并设置转速40%后,重新启动电脑就会重置,问了半天Ai 现在终于可以开机自动设置了。

以下是靠着Ai捣鼓半天的过程

image.png

核心新增功能

  1. 发行版自动识别:通过 /etc/os-release判断系统是 Debian 系(Deepin/Ubuntu)还是 RHEL 系(CentOS);
  2. 自动安装 nvidia-settings:未检测到命令时,根据系统自动执行 apt install/dnf install
  3. 安装后重新检测路径:确保安装完成后能获取到有效路径;
  4. 友好提示:非主流系统(如 Arch)会提示手动安装命令,避免脚本卡死。

全自动安装 + 路径读取脚本

创建 nvidia_fan_auto_install_fix.sh

#!/bin/bash
# NVIDIA风扇控制全自动脚本
# 功能:自动检测/安装nvidia-settings + 自动读路径 + 自动获取用户名 + 稳定调速 + 日志记录
# 适配:Debian/Deepin/Ubuntu/CentOS/RHEL | 所有NVIDIA显卡

# ========== 核心1:自动识别系统发行版 ==========
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        OS_VERSION=$VERSION_ID
    else
        echo -e "\033[31m错误:无法识别系统发行版!\033[0m"
        exit 1
    fi
}

# ========== 核心2:自动安装nvidia-settings ==========
install_nvidia_settings() {
    echo -e "\033[33m未检测到nvidia-settings,开始自动安装...\033[0m"
    detect_os
    case $OS in
        debian|ubuntu|deepin)
            sudo apt update && sudo apt install -y nvidia-settings
            ;;
        centos|rhel|fedora)
            # CentOS/RHEL需先启用NVIDIA仓库(简化版,优先用dnf)
            sudo dnf install -y nvidia-settings || sudo yum install -y nvidia-settings
            ;;
        *)
            echo -e "\033[31m不支持自动安装的系统:$OS\033[0m"
            echo "请手动安装nvidia-settings后重试:"
            echo "  - Debian/Ubuntu/Deepin: sudo apt install nvidia-settings"
            echo "  - CentOS/RHEL: sudo dnf install nvidia-settings"
            echo "  - Arch: sudo pacman -S nvidia-settings"
            exit 1
            ;;
    esac

    # 安装后重新检测路径
    NVIDIA_SETTINGS_CMD=$(command -v nvidia-settings)
    if [ -z "$NVIDIA_SETTINGS_CMD" ] || [ ! -x "$NVIDIA_SETTINGS_CMD" ]; then
        echo -e "\033[31m安装失败!请手动安装NVIDIA官方驱动后重试。\033[0m"
        exit 1
    fi
    echo -e "\033[32mnvidia-settings安装成功,路径:$NVIDIA_SETTINGS_CMD\033[0m"
}

# ========== 核心3:直接读取nvidia-settings路径(无则自动安装) ==========
NVIDIA_SETTINGS_CMD=$(command -v nvidia-settings)
if [ -z "$NVIDIA_SETTINGS_CMD" ] || [ ! -x "$NVIDIA_SETTINGS_CMD" ]; then
    install_nvidia_settings
fi
echo -e "\033[34m===== 确认nvidia-settings路径:$NVIDIA_SETTINGS_CMD =====\033[0m"

# ========== 核心4:自动获取当前用户名 ==========
USER_NAME=${SUDO_USER:-$(whoami)}
if ! id -u "$USER_NAME" >/dev/null 2>&1; then
    echo -e "\033[31m错误:获取的用户名$USER_NAME无效!\033[0m"
    exit 1
fi
echo -e "\033[34m===== 自动识别当前用户:$USER_NAME =====\033[0m"

# 核心参数(自动适配)
FAN_SPEED=40
LOG_FILE="/var/log/nvidia_fan.log"
SCRIPT_DIR="/home/$USER_NAME/.config/autostart-scripts"
SCRIPT_PATH="$SCRIPT_DIR/set_nvidia_fan.sh"
DESKTOP_FILE="/home/$USER_NAME/.config/autostart/set_nvidia_fan.desktop"
SUDOERS_FILE="/etc/sudoers.d/nvidia-fan-full"

# 颜色输出函数
red() { echo -e "\033[31m$1\033[0m"; }
green() { echo -e "\033[32m$1\033[0m"; }
yellow() { echo -e "\033[33m$1\033[0m"; }
blue() { echo -e "\033[34m$1\033[0m"; }

# 检查root权限
if [ $EUID -ne 0 ]; then
    red "错误:请使用sudo执行此脚本!"
    echo "示例:sudo bash $0"
    exit 1
fi

blue "===== 1. 创建自启目录 ====="
mkdir -p "$SCRIPT_DIR" "/home/$USER_NAME/.config/autostart"
chown -R "$USER_NAME:$USER_NAME" "/home/$USER_NAME/.config/"
green "✓ 自启目录已创建:$SCRIPT_DIR"

blue "===== 2. 配置sudo免密 ====="
cat > "$SUDOERS_FILE" << EOF
$USER_NAME ALL=(ALL) NOPASSWD: $NVIDIA_SETTINGS_CMD
$USER_NAME ALL=(ALL) NOPASSWD: /usr/bin/touch,/usr/bin/chmod,/usr/bin/chown,/bin/sh,/bin/grep,/usr/bin/head
EOF
chmod 0440 "$SUDOERS_FILE"
green "✓ sudo免密配置完成(包含nvidia-settings路径)"

blue "===== 3. 初始化日志文件 ====="
sudo rm -f "$LOG_FILE" && sudo touch "$LOG_FILE"
sudo chmod 644 "$LOG_FILE" && sudo chown root:adm "$LOG_FILE"
green "✓ 日志文件已配置:$LOG_FILE"

blue "===== 4. 生成自启脚本 ====="
cat > "$SCRIPT_PATH" << EOF
#!/bin/bash
# 等待桌面+X Server完全加载
sleep 20

# 核心参数(自动继承)
FAN_SPEED=$FAN_SPEED
LOG_FILE="$LOG_FILE"
USER_NAME="$USER_NAME"
NVIDIA_CMD="$NVIDIA_SETTINGS_CMD"

# 步骤1:3次重试设置风扇转速
SET_SUCCESS=0
for i in {1..3}; do
    sudo DISPLAY=:0 XAUTHORITY=/home/\$USER_NAME/.Xauthority \$NVIDIA_CMD -a "(gpu:0)/GPUFanControlState=1" -a "(fan:0)/GPUTargetFanSpeed=\$FAN_SPEED"
    if [ \$? -eq 0 ]; then
        SET_SUCCESS=1
        break
    fi
    sleep 3
done

# 步骤2:15秒等待风扇响应
sleep 15

# 步骤3:5次重试读取实际转速(容错)
ACTUAL_RPM=0
for i in {1..5}; do
    ACTUAL_RPM=\$(sudo DISPLAY=:0 XAUTHORITY=/home/\$USER_NAME/.Xauthority \$NVIDIA_CMD -q "[fan:0]/GPUCurrentFanSpeedRPM" --terse | grep -oP '\d+' | head -n1)
    if [ -n "\$ACTUAL_RPM" ] && [ "\$ACTUAL_RPM" -ne 0 ]; then
        break
    fi
    sleep 2
done

# 最终容错:避免0 RPM误报
if [ "\$ACTUAL_RPM" -eq 0 ] || [ -z "\$ACTUAL_RPM" ]; then
    ACTUAL_RPM="读取失败(目标$FAN_SPEED%已设置)"
fi

# 步骤4:写入日志(带设置状态)
SET_STATUS=\$([ \$SET_SUCCESS -eq 1 ] && echo "成功" || echo "失败(已重试3次)")
LOG_CONTENT="[\$(date '+%Y-%m-%d %H:%M:%S')] 风扇设置:目标转速\${FAN_SPEED}%(设置状态:\${SET_STATUS}),实际转速\${ACTUAL_RPM} RPM"
sudo sh -c "echo \\"\$LOG_CONTENT\\" >> \$LOG_FILE"

# 终端输出调试信息
echo "\$LOG_CONTENT"
EOF

# 设置脚本权限
chmod +x "$SCRIPT_PATH"
chown "$USER_NAME:$USER_NAME" "$SCRIPT_PATH"
green "✓ 自启脚本已生成:$SCRIPT_PATH"

blue "===== 5. 配置开机自启 ====="
cat > "$DESKTOP_FILE" << EOF
[Desktop Entry]
Type=Application
Name=NVIDIA Fan Control
Exec=$SCRIPT_PATH
Terminal=false
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
X-Deepin-Autostart-enabled=true
EOF
chown "$USER_NAME:$USER_NAME" "$DESKTOP_FILE"
green "✓ 开机自启项已配置:$DESKTOP_FILE"

blue "===== 6. 配置日志轮转 ====="
sudo tee /etc/logrotate.d/nvidia_fan >/dev/null << EOF
$LOG_FILE {
    monthly
    rotate 3
    compress
    missingok
    notifempty
    create 644 root adm
}
EOF
green "✓ 日志轮转配置完成:/etc/logrotate.d/nvidia_fan"

blue "===== 7. 立即执行脚本验证效果 ====="
echo -e "\033[34m---------- 执行脚本验证 ----------\033[0m"
su - "$USER_NAME" -c "bash $SCRIPT_PATH"

# 验证日志生成
if [ -s "$LOG_FILE" ]; then
    green "✓ 验证成功!日志内容:"
    cat "$LOG_FILE"
else
    yellow "⚠ 日志暂未生成,但所有配置已完成!"
    green "✓ 重启系统后,登录桌面35秒查看日志:cat $LOG_FILE"
fi

blue "===== 全自动配置完成总结 =====\033[0m"
green "✅ 核心配置信息:"
echo "   1. nvidia-settings路径:$NVIDIA_SETTINGS_CMD(自动安装/检测)"
echo "   2. 当前用户名:$USER_NAME(自动识别)"
echo "   3. 目标风扇转速:$FAN_SPEED%"
echo "   4. 自启脚本路径:$SCRIPT_PATH"
echo "   5. 日志文件路径:$LOG_FILE"
echo "   6. 开机自启:已启用(桌面加载20秒后执行)"
yellow "⚠ 重要提示:"
echo "   - 若风扇转速未生效,请确保安装的是NVIDIA官方驱动(非nouveau)"
echo "   - 重启系统后验证效果:cat $LOG_FILE"
green "常用调试命令:"
echo "   - 查看风扇状态:nvidia-smi --query-gpu=fan.speed --format=csv,noheader"
echo "   - 实时监控日志:tail -f $LOG_FILE"
echo "   - 手动执行脚本:bash $SCRIPT_PATH"

核心自动安装逻辑说明

# 先尝试读取路径,无则执行安装
NVIDIA_SETTINGS_CMD=$(command -v nvidia-settings)
if [ -z "$NVIDIA_SETTINGS_CMD" ] || [ ! -x "$NVIDIA_SETTINGS_CMD" ]; then
    install_nvidia_settings
fi

# 安装函数:识别系统后执行对应命令
install_nvidia_settings() {
    detect_os
    case $OS in
        debian|ubuntu|deepin) sudo apt install -y nvidia-settings ;;
        centos|rhel|fedora) sudo dnf install -y nvidia-settings ;;
        *) 提示手动安装 ;;
    esac
}
  • 系统识别:通过 /etc/os-release读取系统 ID(如 deepin/ubuntu/centos);
  • 自动安装:Debian 系用 apt,RHEL 系用 dnf/yum,其他系统提示手动命令;
  • 安装验证:安装后重新检测路径,确保安装成功才继续脚本。

使用方法(完全全自动,无需任何手动操作)

  1. 创建脚本文件:

    nano nvidia_fan_auto_install_fix.sh
    
  2. 粘贴上面的完整脚本,保存退出(Ctrl+OEnterCtrl+X);

  3. 赋予执行权限:

    chmod +x nvidia_fan_auto_install_fix.sh
    
  4. 执行脚本(sudo,自动处理所有步骤):

    sudo bash nvidia_fan_auto_install_fix.sh
    

执行流程说明

  1. 脚本先检测 nvidia-settings是否存在,不存在则自动识别系统并安装;
  2. 安装完成后读取实际路径,自动获取当前用户名;
  3. 创建自启目录、配置 sudo 免密、生成自启脚本、配置开机自启;
  4. 初始化日志文件、配置日志轮转;
  5. 立即执行脚本验证,输出日志内容。

关键特性总结

特性 说明
全自动安装 未安装 nvidia-settings时,根据系统自动执行 apt/dnf安装
路径直接读取 command -v直接获取实际路径,无预设列表,100% 适配
用户名自动识别 适配任意用户名,无硬编码
稳定调速 3 次重试设置 + 15 秒风扇响应等待,解决 0 RPM 误报
日志准确 写入 /var/log,包含设置状态 + 实际转速,支持轮转
全系统适配 支持 Deepin/Ubuntu/CentOS/RHEL,其他系统提示手动安装命令

注意事项

  • 自动安装仅适用于已安装 NVIDIA 官方驱动的系统(若未装驱动,nvidia-settings安装后也无法使用);
  • 非 Debian/RHEL 系系统(如 Arch)会提示手动安装命令,避免脚本执行失败;
  • 执行脚本时需确保网络通畅(自动安装需要下载包)。

这是最终完全自动化的脚本,无论你的系统是否安装 nvidia-settings、路径在哪里、用户名是什么,执行后都能一键完成所有配置,实现 NVIDIA 风扇稳定调速 + 开机自启 + 准确日志记录。

Reply Favorite View the author
All Replies
LiuYongzhang
deepin
2025-12-19 21:16
#1

经过生命不止就不停的折腾捣鼓

发现设置好配置后不要点nvidia控制面板的保存

要使用终端命令保存(不用加sudo)如图

nvidia-settings --rewrite-config-file

或使用简写形式 nvidia-settings -r

该命令的主要作用是:

  1. 读取当前配置:从 X 服务器获取当前的 NVIDIA 显卡配置
  2. 写入配置文件:将这些配置保存到默认的配置文件中
  3. 静默执行:执行完成后立即退出,不启动图形用户界面

不知道什么原理
image.png

Reply View the author
zijinyise
deepin
2025-12-20 08:34
#2

大佬真有研究精神👍

Reply View the author
新手小白
deepin
2025-12-20 09:42
#3
It has been deleted!
LiuYongzhang
deepin
2025-12-20 11:12
#4
新手小白 It has been deleted!

MControlCenter,一款专为MSI 笔记本电脑设计的 Linux 系统控制软件俺没有

970的显卡的风扇是温控的温度不到他不转,打开机箱摸着都烫手了还不转,搞得好像我缺风扇那点电费似的。

Reply View the author
LiuYongzhang
deepin
2025-12-20 11:32
#5
zijinyise

大佬真有研究精神👍

至少目前达到预期目的了:配置得以保存,开机显卡风扇自动打开40%

Reply View the author
heeroyuy86
deepin
2025-12-20 13:40
#6

不妨试试,操作简单;也是在本论坛,看到有大佬推荐过这个应用。

LACT

https://github.com/ilya-zlobintsev/LACT

3.png

1.png

Reply View the author
LiuYongzhang
deepin
2025-12-20 17:59
#7
heeroyuy86

不妨试试,操作简单;也是在本论坛,看到有大佬推荐过这个应用。

LACT

https://github.com/ilya-zlobintsev/LACT

3.png

1.png

安装了打不开,好像amd显卡的,不知道nvidia 能不能用

Reply View the author
heeroyuy86
deepin
2025-12-20 18:30
#8
LiuYongzhang

安装了打不开,好像amd显卡的,不知道nvidia 能不能用

1."AMD64"指的是 x86_64架构,A、N、I显卡都有支持。

2.链接访问的是页面便有指引。

1.png

3.如果是Deepin v25安装该应用的话,我个人不成熟的理解是选择“lact-0.8.3-0.amd64.debian-12.deb”;或者在flathub查找该应用,复制指引提供的命令安装也可以。

4.下图是硬件支持列表:

2.png

5.补充免责声明,该应用含有显卡超频等功能,本人仅提供有这么一个应用的参考,对于使用后的任何后果概不负责。

Reply View the author
LiuYongzhang
deepin
2025-12-20 18:37
#9
heeroyuy86

1."AMD64"指的是 x86_64架构,A、N、I显卡都有支持。

2.链接访问的是页面便有指引。

1.png

3.如果是Deepin v25安装该应用的话,我个人不成熟的理解是选择“lact-0.8.3-0.amd64.debian-12.deb”;或者在flathub查找该应用,复制指引提供的命令安装也可以。

4.下图是硬件支持列表:

2.png

5.补充免责声明,该应用含有显卡超频等功能,本人仅提供有这么一个应用的参考,对于使用后的任何后果概不负责。

这个可以
image.png

image.png
image.png

Reply View the author