Niri:打破传统,体验“无限卷轴”式平铺窗口管理器

1次阅读
没有评论

共计 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)。
  • 通知makoswaync

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!

正文完
 0
评论(没有评论)