niri 笔记本低功耗调优:3 步把待机功耗从 8W 压到 5W
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
在 niri 这款 Wayland 合成器(负责把每个窗口画面拼合成最终屏幕图像的进程)上,把待机功耗从 8–10W 压到 4–5W、续航提升约 30%,只动三处配置就够了:显示链路、动画与光标、电源协同。代价是牺牲一点流畅感——关动画和降刷新率都会让交互变"硬",你需要在观感和耗电之间自己取舍。下面的每一步都按"改什么、为什么省、怎么验证"来讲,所有数字可直接对照。
动手前先测基线:用 powertop 拍一张功耗照片
先测量,后优化。不测基线,你永远不知道哪一步真正省电。
# 空闲 60 秒采样,看系统平均功耗与耗电大户 sudo powertop --time=60 # 只看 niri 进程本身占多少 CPU top -b -n 1 | grep niri把这一组数字记下来(空闲瓦数、niri 的 CPU 占用)。改完每一项后再跑一次,对比才有意义。powertop会列出谁在耗电,top里的 niri 行则确认合成器本身没有异常空转。
显示链路省电:降刷新率,顺手关掉高耗能渲染
刷新率是屏幕上最直接的耗电开关。先列出你的显示器支持的档位:
niri msg outputs内置屏通常叫eDP-1。把 90–120Hz 的屏幕降到 60Hz,光这一项就能省约 15% 的显示功耗(显示输出文档):
output "eDP-1" { mode "1920x1080@60.000" // 刷新率必须与 msg outputs 里完全一致,到小数点后三位 variable-refresh-rate on-demand=true // 动态刷新率,仅播放视频等匹配窗口时才启用 }为什么省:每提高一档刷新率,GPU 就要多渲染一帧;variable-refresh-rate(即可变刷新率 VRR,俗称自适应同步)让屏幕在静态画面时降频,只在真正有动画的窗口上拉满。注意:如果你接了外接高刷显示器,on-demand=true配合窗口规则能把 VRR 限制在特定应用上,避免某些驱动下 VRR 带来的闪烁。
渲染参数上,窗口阴影和高斯模糊是每帧都要反复绘制的片段着色器。默认softness 30、spread 5、模糊passes 3(布局文档),改小即可:
layout { shadow { softness 8 // 默认 30,数值越大模糊范围越大、越费 spread 2 // 默认 5,收缩阴影膨胀范围 draw-behind-window true } } blur { off // 默认开启且 passes 3,直接关掉最省事 }验证:跑niri msg outputs确认刷新率生效;空闲功耗应比基线下降约 10–15W 档位的对应比例。
交互层省电:动画全局开关与光标隐藏
动画是图形渲染的主要功耗来源之一。niri 提供全局一键关闭和整体减速(动画配置文档)。KDL是 niri 配置文件使用的声明式语言,一行一个参数:
animations { off // 完全关闭所有动画,省电最直接 // slowdown 2.0 // 想保留手感时,改成整体放慢一倍,降低帧数压力 }为什么省:每个窗口开合、工作区切换都会持续多帧渲染,全关后这些帧直接消失。若想保留动效又不想太费,用slowdown 2.0拖长持续时间、摊薄单位时间的渲染帧数,比全关柔和。
弹簧动画(spring)靠物理模型驱动,不能直接设时长,由stiffness(刚度)等参数决定快慢。把刚调低会让它更慢、更省:
animations { workspace-switch { spring damping-ratio=1.0 stiffness=500 epsilon=0.0001 // 默认 1000,调低更慢 } }注意damping-ratio不要超过 1.0——超过属于过阻尼,niri 目前有数值稳定性问题,可能导致画面卡顿(动画配置文档 明确标注)。
光标隐藏则减少屏幕固定区域的持续刷新:
cursor { hide-when-typing // 打字时隐藏光标 hide-after-inactive-ms 1000 // 空闲 1 秒后隐藏 }系统级协同:电源守护进程与亮度快捷键
niri 本身不做电源调度,这部分交给系统的 power-profiles-daemon。装上后切到 balanced(平衡)或 power-saver(节能)档位:
sudo apt install power-profiles-daemon powerprofilesctl set balancedniri 通过 D-Bus 与显示电源模式打通,源码里实现了power_save_mode的读写(电源模式控制)。在 niri 侧把亮度键绑到 brightnessctl,用spawn动作拉起命令:
binds { bindctl "XF86MonBrightnessUp" { spawn "brightnessctl" "set" "+5%" } bindctl "XF86MonBrightnessDown" { spawn "brightnessctl" "set" "5%-" } }为什么省:屏幕背光与刷新率是耗电大头,把亮度默认调低几档,配合 balanced 档位让 CPU/GPU 频率封顶,空闲功耗能再下一截。验证方式仍是powertop——空闲功耗应逼近 4–5W。
验证与常见坑:调过头了就回退
优化后重跑采样命令,对照基线:
sudo powertop --time=60 # 空闲功耗目标 4–5W intel_gpu_top # Intel 显卡看 GPU 负载 nvtop # NVIDIA 显卡看 GPU 负载典型数据(同配置对照):空闲 8–10W → 4–5W,网页浏览 12–15W → 8–10W,视频播放 15–18W → 10–12W。
几个常见坑:
- 刷新率设了却不变——
mode里的频率没和niri msg outputs完全对齐,差一个小数位都会被忽略,改回原档位即可。 - 动画关掉后"卡"——若你觉得
off太突兀,改成slowdown 2.0折中。 - 弹簧动画结尾跳一下——把
epsilon调小(如 0.00005)。 - VRR 下光标掉帧或黑闪——按 显示输出文档 的提示试
disable-cursor-plane调试项或拔插显示器。
配置改错时 niri 会弹通知而不是崩溃,直接还原对应段落热加载即可,无需重启。
进阶三件事
- 自定义着色器:改
src/render_helpers/shaders/里的片段着色器,减少过度绘制;niri 支持给窗口开合/缩放动画挂custom-shader,参考docs/wiki/examples/下现成示例。 - 动态刷新率脚本:配合
variable-refresh-rate on-demand=true与窗口规则,让刷新率只在游戏或视频窗口拉满,静态时自动回落。 - 进程调度:以 systemd 会话方式运行 niri(见 systemd 配置示例),可为合成器单独设置 CPU 调度优先级,减少前台应用被拖累的功耗波动。
每改一项就测一次,把"观感—功耗"的平衡点固定下来,这份低功耗配置才算真正落地。
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考