HP Victus(光影精灵 10)在 Ubuntu 下的风扇控制修复
记录光影精灵 10 在 Ubuntu 下使用 omen-fan-control 恢复风扇转速读取、PWM 手动控制、自动曲线与 GUI 的完整过程。
安装 Ubuntu 后,我的 HP Victus(光影精灵 10)出现了风扇无法正常控制的问题。经过排查,最终通过开源项目 omen-fan-control 恢复了风扇转速读取、PWM 手动控制、自动曲线与 GUI。
这篇文章整理了本次排查中真正有效的步骤,方便以后重装 Ubuntu 或升级内核后快速恢复。
修改内核驱动和散热控制逻辑存在风险。首次操作应先使用临时安装,确认转速读取、PWM 控制和温度均正常后,再进行永久安装。项目本身也明确声明不对硬件损坏或系统不稳定负责。
已验证环境
本次实际跑通的环境如下:
| 项目 | 信息 |
|---|---|
| 机型 | Victus by HP Gaming Laptop 16-r0xxx |
| 中文型号 | 光影精灵 10 |
| Product SKU | 8C5U0PA#AB2 |
| 主板 | 8BC2 |
| BIOS | F.26 |
| Ubuntu | 26.04 |
| Kernel | 7.0.0-28-generic |
最终验证结果:
| 功能 | 结果 |
|---|---|
fan1 / fan2 转速读取 | 正常 |
| PWM 手动控制 | 正常 |
| Auto 模式 | 正常 |
| Manual 模式 | 正常 |
| Max 模式 | 正常 |
| Curve 模式 | 正常 |
| GUI | 正常 |
omen-fan-control 面向 HP OMEN、OMEN Max 与 Victus Linux 用户,通过修改版 hp-wmi 驱动暴露 PWM 接口,并提供 CLI、GUI、风扇曲线和后台服务。具体能力与最新安装方法应以项目 README为准。
安装前检查
查看机器信息
先确认机型、主板、BIOS 和当前内核:
1
2
3
4
5
echo "机型:$(cat /sys/class/dmi/id/product_name)"
echo "SKU:$(cat /sys/class/dmi/id/product_sku)"
echo "主板:$(cat /sys/class/dmi/id/board_name)"
echo "BIOS:$(cat /sys/class/dmi/id/bios_version)"
echo "内核:$(uname -r)"
在我的机器上,关键输出为:
1
2
3
4
机型:Victus by HP Gaming Laptop 16-r0xxx
SKU:8C5U0PA#AB2
主板:8BC2
BIOS:F.26
加载并检查 hp_wmi 驱动:
1
2
sudo modprobe hp_wmi
lsmod | grep hp_wmi
如果输出中存在 hp_wmi,说明驱动已经加载。
先检查原生驱动是否已经支持
Linux 内核仍在更新相关支持。以后重装 Ubuntu 或升级内核时,应先检查原生 hp_wmi 是否已经提供所需接口,不要直接安装补丁驱动。
1
2
3
find /sys/devices/platform/hp-wmi -type f \
\( -name 'fan*_input' -o -name 'pwm1' -o -name 'pwm1_enable' \) \
-print 2>/dev/null
理想情况下应同时存在:
1
2
3
4
fan1_input
fan2_input
pwm1
pwm1_enable
如果四个接口已经齐全,可以先跳到后文的“日常使用”进行测试;如果缺少 pwm1 或其他关键接口,再考虑安装 omen-fan-control 的补丁驱动。
安装 omen-fan-control
安装依赖
1
2
3
4
5
6
7
8
9
10
sudo apt update
sudo apt install -y \
git \
dkms \
build-essential \
linux-headers-$(uname -r) \
python3-click \
python3-pyqt6 \
mokutil
项目需要当前内核对应的 headers、编译工具、Click 和 PyQt6。某些 Debian/Ubuntu 内核还需要额外的 common headers 或 kbuild 软件包;如果编译提示缺少内核构建文件,应按照项目 README 的 Dependencies 部分补齐与当前内核匹配的软件包。
下载项目
我将项目放在 ~/下载/:
1
2
3
cd ~/下载
git clone https://github.com/arfelious/omen-fan-control.git
cd omen-fan-control
确认源码中仍包含 8BC2
项目会继续更新,所以每次重新下载后都建议检查一次:
1
grep -n "8BC2" -C 10 hp-wmi.c
本次使用的源码中可以看到:
1
2
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BC2") },
.driver_data = (void *)&omen_v1_thermal_params,
当前仓库的 hp-wmi.c 仍包含这项映射。不过,项目 README 的 Tested Hardware 列表没有明确列出 8BC2,因此本文只能说明这台具体机器实测可用,不能视作项目对所有 8BC2 机器的官方保证。
如果未来版本中找不到 8BC2,不要盲目安装,应重新确认项目的机型支持情况。
临时安装与验证
准备初始配置
本次安装曾遇到两条提示:
1
2
WARNING: Your board '8BC2' is not in the known compatible list.
Error: Please calibrate or set Manual Max RPM in Options.
虽然驱动源码中包含 8BC2,项目当时的已验证白名单并未包含它。为继续临时测试,先创建配置:
1
2
3
4
5
6
7
8
sudo mkdir -p /etc/omen-fan-control
sudo tee /etc/omen-fan-control/config.json > /dev/null <<'EOF'
{
"bypass_patch_warning": true,
"fan_max": 6000
}
EOF
检查文件内容:
1
cat /etc/omen-fan-control/config.json
其中 6000 只是用于第一次安装时通过最大转速检查的初始值;这台机器之后实际校准得到约 6100 RPM。
bypass_patch_warning会绕过项目的兼容性警告。只有在确认源码映射、了解风险并准备使用临时驱动测试时才应启用。
首次只安装临时驱动
不要一开始就永久替换驱动。先执行:
1
2
cd ~/下载/omen-fan-control
sudo python3 omen_cli.py install-patch temporary
本次成功时输出:
1
2
Installing temporary driver...
Temporary driver installed successfully.
临时安装只对当前启动周期有效,重启后恢复,适合首次验证。项目也同时提供 temporary 和 permanent 两种驱动安装方式。
检查驱动接口
检查 PWM 接口:
1
find /sys/devices/platform/hp-wmi -name "pwm*"
本次成功后得到:
1
2
/sys/devices/platform/hp-wmi/hwmon/hwmon6/pwm1_enable
/sys/devices/platform/hp-wmi/hwmon/hwmon6/pwm1
再检查转速接口:
1
find /sys/devices/platform/hp-wmi -name "fan*_input"
应当看到:
1
2
fan1_input
fan2_input
hwmon6 中的数字可能在每次启动后变化,不要在脚本中把它写死。真正需要确认的是下面四个接口:
1
2
3
4
fan1_input
fan2_input
pwm1
pwm1_enable
查看状态并校准
1
2
cd ~/下载/omen-fan-control
sudo python3 omen_cli.py status
本次临时驱动正常工作时显示:
1
2
3
4
Driver Install: Temporary (Session)
Driver Mode: Max
Fan Speed: 6100 RPM
CPU Temp: 47°C
底层曾读取到:
1
2
fan1 = 5800 RPM
fan2 = 6100 RPM
确认驱动正常后进行最大转速校准:
1
sudo python3 omen_cli.py calibrate
程序会询问:
1
This will spin fans at max speed for calibration. Continue? [y/N]:
输入 y 后,本机最终得到:
1
Calibration finished. Max RPM: 6100
也就是说,这台机器本次实测最大风扇转速约为 6100 RPM。
测试手动控制
先从 50% 开始:
1
2
sudo python3 omen_cli.py fan-control --mode manual --value 50%
sudo python3 omen_cli.py status
确认风扇声音、RPM 与 CPU 温度均有合理变化后,再尝试其他模式:
1
2
3
4
5
6
7
8
# 手动 70%
sudo python3 omen_cli.py fan-control --mode manual --value 70%
# 最大转速
sudo python3 omen_cli.py fan-control --mode max
# 恢复自动控制
sudo python3 omen_cli.py fan-control --mode auto
项目 README 也给出了 Manual、Curve 与 Auto 模式的 CLI 用法。
永久安装
只有在临时模式下确认以下项目全部正常后,才进行永久安装:
- 能读取
fan1和fan2的 RPM; pwm1与pwm1_enable均存在;- Manual 和 Auto 模式切换有效;
- 温度与风扇行为正常。
执行:
1
2
3
cd ~/下载/omen-fan-control
sudo python3 omen_cli.py install-patch permanent
sudo reboot
重启后重新验证:
1
2
3
4
5
cd ~/下载/omen-fan-control
find /sys/devices/platform/hp-wmi -name "pwm*"
sudo python3 omen_cli.py fan-control --mode manual --value 50%
sudo python3 omen_cli.py status
如果重启后仍有 pwm1 和 pwm1_enable,且 50% Manual 能明显改变风扇转速,就说明永久安装已经生效。
日常使用
常用 CLI 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd ~/下载/omen-fan-control
# 查看状态
sudo python3 omen_cli.py status
# 手动转速
sudo python3 omen_cli.py fan-control --mode manual --value 50%
sudo python3 omen_cli.py fan-control --mode manual --value 70%
sudo python3 omen_cli.py fan-control --mode manual --value 80%
# 最大转速
sudo python3 omen_cli.py fan-control --mode max
# 恢复自动控制
sudo python3 omen_cli.py fan-control --mode auto
Curve 自动曲线
启用曲线模式:
1
sudo python3 omen_cli.py fan-control --mode curve
Curve 模式需要后台服务持续根据温度调整风扇,因此还需要安装服务:
1
sudo python3 omen_cli.py service install
如果只使用 Manual、Max 和 Auto,就没有必要专门启用曲线服务。Curve 与后台服务的最新行为可参考项目 Usage 文档。
GUI 与应用快捷方式
以 root 权限启动 GUI
项目自带 omen_gui.py,启动方式为:
1
2
cd ~/下载/omen-fan-control
sudo python3 omen_gui.py
本次验证发现,直接执行:
1
python3 omen_gui.py
虽然窗口可以打开,也能读取部分信息,但会提示:
1
Root Privileges Required
此时在 GUI 中修改风扇不会生效,因为写入 pwm1 需要管理员权限。因此应按照项目 README 的 GUI 启动方式,使用 sudo 运行。
创建可直接点击的快捷方式
最终采用的交互方式是:点击应用图标,终端打开,输入 sudo 密码,然后启动 GUI。这种方式简单且可靠。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mkdir -p ~/.local/share/applications
cat > ~/.local/share/applications/omen-fan-control.desktop <<'EOF'
[Desktop Entry]
Version=1.0
Type=Application
Name=OMEN Fan Control
Comment=HP OMEN/Victus Fan Control
Exec=sudo /usr/bin/python3 "/home/kayvong/下载/omen-fan-control/omen_gui.py"
Path=/home/kayvong/下载/omen-fan-control
Icon=utilities-system-monitor
Terminal=true
Categories=Utility;System;
StartupNotify=true
EOF
chmod +x ~/.local/share/applications/omen-fan-control.desktop
update-desktop-database ~/.local/share/applications/ 2>/dev/null || true
之后在 Ubuntu 应用列表中搜索 OMEN Fan Control 即可。
快捷方式中的
/home/kayvong/下载/omen-fan-control是我的实际路径。其他用户需要替换为自己的用户名与项目目录。
不要将 Exec 改成普通用户运行的 Python 命令。那样通常只能打开 GUI,无法真正写入 PWM 控制接口。
常见问题
提示 pwm1 not found
如果出现:
1
Manual mode requires the kernel driver patch (pwm1 not found).
检查:
1
find /sys/devices/platform/hp-wmi -name "pwm*"
Manual 模式要求 pwm1 与 pwm1_enable 同时存在。如果只有 pwm1_enable,说明当前驱动接口并不完整。
Temporary 模式重启后消失
这是正常行为。Temporary 本来就只在当前启动周期生效。完成验证后,需要执行:
1
sudo python3 omen_cli.py install-patch permanent
内核模块签名警告
如果看到:
1
2
hp_wmi: module verification failed:
signature and/or required key missing - tainting kernel
说明系统加载了自行编译的第三方内核模块。如果出现真正的:
1
Key was rejected by service
再检查 Secure Boot 状态:
1
mokutil --sb-state
Secure Boot 可能阻止未被信任的第三方内核模块加载。
8BC2 不在已知兼容列表
这台具体机器已经实测通过:
1
2
3
4
5
8BC2
fan1/fan2 正常
pwm1 正常
Manual 正常
最大转速校准 约 6100 RPM
不过,每次下载新版本仍应检查:
1
grep -n "8BC2" -C 10 hp-wmi.c
不要把一次实测结果当作对所有硬件版本和未来项目版本的保证。
卸载与恢复
进入项目目录:
1
cd ~/下载/omen-fan-control
删除后台服务并恢复原版驱动:
1
2
sudo python3 omen_cli.py service remove
sudo python3 omen_cli.py install-patch restore
这是项目 README 提供的卸载流程。
如果创建过应用快捷方式,再删除它:
1
2
rm -f ~/.local/share/applications/omen-fan-control.desktop
update-desktop-database ~/.local/share/applications/ 2>/dev/null || true
重装后的最简恢复流程
如果以后重装 Ubuntu,只想快速恢复,可以按下面的顺序执行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 1. 查看主板与原生驱动接口
cat /sys/class/dmi/id/board_name
find /sys/devices/platform/hp-wmi -type f \
\( -name 'fan*_input' -o -name 'pwm1' -o -name 'pwm1_enable' \) \
-print 2>/dev/null
# 2. 确实缺少接口时,再安装依赖
sudo apt update
sudo apt install -y \
git dkms build-essential linux-headers-$(uname -r) \
python3-click python3-pyqt6 mokutil
# 3. 下载项目
cd ~/下载
git clone https://github.com/arfelious/omen-fan-control.git
cd omen-fan-control
# 4. 确认源码仍包含 8BC2
grep -n "8BC2" -C 10 hp-wmi.c
# 5. 准备初始配置
sudo mkdir -p /etc/omen-fan-control
sudo tee /etc/omen-fan-control/config.json > /dev/null <<'EOF'
{
"bypass_patch_warning": true,
"fan_max": 6000
}
EOF
# 6. 先临时安装
sudo python3 omen_cli.py install-patch temporary
# 7. 检查 PWM 接口
find /sys/devices/platform/hp-wmi -name "pwm*"
# 8. 校准并测试 50%
sudo python3 omen_cli.py calibrate
sudo python3 omen_cli.py fan-control --mode manual --value 50%
sudo python3 omen_cli.py status
# 9. 一切正常后永久安装并重启
sudo python3 omen_cli.py install-patch permanent
sudo reboot
重启后再次确认:
1
2
3
4
cd ~/下载/omen-fan-control
find /sys/devices/platform/hp-wmi -name "pwm*"
sudo python3 omen_cli.py fan-control --mode manual --value 50%
sudo python3 omen_cli.py status
只要重启后仍能看到 pwm1 与 pwm1_enable,并且 Manual 50% 能改变风扇转速,基本就恢复完成了。
总结
这次问题的关键不在 GUI,而在于原生 hp_wmi 当时没有暴露完整的 PWM 控制接口。补丁驱动生效后,CLI 与以 root 权限运行的 GUI 都能正常控制风扇。
以后升级 Ubuntu 或 Linux 内核时,第一步永远应该是重新检查原生驱动。如果系统已经直接提供 fan1_input、fan2_input、pwm1 和 pwm1_enable,就可能不再需要替换内核驱动。