本项目与联想(Lenovo)官方无任何关联
Lenovo Legion Linux(LLL)为联想拯救者系列笔记本提供了额外的Linux驱动和工具集,可作为Windows专属的”Lenovo Vantage”和”Legion Zone”控制软件的替代方案。
通过逆向工程和反汇编ACPI固件、嵌入式控制器(EC)的固件与内存,本项目实现了以下功能控制:
:star: 如果本项目对您有帮助或可能有潜在价值,请为仓库点赞(Star)
:star2: 我们的终极目标是将驱动整合进Linux内核主线,未来无需在系统更新后重新编译驱动
:boom: 您的点赞将向Linux社区证明该项目的价值,推动驱动进入官方内核的进程
fan_unlock sysfs / legion_cli fan-unlock-{enable,disable,status})。在 Legion Pro 7 16IRX8H(BIOS KWCN54WW)上可将上限从约 4400 RPM 提升至约 7100 RPM。该功能通过 WMAA(0, 0x0D, 0x01) 发现 —— 见 issue #429。此 sysfs 节点由 has_fan_unlock 机型/BIOS 白名单控制,仅在经过验证的固件上暴露(目前为 KWCN54WW)。instant_boot_ac)或 USB-PD 充电器(instant_boot_usb_pd)时自动开机(legion_cli instant-boot-{ac,usb-pd}-{enable,disable,status},GUI“其他选项”)。仅在 DSDT 实现了 WMI 功能 ID 0x03010001/0x03010002 的机型上暴露(has_instant_boot,目前为拯救者 Pro 7 16IAX10H / Q7CN)。Fn+Q 切换acpi_call(无需完整内核模块)。4 种模式、平滑调速、LED 同步、TUI 切换器。见 extra/smartfan/从 2020 年到最新的 2025 款联想拯救者机型大概率都能兼容 —— 本驱动仍在积极维护中,新机型会持续加入。以下为已确认可用的具体型号。如果你的 BIOS 版本前缀相同,例如 EFCN(如 EFCN54WW),那很可能也能兼容。如果你想确认你的型号是否可用,或发现不可用,请提交 issue。
fan3)、挂起恢复后自动重新应用自定义风扇曲线、电源配置、通过 WMI 设置风扇曲线(1-10 等级索引,仅在接通电源的自定义模式下由 EC 应用)、无键盘/灯光控制;已在 Linux 上验证(进入自定义模式、写入风扇表点并从 EC RAM 读回);详见 Q7CN 说明cpu_temperature_limit、cpu_l1_tau、gpu_power_target_offset、长/短期功耗限制);风扇曲线读取正常,但自定义电源模式目前无法激活(已知问题);已在 Linux 上历经五次重载、一次 main 合并及一次 BIOS 更新验证;详见 Q6CN 说明powermode=255 下通过 EC3 LOQ 接口独立设置 RPM 和温度/回差)、键盘背光、风扇全速(仅限自定义模式)。R3CN44WW 的 EC3 曲线写入已在 #535 中经过负载验证;不支持的加/减速、minifancurve 和风扇控制器锁定选项已隐藏。该机型不受 WMI 风扇等级限制;详见 R3CN 说明。powermode=255 下通过 EC3 LOQ 接口独立设置 RPM 和温度/回差)、功耗限制(WMI3:PL1、PL2、cTGP、PPAB)、快速充电、风扇全速;EC 不支持风扇控制器锁定与 minifancurve 并已隐藏还支持更多机型 —— 包括 LOQ 系列以及 2024/2025 款拯救者(如 Legion 7 16IAX10);完整列表见 kernel_module/legion-laptop.c 中的 DMI 白名单。
注:未确认的功能大概率也能使用,只是暂无测试。
目前,以下型号暂不支持风扇控制,但其他功能大概率可用:
非常欢迎提交 PR! 只提 issue 虽然也有帮助,但开发者手头没有你的硬件,能做的事情非常有限 —— 尤其是“在我的机型上无法使用”这类报告。如果条件允许,请尝试自己动手修复:
kernel_module/legion-laptop.c 的 DMI 白名单)。借助常用的 AI 编程工具会更轻松 —— 仓库自带 AGENTS.md,里面有专门为 AI 准备的构建和测试说明。本项目中大部分机型的支持正是通过这种方式加入的。另请参阅 CONTRIBUTING.md。
请按如下步骤操作:
你需要安装下列依赖以便下载与编译。如果某个依赖包名称出错,请在你的发行版中查找对应的替代包名并安装。
Ubuntu/Debian/Pop!_OS/Mint/elementary OS/Zorin
sudo apt-get update
sudo apt-get install -y make gcc linux-headers-$(uname -r) build-essential git lm-sensors wget python3-pyqt6 python3-yaml python3-venv python3-pip python3-argcomplete python3-darkdetect
# 如需通过 DKMS 安装,请安装以下包
sudo apt-get install dkms openssl mokutil
RHEL/CentOS/RockyLinux/Fedora/AlmaLinux
sudo dnf install -y kernel-headers kernel-devel dmidecode lm_sensors python3-PyQt6 python3-yaml python3-pip python3-argcomplete python3-darkdetect
sudo dnf groupinstall "Development Tools"
sudo dnf group install "C Development Tools and Libraries"
# 如需通过 DKMS 安装,请安装以下包
sudo dnf install dkms openssl mokutil
你也可以使用 yum 替代 dnf,并先执行 sudo yum update。某些发行版可能不需要安装 “C Development Tools and Libraries”。
openSUSE
sudo zypper install make gcc kernel-devel kernel-default-devel git libopenssl-devel sensors dmidecode python3-qt5 python3-pip python3-PyYAML python3-argcomplete python3-darkdetect
# 如需通过 DKMS 安装,请安装以下包
sudo zypper install dkms openssl mokutil
注意:请确认安装了正确的Header包。
Arch/Manjaro/EndeavourOS
sudo pacman -S linux-headers base-devel lm_sensors git dmidecode python-pyqt6 python-yaml python-argcomplete python-darkdetect
# 仅用于 clang 编译的内核(例如 CachyOS);Makefile 会自动以 LLVM=1 构建
sudo pacman -S clang llvm lld
# 如需通过 DKMS 安装,请安装以下包
sudo pacman -S dkms openssl mokutil
注意:请确认安装了正确的Header包。
常见问题排查:
ERROR: Kernel configuration is invalid.,只需重新安装内核头文件,例如在Debian:sudo apt install --reinstall linux-headers-$(uname -r)
git clone https://github.com/johnfanv2/LenovoLegionLinux.git
cd LenovoLegionLinux/kernel_module
make
sudo make reloadmodule
注意: 在使用 clang 编译的内核上(CONFIG_CC_IS_CLANG=y,例如 CachyOS),Makefile 会自动检测并在内核构建中传入 LLVM=1(make、make install 与 DKMS 均适用);请先安装 clang、llvm 和 lld。
更多详细说明、问题和测试请见下方的 首次使用测试 部分,请务必先进行这些测试再进行永久安装。
预期结果:
make 命令完成且未出现 Error 报错信息异常结果:
make 命令中断报错/lib/modules/XXXXXXXX/build: No such file or directory 的报错,这说明当前内核的 linux-headers 未正确安装。请使用 uname -r 查看你当前内核,并为该内核版本安装对应的 linux-headers。此时 /lib/modules/XXXXXXXX/ 目录下应有你的内核版本(如 5.19.0-28-generic 或 6.2.9-arch1-1)。如果刚刚升级过内核,重启后再试,或参考 https://bbs.archlinux.org/viewtopic.php?id=135931, https://forum.manjaro.org/t/missing-build-directory-in-5-15-16-1-manjaro-headers/101793。make[1]: *** /lib/modules/6.2.9-arch1-1/build: No such file or directory. Stop.
make[1]: Leaving directory '/home/user/LenovoLegionLinux/kernel_module'
make: *** [Makefile:13: all] Error 2
在成功编译和测试后(见上文),在 LenovoLegionLinux/kernel_module 目录下运行:
make
sudo make install
每次内核更新后,你都需要再次编译和安装一次,如同其他外部内核模块一样。 目标是将驱动合入主线Linux内核,这样将来无需再做这些操作。如果觉得本项目有用,欢迎star支持!
进入 LenovoLegionLinux/kernel_module 目录:
make
sudo make uninstall
DKMS 是一个工具,可在每次内核更新后自动重编译和安装驱动,无需手动操作。
首先需安装好 DKMS 相关依赖,见前文依赖部分。
sudo mkdir -p /usr/src/LenovoLegionLinux-1.0.0
sudo cp ./kernel_module/* /usr/src/LenovoLegionLinux-1.0.0 -r
sudo dkms add -m LenovoLegionLinux -v 1.0.0
sudo dkms build -m LenovoLegionLinux -v 1.0.0
也可以通过makefile快捷安装:
cd kernel_module
sudo make dkms # 需以root权限运行
如果你想让驱动程序在开启安全启动(Secure Boot)的情况下工作,请按照这里描述的步骤操作
https://github.com/dell/dkms#secure-boot 或 https://wiki.archlinux.org/title/User:Krin/Secure_Boot,_full_disk_encryption,_and_TPM2_unlocking_install#Secure_boot。注意,这些步骤略显高级。对于初步测试,只需按照上面的步骤加载模块,或者关闭安全启动即可。
sudo dkms remove -m LenovoLegionLinux -v 1.0.0
reboot
这只适用于那些自己编译内核的高级用户。
每当达到稳定里程碑时,发布页面会自动生成补丁:Releases
请注意:
Ctrl+Shift+V 粘贴。# 在 LenovoLegionLinux/kernel_module 目录下(非 DKMS 方式)
sudo make reloadmodule
# 检查内核日志
sudo dmesg
预期结果:
legion PNP0C09:00: legion_laptop loaded for this device 的日志信息。PNP0C09 可能会被其他文本替换。非预期结果:
make reloadmodule 后出现 insmod: ERROR: could not insert module legion-laptop.ko: Invalid module formatlegion PNP0C09:00: legion_laptop not loaded for this device。说明内核模块未能正确加载,请重新执行第一次测试。insmod: ERROR: could not insert module legion-laptop.ko: Key was rejected by service:因为你开启了安全启动,无法加载内核模块。请在 BIOS 里禁用安全启动,或用私钥签名内核模块。sudo make forcereloadmodule 强制加载模块。[126675.495983] legion PNP0C09:00: Module not usable for this laptop because it is not in allowlist. Notify maintainer if you want to add your device or force load with param force.
[126675.495984] legion PNP0C09:00: legion_laptop not loaded for this device
[126675.496014] legion: probe of PNP0C09:00 failed with error -12
# 读取当前风扇曲线及其他调试输出
sudo cat /sys/kernel/debug/legion/fancurve
预期输出:
示例:
EC Chip ID: 8227
EC Chip Version: 2a4
fan curve current point id: 0
fan curve points size: 8
Current fan curve in UEFI
u(speed_of_unit)|speed1[u]|speed2[u]|speed1[pwm]|speed2[pwm]|acceleration|deceleration|cpu_min_temp|cpu_max_temp|gpu_min_temp|gpu_max_temp|ic_min_temp|ic_max_temp
3 0 0 0 0 3 3 0 50 0 50 0 30
3 11 11 28 28 3 3 50 55 50 55 30 40
3 13 13 33 33 3 3 55 60 55 60 40 50
3 20 20 51 51 3 3 60 65 60 65 50 55
3 22 22 56 56 3 3 65 70 65 70 55 127
3 24 24 61 61 3 3 70 75 70 75 127 127
3 28 28 71 71 2 2 75 80 75 80 127 127
3 33 33 84 84 2 2 80 88 80 88 127 127
3 40 40 102 102 2 2 88 90 88 90 127 127
3 44 44 112 112 2 2 90 127 90 127 127 127
风扇曲线以表格形式展示,列说明如下:
u(speed_of_unit): 风扇速度的单位(1-百分比, 2-PWM, 3-RPM/100, 4-百分比、四舍五入, 5-固件风扇表等级索引 0-10)
speed1[u]: fan1 在该点的速度(单位由 u 决定)
speed2[u]: fan2 在该点的速度(单位由 u 决定)
speed1[pwm]: fan1 在该点的 pwm(0-255)
speed2[pwm]: fan2 在该点的 pwm(0-255)
acceleration: 加速时间(数值越大越慢)
deceleration: 减速时间(数值越大越慢)
cpu_min_temp: CPU 必须低于该温度才能离开此点
cpu_max_temp: CPU 高于此温度则跳到下一个点
gpu_min_temp: GPU 必须低于该温度才能离开此点
gpu_max_temp: GPU 高于此温度则跳到下一个点
ic_min_temp: IC 必须低于该温度才能离开此点
ic_max_temp: IC 高于此温度则跳到下一个点
所有温度单位为摄氏度。
127 为最大温度
注意:这只是调试输出。风扇曲线的配置仍然通过标准的 hwmon 接口进行。
异常情况:
/sys/kernel/debug/legion/fancurve: No such file or directory:内核模块未正确加载cat: /sys/kernel/debug/legion/fancurve: Permission denied:你忘记加 sudo# 运行命令 sensors
sensors
预期输出:
sensors 命令的输出应包含如下内容:
legion_hwmon-isa-0000
Adapter: ISA adapter
Fan 1: 1737 RPM
Fan 2: 1921 RPM
CPU Temperature: +42.0°C
GPU Temperature: +30.0°C
IC Temperature: +41.0°C
异常输出:
Command 'sensors' not found:请通过安装 lm-sensors 软件包获取 sensors 命令# 将风扇曲线第二、第三个点的风扇转速分别设置为 1500 rpm、1600 rpm、1700 rpm、1800 rpm。
# 获取 root 权限
sudo su
# 以 root 身份输入:
# hwmon 目录名随内核版本变化(7.0 之前为 PNP0C09:00,7.0+ 为 legion),通过 hwmon 名称定位:
H=$(grep -l legion_hwmon /sys/class/hwmon/hwmon*/name | xargs dirname)
# 第2点,第1风扇(大约 1500 rpm 的 pwm 值)
echo 38 > $H/pwm1_auto_point2_pwm
# 第2点,第2风扇(大约 1600 rpm 的 pwm 值)
echo 40 > $H/pwm2_auto_point2_pwm
# 第3点,第1风扇(大约 1700 rpm 的 pwm 值)
echo 43 > $H/pwm1_auto_point3_pwm
# 第3点,第2风扇(大约 1800 rpm 的 pwm 值)
echo 45 > $H/pwm2_auto_point3_pwm
# 读取当前风扇曲线并检查更改是否生效
cat /sys/kernel/debug/legion/fancurve
预期结果:
u = 5):写入的 pwm 会四舍五入到最近的等级(写入 0、26、51 … 255),读回时为 level * 255 / 10(0、25、51、76、102、127、153、178、204、229、255);第 9、10 点至少需要 pwm 64 和 115,低于某点最小值的写入会返回 Operation not supported。在这些机型上,Python 工具(legion_cli、legion_gui 以及 legiond 预设)会把 RPM 值转换为最接近的固件等级(例如 4400 rpm → 9 级),并把 0 rpm 的点提升到该点的最低等级,因此现有预设仍可使用。转换所用的每级 RPM 阶梯在运行时从驱动提供的 fan1_level_rpm_table/fan2_level_rpm_table 平台属性读取(由固件的 LENOVO_FAN_TABLE_DATA WMI 数据块填充),并非硬编码。这些机型(KWCN、Q7CN、RLCN)不会暴露 fan_maxspeed(Fan Method 3/4 号方法):固件未实现这两个方法,该属性无法工作(在 KWCN 上读取只得到无意义的 0);fan_control.sh 在该属性不存在时会跳过它u(speed_of_unit)|speed1[u]|speed2[u]|speed1[pwm]|speed2[pwm]|acceleration|deceleration|cpu_min_temp|cpu_max_temp|gpu_min_temp|gpu_max_temp|ic_min_temp|ic_max_temp
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX 15 16 38 40 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX 17 18 43 45 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
如果你想重置风扇曲线,只需按 Ctrl+Q 或 Fn+Q 切换电源模式,或重启即可恢复。
异常情况:
file not found:请在 Github 提交 issue 报告你的问题使用提供的脚本设置自定义风扇曲线。参见下文“创建并设置你自己的风扇曲线”。
你必须永久安装内核模块(见上文),否则每次重启后都需要手动重新加载内核模块
温度和风扇转速可以在任何监控这些参数的图形化工具中显示,例如 psensor。你需要先安装它,然后运行:
psensor
对于支持传感器但不支持自定义风扇曲线的机型,GUI 启动时会跳过风扇曲线读取, 并禁用风扇曲线的读取和应用按钮。仍可在“Other Options”中使用机型支持的设置。
以 root 身份启动 GUI
# 在 LenovoLegionLinux 文件夹下运行
sudo python/legion_linux/legion_linux/legion_gui.py
截图使用的是示例数据,并非硬件回读。
Read from HW 可以读取并显示保存在硬件中的当前风扇曲线。Read from HW 按钮不可用。Apply to HW 后,修改才会写入硬件并生效。Apply to HW 可将当前显示的风扇曲线写入硬件并激活。Load from Preset 或 Save to preset。Apply to HW 才会激活到硬件。/root/.config/legion_linux/,你也可以手动编辑这些文件。0。异常情况:
0:内核模块未加载或未安装(见上文)或不兼容(请按照上方手动测试)。Write to HW 写入硬件时某个值被拒绝:说明该值超出硬件允许范围。你也可以通过 CLI 程序实现和 GUI 相同的功能,并可访问相同的预设。
# 在 LenovoLegionLinux 文件夹下运行
sudo python/legion_linux/legion_linux/legion_cli.py
usage: legion_cli.py [-h] {fancurve-write-preset-to-hw,fancurve-write-hw-to-preset,fancurve-write-file-to-hw,fancurve-write-hw-to-file} ...
Legion CLI
options:
-h, --help 显示帮助信息并退出
子命令:
{fancurve-write-preset-to-hw,fancurve-write-hw-to-preset,fancurve-write-file-to-hw,fancurve-write-hw-to-file}
fancurve-write-preset-to-hw
将预设中的风扇曲线写入硬件
fancurve-write-hw-to-preset
将硬件中的风扇曲线写入预设
fancurve-write-file-to-hw
将文件中的风扇曲线写入硬件
fancurve-write-hw-to-file
将硬件中的风扇曲线写入文件
只需运行脚本即可设置风扇曲线。脚本位于 LenovoLegionLinux 文件夹中。
# 进入 LenovoLegionLinux 文件夹并运行脚本。如果成功完成,应该会输出 "Writing fancurve successful!"
sudo ./setmyfancurve.sh
# 检查新的风扇曲线
sudo cat /sys/kernel/debug/legion/fancurve
打开 setmyfancurve.sh 文件,编辑其中的数值以自定义你的风扇曲线。具体请参考文件中的说明。
异常输出:
bash: ./setmyfancurve.sh: Permission denied:你需要先用 chmod +x ./setmyfancurve 让脚本具有可执行权限注意事项:
要使用此功能,必须永久安装内核模块(见上文)。或者,在重新加载内核模块后,重启电源守护进程(Ubuntu 下为 systemctl restart power-profiles-daemon.service)。
通过 GUI,可以在标有 Power mode/platform profile 的框中选择当前电源模式。
在 Ubuntu/Gnome 中,进入 设置->电源->电源模式/节能选项 或使用右上角的小程序进行切换。
自动切换电源模式可以在发行版的设置中更改(如 Ubuntu)。
# 列出所有配置文件(power-saver = 静音 = 蓝色)
powerprofilesctl list
# performance:
# Driver: platform_profile
# Degraded: no
# balanced:
# Driver: platform_profile
# * power-saver:
# Driver: platform_profile
# 设置某个配置,例如 power-saver=静音
powerprofilesctl set power-saver
# 或平衡
powerprofilesctl set balanced
# 或高性能
powerprofilesctl set performance
你也可以用更底层的方式直接访问:
# 查看当前配置
cat /sys/firmware/acpi/platform_profile
# 更改当前配置(需要ROOT权限):可用模式有 quiet、balanced、performance、balanced-performance
# quiet = 节能
echo quiet > /sys/firmware/acpi/platform_profile
# 或平衡
echo balanced > /sys/firmware/acpi/platform_profile
# 或高性能
echo performance > /sys/firmware/acpi/platform_profile
# 或自定义模式 = balanced-performance(并非所有型号都支持);LED 会变为粉色/紫色
echo balanced-performance > /sys/firmware/acpi/platform_profile
如果你的机型支持自定义电源模式,可以:
你可以在 GUI 中选择 “Custom Mode” 进入自定义模式。或者,也可以用命令行切换:
echo balanced-performance > /sys/firmware/acpi/platform_profile
遗憾的是,目前 power-profile-deamon 或 powerprofilesctl 还不支持该模式。
如果笔记本长时间保持低温,会启用“迷你风扇曲线”,这是一种只包含少量节点的特殊风扇曲线,通常会让风扇持续转动。你可以选择启用或禁用它。如果你希望始终使用自己配置的风扇曲线,请将其禁用。并非所有机型都支持迷你风扇曲线(如果不支持,运行 cat /sys/kernel/debug/legion/fancurve 时会看到相关错误)。
在 GUI 中,通过勾选或取消 Minifancurve if cold 选项并点击 Apply to HW 按钮来启用或禁用迷你风扇曲线。
LLL 守护进程(legiond)是一个小型 C 程序(见 extra/service/legiond),支持 Systemd 和 OpenRC(实验性)。
如果你是手动安装 LLL(不是通过包管理器),需要自行编译 legiond(在 extra/service/legiond 目录下运行 make,依赖 libinih),并手动安装二进制文件、service 文件和示例配置 —— 具体步骤见 README.org。
该守护进程可以根据电源模式和是否插电,自动切换 GUI 中设定的风扇曲线配置文件。
可用的配置文件如下:
示例配置文件在 这里,也可以通过 GUI 便捷设置:
Fan CurveFancurve Preset 选择上述某个配置文件,然后点击 Save to Preset(会要求输入密码)Automation 标签,启用 Lenovo Legion Laptop Support Daemon Enable 选项此 systemd 服务还支持通过编辑 /etc/legion_linux/legiond.ini(即 legiond.ini)激活以下附加功能:
nvidia-smi -pl 命令调整 NVIDIA GPU 的 TDP(仅支持驱动 525 及以下)radeon - 使用 rocm-smi --setpoweroverdrive 命令调整 Radeon GPU 的 TDP
legiond.ini 文件中的默认值来自 RTX 3070注意:legiond 现在通过 inotify 直接监听电源状态/电源配置的变化,不再依赖 acpid.service。
如果你的 CPU 调优经常被重置为默认值,请启用 legiond-cpuset.timer 来覆盖它。
详细见 README.org
在受支持的机型上,固件会将风扇最大转速限制在硬件实际能力之下。fan_unlock sysfs 属性可以解除该限制。它仅在经过验证的机型/BIOS 组合上暴露(见 kernel_module/legion-laptop.c 中的 has_fan_unlock 白名单);在 Legion Pro 7 16IRX8H(BIOS KWCN54WW)上可将上限从约 4400 RPM 提升至约 7100 RPM。
# 查看状态 / 启用 / 禁用
sudo legion_cli fan-unlock-status
sudo legion_cli fan-unlock-enable
sudo legion_cli fan-unlock-disable
# 或直接通过 sysfs
cat /sys/module/legion_laptop/drivers/platform:legion/PNP0C09:00/fan_unlock
你可以锁定当前风扇转速。锁定后,风扇转速将保持不变,不会再随温度变化。如果你想在游戏时保持高转速,可以使用此功能,但不建议一直保持锁定。如果风扇控制器被 Windows 工具等意外锁定,你也可以解锁。风扇控制器被锁定时,温度传感器数据也不会更新。
在 GUI 中,勾选 Lock fan controller 并点击 Apply to HW 即可锁定风扇控制器。
风扇可以设置为最大转速(极致散热/清灰模式),此时温度不会影响转速。请勿长时间开启此模式,否则可能加速风扇损耗。
在 GUI 中,勾选 Set speed to maximum fan speed 并点击 Apply to HW 即可。
注意:目前并非所有机型都支持此功能。
可以开启电池养护模式。开启后,插电时电池将不会持续充电,而是保持电量在 50% 左右,据说可延长电池寿命。
在 GUI 中,勾选 Battery conservation 即可开启(更改会立即生效)。
电池保护模式与快速充电互斥:开启电池保护模式(battery_conservation)时会先关闭快速充电;开启快速充电时固件会关闭电池保护模式。关闭电池保护模式后快速充电保持关闭。
你可以锁定 Fn 键,方法是同时按下 Fn+Esc(部分型号 Esc 键灯会同步点亮/熄灭)。开启后,F1-F12 键无需 Fn 也能直接调用如调节音量等特殊功能。
在 GUI 中,勾选或取消 Fn Lock 即可(更改会立即生效)。
你可以通过 Fn+F10(或类似组合)开启或关闭触控板。
在 GUI 中,勾选或取消 Touch Pad Enabled 即可(更改会立即生效)。
由于硬件固件的限制,部分问题无法修复:
auto_points_size 所报告的值:EC 实际使用的点数,最多 10 点,且随机型和电源模式变化。在使用 EC 风扇曲线访问的机型上,可以写入该属性来调整曲线点数,超出新点数的部分会由驱动清零。在固定长度曲线的机型上(WMI3、EC2、EC3、EC4),该属性仍为只读,详见下文。与点数无关,你仍然可以通过将温度限制设置为 127 来禁用某个点。fancurve_speed_unit 标明当前曲线单位(rpm、percent 或 level);固件 RPM 等级表仅向等级曲线提供,不再取决于是否支持恢复默认曲线。用户空间每次读取或应用曲线都会重新读取校准表;百分比后端也能正确回读对应的百分比档位,不再因二次取整而降低转速。校准数据缺失或无效时拒绝 RPM 写入,不会猜测线性换算;GUI 保留监控功能,可通过 Read from HW 重试。请同时更新内核模块和用户空间程序,以便明确识别单位。auto_points_size 为只读;不会访问未映射的 minifancurve/控制器锁定寄存器。详见能力验证。max-power 模式并非提升功耗限制,而是会立即断电(硬关机,无正常关机流程),还可能将 EC 的电池充电模式从养护模式重置为快充。因此内核模块在该机型上不将 max-power 作为平台配置文件选项暴露;安全的配置文件为 quiet/balanced/performance/custom。感谢以下 Windows 工具的开发者,他们的工作为 Linux 支持奠定了基础:
感谢以下用户为 Linux 支持做出的贡献:
如果你的笔记本支持或者不支持本项目,请也告知我们。
PlasmaVantage 是 KDE 的一个 Plasma 小部件,是 Lenovo Legion Linux 内核模块的替代 GUI。可在 KDE 商店获取,源码见 这里。
CinnamonVantage 是 Cinnamon 桌面的一个小程序(Applet),是 LenovoLegionLinux 内核模块的替代 GUI。可在 Mint 商店获取,源码见 这里。
这些是由嵌入式控制器测量和使用的温度,只对风扇控制器有实际意义。它们由新的内核模块提供,其他情况下无法获取,因为这些数据是直接从嵌入式控制器读取的。
这些传感器会报告风扇转速(单位为 rpm,转/分)。它们同样由新的内核模块提供,其他情况下无法获取,因为这些数据也是从嵌入式控制器读取的。
会使用 CPU、GPU 和 “IC” 的温度。这些(通常)是额外的传感器,与未使用内核模块时系统报告的温度不同。尤其是 “IC” 温度的阈值可能设置得很低,会导致风扇几乎一直转。
请参考上文,尤其是 “IC” 温度传感器的影响。
据我所知,并没有这个情况。目前观察到的风扇控制只和温度有关。
如果风扇速度一直比较恒定,可能是风扇控制器被锁定(通常称为锁定风扇转速)。你可以在 GUI(见上文)中锁定/解锁风扇控制器。一般不建议锁定。进行 BIOS/UEFI 更新通常也会解锁,但请谨慎操作并建议做好 BIOS 备份。
如果风扇在高负载下始终没有加速,可能是风扇控制器被锁定(如上)。同时请检查 CPU(或 GPU)在负载下报告的温度是否确实升高。只有 “CPU Temperature”、“GPU Temperature” 和 “IC Temperature” 这三个温度会被用于风扇控制,这些温度是硬件风扇控制器内部实际用到的。
如果风扇从不停止,可能是你设置了很低的 CPU、GPU 或 IC 的最高温度阈值。许多机型即使在安静模式下也会有较低的温度阈值,导致风扇一直不会停止。你可以适当提高最低档位的温度阈值。
请参考上面相关说明。
即使在浏览网页时,CPU 也可能会有短时间的负载,导致温度短暂升高从而风扇启动。你可以:
请参考上面相关说明。
请参考上面相关说明。
可能是 BIOS 更新过程中出现了问题。可以降级回旧版本测试,然后再重新升级,并再次检查当前版本下的功能是否正常。
最简单的方法是先降级到较旧版本,然后再升级回当前版本,并在旧版本下测试功能。
你也可以尝试如下方式重置嵌入式控制器:
你可以通过 Fn+Q 切换模式,这会在固件中更改模式,并改变指示灯颜色,即使没有驱动支持(即无此内核模块)。
在未安装 Lenovo Legion Linux 时切换电源模式:
ryzenadj 检查 AMD CPU 的功率限制来观察。安装 Lenovo Legion Linux 后切换电源模式:
在 Windows 下也类似:切换电源模式会通知系统或如 Vantage 之类的工具,进而调整电源计划。
两者在实际性能(FPS)上的差别很小。想追求极致性能就用高性能模式,日常推荐用平衡模式。
首先检查风扇曲线是否设置正确,确保不是配置错误。再检查用于风扇控制的温度(见 “新增温度”)在空闲时是否过低。如果只有一个风扇满速,另一个能正常按曲线控制,建议重置 BIOS 和 EC 控制器。
你可以更改硬件中预设的风扇曲线和最小风扇转速:
off:足够冷时关闭风扇level 1:最小风扇转速等级 1level 2:最小风扇转速等级 2level 3:最小风扇转速等级 3参考:https://forums.lenovo.com/t5/Gaming-Laptops/Legion-7-Bios-What-is-advanced-thermal-optimization/m-p/5079357
你可以直接用 Fn+Q 切换电源模式。
如果你用 KDE,可以在“电池与亮度”图标处切换。
如果不需要 GUI,可以使用命令行。
其它桌面环境:
本驱动会将电源模式切换功能暴露给如 power-profiles-daemon 等工具。
建议先在终端测试(见 “Powermode -> Modify with CLI”),如可用,再安装 power-profiles-daemon。
GNOME 的图形小程序会用 power-profiles-daemon 以软件方式切换电源模式,这是 GNOME 的标准功能,并未由本工具提供。
对于 KDE,有图形工具 powerdevil,其内部同样利用 power-profiles-daemon。
如果 KDE 在 /sys/firmware/acpi/platform_profile_choices 中只显示 balanced 和 performance,但 Legion 设备(例如 /sys/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/platform-profile/platform-profile-1/choices)包含 quiet,请检查是否同时加载了 lenovo_wmi_gamezone。如果两个驱动同时处于活动状态,全局可选模式会取两者的交集,quiet 模式可能会消失。此时可卸载或拉黑(blacklist)lenovo_wmi_gamezone,让 legion_laptop 成为唯一的电源模式提供者。
另一种做法是同时保留两个驱动、各司其职:以 enable_platformprofile=0 加载 legion_laptop,它便不再注册电源模式提供者,把电源模式(platform_profile)和功耗限制(/sys/class/firmware-attributes/lenovo-wmi-other-*)交给主线驱动。它自身的 powermode 与功耗限制属性仍在平台设备下可用;主线驱动完全不提供、也正是保留 legion_laptop 的原因,是风扇曲线、风扇转速和风扇全速。将
options legion_laptop enable_platformprofile=0
softdep legion_laptop pre: ideapad_laptop lenovo_wmi_gamezone lenovo_wmi_other lenovo_wmi_events lenovo_wmi_capdata
写入 /etc/modprobe.d/legion_laptop.conf;softdep 行会先加载主线驱动,让它们先绑定两个驱动都声明的 WMI 设备。主线的 custom 配置与 powermode 255 是同一个固件模式;请通过名为 lenovo-wmi-gamezone 的设备的 /sys/class/platform-profile/platform-profile-N/profile 选择它,因为旧的 /sys/firmware/acpi/platform_profile 文件按设计拒绝 custom。已在 Legion Pro 5 16IRX8、内核 7.2 上验证。
在拯救者 Pro 7 16IAX10H(83F5,Q7CN)上,功耗限制无需上述任何配置:无论加载顺序如何,legion_laptop 都会把 GameZone WMI 设备留给 lenovo_wmi_gamezone,因此使用默认选项时 /sys/class/firmware-attributes/lenovo-wmi-other-0(PL1/PL2、cTGP 等)也能与它共存。此时两个驱动都会注册电源模式提供者,且选项相同(五种),全局列表不会丢失任何模式。
查看 cat /sys/class/powercap/intel-rapl-mmio:0/constraint_{0,1}_power_limit_uw。在部分固件上(例如拯救者 Pro 7 16IAX10H,Q7CN),CPU 实际执行的是这个 MMIO RAPL 限制,BIOS 启动时将其设为 30 W;固件只在进入自定义模式时才写入它,安静/均衡/性能/狂暴模式交给 Windows 上的联想软件和 Intel DTT 处理。thermald 的 adaptive 模式也无济于事:固件通过只有 Windows 软件才会设置的条件来选择各模式的目标,因此 thermald 只会对所有模式套用同一个固定限制。legion_laptop 在 cpu_longterm_powerlimit_defaults / cpu_shortterm_powerlimit_defaults 中导出固件的各模式默认值(例如 performance:145 / performance:190),在 /etc/legion_linux/legiond.ini 中设置 cpu_powerlimit_sync=true 后,legiond 会在每次切换电源模式时应用这些值(见 extra/service/legiond/README.org);配置可选的 double_* 项后,它还会在机身传感器升温后像 Windows 一样切换到固件中较低的 CPU+GPU 同时负载限制(例如性能模式 145 W → 75 W),为 GPU 留出余量。不要同时运行 thermald 的功耗限制控制(例如 thermald --adaptive):两者写入同一个 MMIO 限制,会互相覆盖,最迟在 legiond-cpuset.timer 每 30 秒刷新时发生。另外请注意,WMI 功耗限制属性(显示这些属性的机型上为 legion_laptop 的 cpu_longterm_powerlimit / cpu_shortterm_powerlimit,16IAX10H 上为 lenovo-wmi-other 的 ppt_pl1_spl / ppt_pl2_sppt)保存的是固件在自定义模式下应用的值;在其他模式下它们可能与实际执行的限制不同,请以上面的 MMIO 值为准。不使用 legiond 时,进入一次自定义模式即可应用自定义的 PL1/PL2,并在重启前一直保持。GPU 有自己的功耗限制:在这些机型上请启用 NVIDIA 的 Dynamic Boost 守护进程(sudo systemctl enable --now nvidia-powerd,随 NVIDIA 驱动提供)。未启用时,拯救者 Pro 7 16IAX10H 的 RTX 5090 在所有模式下都被限制在 95 W;启用后,性能/狂暴模式为 150 W,负载下最高 175 W(可用 nvidia-smi -q -d POWER 查看)。
brightnessctl 无效在混合模式下,内屏由 Intel GPU 驱动(intel_backlight),但 NVIDIA 驱动还会为独显的屏幕输出注册 nvidia_0,而该输出在此模式下处于断开状态。brightnessctl、swayosd 等工具默认使用第一个设备 nvidia_0,因此即使亮度键本身正常(它们以 KEY_BRIGHTNESSUP/DOWN 的形式来自 ACPI “Video Bus”),调整也看不到任何效果。用 brightnessctl -l 查看,并在快捷键绑定和空闲守护进程中明确指定设备,例如 brightnessctl -d intel_backlight set 50% 或 swayosd-client --device intel_backlight --brightness +5。已在拯救者 Pro 7 16IAX10H(OLED 屏)上确认。在纯独显模式下内屏改由 NVIDIA GPU 驱动,此时 nvidia_0 才是正确的设备。
首先,尝试重置嵌入式控制器或进行 BIOS 升级/降级来重置所有设置。
方案一:重新编译/安装内核模块,参见:永久安装说明。
方案二:使用 DKMS 实现每次内核更新后自动安装,参见:使用 DKMS 安装。
gsettings set org.gnome.settings-daemon.plugins.power idle-brightness 100
参考:https://old.reddit.com/r/linuxquestions/comments/utle2w/ubuntu_2204_is_there_a_way_to_disable_screen/
以下为在 Ubuntu(X11 环境)下的一种配置方法。这样默认所有程序运行在 iGPU 上,除非你另行指定。
# 应该输出 "x11"
echo $XDG_SESSION_TYPE
prime 并选择“按需”模式,可能需要重启:
sudo prime-select on-demand
nvidia-smi 检查 dGPU 是否有进程在运行:
sudo nvidia-smi
注意输出中 0 N/A N/A *** G /usr/lib/xorg/Xorg 4MiB 这种进程是正常的。另外,运行 nvidia-smi 本身会短暂唤醒 GPU。
d3cold 模式:
# 注意:根据 GPU 设备路径,二选一
echo 1 > /sys/devices/pci0000\:00/0000\:00\:01.1/d3cold_allowed
echo 1 > /sys/devices/pci0000\:00/0000\:00\:01.0/d3cold_allowed
sudo cat /proc/driver/nvidia/gpus/0000:01:00.0/power
# 注意:根据你的 GPU 设备路径,二选一,输出应为 "D3cold"
cat /sys/devices/pci0000\:00/0000\:00\:01.0/power_state
cat /sys/devices/pci0000\:00/0000\:00\:01.1/power_state
nvidia-smi,GPU 会被唤醒一段时间。再次检查 power_state,应先变为 D0,稍等后会回到 D3cold。与 nvidia-smi 不同,cat /sys/devices/pci0000\:00/0000\:00\:01.1/power_state 不会唤醒 GPU。sudo cat /proc/driver/nvidia/gpus/0000:01:00.0/power
本软件包含以下几个部分:
kernel_module 文件夹下的内核模块:
/sys/kernel/debug/legion/fancurve、 /sys/module/legion_laptop/drivers/platform\:legion/PNP0C09\:00/powermode、 /sys/class/hwmon/X/temp1_input、 /sys/class/hwmon/X/pwmY_auto_pointZ_pwm 等,用户可以通过这些文件读取温度传感器、控制风扇曲线、切换电源模式等。python 文件夹下的 Python 包:
legion.py:用于从 Python 修改风扇曲线及其他设置的模块;封装了对上述内核模块及 ideapad_laptop 等模块提供的“文件”的读写;所有来自 legion_gui.py 和 legion_cli.py 的设置更改都通过本模块完成。legion_gui.py:一个基于 legion.py 的图形界面(GUI)程序,用于更改设置。legion_cli.py:一个基于 legion.py 的命令行(CLI)程序,用于更改设置。extra/service/legiond 文件夹下的 legiond 守护进程:
legiond-ctl 辅助工具),监听电源状态/电源配置变化并应用对应的风扇曲线预设,还可通过 legiond.ini 配置可选的 CPU/GPU 功耗调整。extra/smartfan 文件夹下的 SmartFan:
acpi_call,无需完整内核模块。本项目中对任何联想产品、服务、流程或其它信息的引用,以及对联想商标的使用,并不构成或暗示联想对本项目的认可、赞助或推荐。
在本网站及相关工具和库中使用 Lenovo®、Lenovo Legion™、Yoga®、IdeaPad® 或其他商标,仅用于为用户提供可识别的标识,以便用户能够确认这些工具适用于联想笔记本电脑。