niri 低功耗指南:让 Linux 笔记本多撑 4 小时的实用教程
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
想让 Linux 笔记本多撑几个小时?答案往往不在应用层,而在显示栈本身。niri 这个滚动平铺式 Wayland 合成器把省电的几个关键开关都暴露成了明文的 kdl 配置:面板刷新率、动画开关、阴影与模糊、光标隐藏,全部一行一个参数。按下面的顺序把它们调完,多数高刷屏笔记本的综合功耗能降成原来的五分之三到七分之五,轻办公场景多撑 2~4 小时是常见结果(具体幅度取决于屏幕尺寸、面板类型和负载)。
niri 为什么有省电的底子
niri 的定位是一个滚动平铺式 Wayland 合成器:窗口默认按列平铺,超出视野的部分靠滚动查看,屏幕上同时需要渲染的内容天然比自由窗口桌面少。它的渲染路径比较精简——没有重型桌面外壳、没有常驻的合成特效层,动画、阴影、模糊全部是"默认开、可逐项关"的独立模块,配置热重载即生效。
平铺布局减少了同屏窗口数量,渲染与刷新负担随之下降,这是 niri 省电逻辑的第一层。
对续航敏感的用户来说,这种"每个耗能点都能单独关掉"的设计正好够用:你不必为了省电换桌面环境,只需要逐层拧参数。
屏幕层:一行配置锁定刷新率
屏幕是笔记本上最大的耗电部件,而 niri 在 显示器输出版文档 里把刷新率和可变刷新率都做成了显式配置,这是第一优先级的动作。
把高刷屏降回 60Hz
笔记本内屏通常是eDP-1。不写mode时,niri 会按面板首选模式点亮——高刷屏的首选模式往往就是 120/144Hz。先用niri msg outputs列出所有可用模式,再把刷新率写死:
output "eDP-1" { mode "1920x1080@60" }注意刷新率必须和niri msg outputs里显示的小数点后三位完全一致。从 120Hz 降到 60Hz,面板和显示驱动的负载直接减半,空闲功耗的变化幅度通常是所有单项里最大的,高刷屏上省 1~2W 很常见。
可变刷新率按需开启
如果面板支持 VRR,可以让它在空闲时自动降频,而不是恒定满帧输出:
output "eDP-1" { variable-refresh-rate on-demand=true }on-demand=true表示只有匹配的窗口(比如游戏、视频)存在时才启用 VRR,其余时间面板可以停留在低频档。若遇到光标卡顿等驱动问题,可参考文档中的disable-cursor-plane调试开关。
无论窗口平铺还是全屏,刷新率都是对整块面板生效的功耗项。
交互层:动画、阴影与模糊的省电参数
屏幕上的每一帧动态变化都要重新绘制。niri 的 动画配置文档 提供了从全局到单条动画的完整控制面。
动画:全关或快速短促
animations { off }这一行关掉全部动画,工作区切换、窗口开合都变成瞬切,是省电上限最高的写法。想保留手感就只缩短、不减速——动画每多持续一帧就是一次额外绘制,方向应该是"更快结束"而不是拉长:
animations { window-open { duration-ms 100 curve "ease-out-quad" } }阴影、模糊:能关则关
阴影和背景模糊是 GPU 的常驻开销。在 布局配置文档 和 杂项配置 中,两者都有独立的off开关:
layout { shadow { off } } blur { off }blur { off }会连同窗口请求的背景模糊一起禁用。集成显卡机型上这两项的收益比独立显卡更明显。
阴影、模糊这类每帧附加绘制项,是交互层最容易省下的部分。
系统层:光标、亮度键与电源档位
最后把系统级的习惯动作接进 niri,让低功耗状态能一键进出。
光标闲置自动隐藏
cursor { hide-when-typing hide-after-inactive-ms 1000 }打字时隐藏、闲置 1 秒后自动消失。光标是独立渲染平面,持续显示会阻止对应区域进入低频刷新,隐藏它是几乎零成本的小项。
亮度键与省电档位绑定
用binds把笔记本自带亮度键接到 brightnessctl,参数要逐个分开写(spawn不走 shell):
binds { XF86MonBrightnessUp { spawn "brightnessctl" "set" "+5%"; } XF86MonBrightnessDown { spawn "brightnessctl" "set" "5%-"; } }另外在系统层装上 power-profiles-daemon(发行版包名一般就叫它),出门前切到省电档、插电能自动切回:
powerprofilesctl set power-saver这是 systemd 层面的全局档位,与 niri 配置互补:前者管 CPU/驱动策略,后者管显示栈。
验证:两个命令确认优化生效
niri msg outputs先确认面板真的跑在你设置的mode上,刷新率没有回落到首选模式。再看整体功耗:
powertop --time=60采样 60 秒,重点看 Average Power 一栏的数值是否低于改配置前。对照 niri 自己的重绘循环说明:空闲时没有内容变化就不会触发重绘,动画和特效关得越彻底,"正在绘制"状态出现得越少,功耗曲线越平。
这张状态机图解释了省电的底层机制:空闲时停在"无重绘"状态,GPU 才有机会降频。
回顾
- 屏幕层:
mode锁 60Hz +variable-refresh-rate on-demand=true,收益最大 - 交互层:
animations { off }、shadow { off }、blur { off },逐项可回收 - 系统层:光标自动隐藏、亮度键绑定、
powerprofilesctl set power-saver - 验证:
niri msg outputs确认模式,powertop --time=60看平均功耗
所有参数均可热重载即时试错,感觉过度再单项调回来。想编译源码体验最新版本,仓库地址为https://gitcode.com/GitHub_Trending/ni/niri(clone 后即可按 开发文档 构建)。⚡ 先调屏幕层再调交互层,是性价比最高的顺序。🔋
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考