共计 2854 个字符,预计需要花费 8 分钟才能阅读完成。
最近我又开始“折腾”我的 Linux 桌面环境了。
熟悉我的朋友可能知道,我之前很长一段时间都在用 Sway,后来因为眼馋 Hyprland 那些华丽的动画和特效,又迁移到了 Hyprland。不得不说,Hyprland 确实不仅好看,功能也极其强大。但是,在使用了一段时间后,我发现自己总是陷入一种怪圈:为了保持桌面的“美观”和“可用性”,我不得不花费大量时间去微调窗口布局的规则。
尤其是当我在一个工作区打开超过三个窗口时,传统的平铺窗口管理器(Tiling Window Manager)往往会让每个窗口都变得非常窄小,难以阅读。为了看清内容,我必须不断地在全屏、浮动或者调整分割比例之间切换。
直到最近,我在 GitHub 上闲逛时偶然发现了 Niri。它提出的“无限卷轴”(Scrollable Tiling)概念瞬间击中了我的痛点。在使用了一周作为主力桌面后,我想和大家聊聊这个可能改变你工作流的新选择。
什么是 Scrollable Tiling?
在深入 Niri 之前,我们先得聊聊它的核心理念:Scrollable Tiling(可滚动平铺)。
传统的平铺窗口管理器(如 i3, Sway, Hyprland, DWM)大多遵循一个逻辑:屏幕空间是有限的,所有窗口必须挤在这个有限的空间里。
- 打开 1 个窗口:全屏。
- 打开 2 个窗口:左右各 50%。
- 打开 3 个窗口:左右各 33%(或者变成更复杂的树状/网格布局)。
结果就是,窗口开得越多,每个窗口就越小,直到你无法正常使用。
而 Niri(以及它的灵感来源 PaperWM)打破了这个限制。它认为:屏幕只是一个观察窗口,而你的桌面是一个无限延伸的卷轴。
当你打开新窗口时,它不会挤压现有的窗口,而是直接排在旁边。如果屏幕装不下了,之前的窗口就会“滑”出屏幕边缘,像电影胶卷一样。
这意味着,无论你打开多少个终端或浏览器,它们永远保持你设定的最佳宽度,你只需要左右“滚动”就能查看它们。
为什么选择 Niri?
市面上已经有不少成熟的 Wayland 合成器(Compositor),Niri 作为一个后起之秀,凭什么吸引人?
1. 真正的“无限”工作流
这是 Niri 最杀手级的特性。在 Niri 中,我几乎不再需要手动管理“工作区”(Workspace)的概念。虽然 Niri 也有垂直排列的动态工作区,但在大多数情况下,我只需要在一个长长的横向卷轴上工作。
左边放浏览器查资料,中间放代码编辑器,右边放终端运行日志。想要看哪个,随手一划。这种体验非常接近我们在手机上切换应用的感觉,直观且符合直觉。
2. Rust 驱动的稳定性
Niri 是用 Rust 编写的。虽然我不是“Rust 神教”的信徒,但在系统底层组件上,Rust 带来的内存安全和稳定性确实让人放心。在我的体验中,Niri 从未发生过崩溃,通过 niri validate 也能在重启前确保配置文件的正确性。
3. 开箱即用的视觉体验
不像 Sway 那样朴素,也不像 Hyprland 那样需要复杂的 shader 配置。Niri 自带了非常优雅的圆角、阴影和边框动画。它的默认配置就已经非常美观,对于不想花太多时间配置 CSS 或 shader 的用户来说,非常友好。
特别是它的 Overview(概览) 模式,按下快捷键,所有窗口和工作区会像相册一样缩略展示,你可以快速找到你藏在卷轴深处的那个窗口。
4. 极其友好的 KDL 配置
Niri 使用 KDL (Knowledge Doc Language) 作为配置文件格式。相比于 i3/Sway 的独特语法或者 Hyprland 的类 C 语法,KDL 的结构非常清晰,有点像加强版的 JSON,但可读性更好。
深度体验与对比
为了更直观地说明,我简单对比一下我用过的几个主力 WM:
| 特性 | Sway | Hyprland | Niri |
|---|---|---|---|
| 平铺逻辑 | 树状结构 (Tree-based) | 动态二叉树 (Dwindle/Master) | 滚动卷轴 (Scrollable Columns) |
| 窗口管理 | 窗口越多越小 | 窗口越多越小 | 窗口保持原大小,向外延伸 |
| 配置难度 | 中等 | 高(极其灵活) | 低(KDL 结构清晰) |
| 视觉效果 | 朴素(需 swayfx 增强) | 极佳(动画丰富) | 优秀(自带圆角/动画) |
| 学习曲线 | 中等 | 高 | 中等(需适应滚动逻辑) |
我在使用 Hyprland 时,经常需要为了一个特定的布局去写脚本或者调整 plugin。而在 Niri 中,因为逻辑简化了(只有左右排列),反而让我更专注于内容本身,而不是“怎么摆放窗口”。
我的 Niri 实践心得
如果你也想尝试 Niri,这里有几条基于我实际体验的建议。
1. 安装与基础环境
Niri 目前在大多数主流发行版的仓库里都能找到(比如 Arch 的 AUR,或者 Fedora 的 COPR)。
安装完成后,你需要配置一些 Wayland 的基础组件,因为 Niri 只负责窗口管理:
- 启动器:推荐
fuzzel,速度快且支持图标。 - 状态栏:
waybar对 Niri 的支持已经很好了(通过wlr/workspaces或专门的 niri module)。 - 通知:
mako或swaync。
2. 核心快捷键配置
Niri 的默认键位是 Mod + 方向键 或 Mod + Wheel。我强烈建议配置鼠标滚轮或触控板手势。
在 config.kdl 中:
binds {
// 使用 Win + 滚轮 左右切换窗口
Mod+WheelScrollDown cooldown-ms=150 { focus-column-right; }
Mod+WheelScrollUp cooldown-ms=150 { focus-column-left; }
// Win + Enter 打开终端
Mod+Return { spawn "alacritty"; }
// 快速进入概览模式
Mod+I { toggle-window-overview; }
}
3. 巧用“居中”视角
Niri 有一个设定,默认情况下当前聚焦的窗口不一定在屏幕正中央。但我发现开启 center-focused-column 选项后,体验会好很多。它会让当前操作的窗口永远保持在屏幕 C 位,两侧的窗口作为参考,这对于宽屏显示器用户来说简直是福音。
layout {
// 聚焦的列始终居中
center-focused-column "always"
// 设定每个列的默认宽度
default-column-width { proportion 0.5; }
}
4. 遇到的问题
当然,Niri 也不是完美的。
由于它的逻辑比较新颖,一些依赖绝对坐标的旧应用可能会有点水土不服(虽然 XWayland 支持得不错)。另外,如果你习惯了像 i3 那样在一个屏幕上通过复杂的分割来监视 4 个窗口,Niri 可能需要你改变一下习惯,学会“滚动”而不是“平铺”。
最后
Niri 给我的感觉就像是 Linux 桌面的一股清流。
在大家都在卷特效、卷自定义脚本的时候,Niri 回归到了一个本质问题:我们在数字空间中究竟该如何处理信息的展示?
它给出的答案是:不要限制在物理屏幕的方框里,让数字空间无限延伸。
如果你厌倦了不断调整窗口大小,或者你是超宽带鱼屏的用户,我非常推荐你花一个周末的时间试一试 Niri。它可能不会适合所有人,但它提供的这种无拘无束的宽广视野,一旦习惯了,真的很难回得去。
Happy Hacking!

