在越来越多的桌面用户追求效率与极简的今天,传统的“窗口重叠+鼠标拖动”的界面操作方式逐渐显得笨重。你是否曾想过:打开新窗口,原有窗口却毫无影响;多显示器之间井然有序,不再混乱?这并不是幻想,niri,作为一款可滚动的平铺窗口管理器,正悄然改变我们的使用方式。
在了解 niri 之前,我们先来聊聊“平铺窗口管理器”是怎么一回事。传统的桌面环境允许窗口自由摆放和重叠,但效率常常取决于手动调整。而“平铺窗口管理器”则另辟蹊径:每个新窗口自动被安排在合适的位置,避免重叠,提升效率。
但 niri 更进一步:它引入了“可滚动”的概念。想象一下,每个显示器上不再是一个固定格子的窗口矩阵,而是像网页一样可以“横向滚动”的窗口带。新窗口不会挤占老窗口的位置,只会延展在右侧,形成一条“无限长”的横向时间线。这让窗口的打开顺序变得有机、连贯,而且极其直观。
niri 将窗口组织成横向滚动的“列”,每个新窗口都被安排在右侧新的一列中,现有窗口的位置完全不受影响。这不仅意味着打开新窗口不会打扰当前操作,也让回顾过去操作变得像滑动照片一样简单。
每个显示器有独立的“窗口带”,窗口不会跨越显示器——你在副屏打开的内容不会“越界”干扰主屏。这对多显示器用户来说是一大福音,尤其是在工作区切换时,内容更清晰,注意力更集中。
同时,niri 的“工作区”(workspace)是动态的、垂直排列的——这和 GNOME 类似,但更灵活。你可以一直向下切换到一个空工作区,随时保持整洁感。
很多人用过双屏、甚至三屏设置都知道,一个屏幕断开重连后,窗口常常回到混乱状态,排列被打乱。而 niri 则对这一问题做了非常优雅的设计。
在 niri 中,显示器的工作区状态是可以“记住”的。当你拔掉副屏时,它的窗口会自动迁移到主屏上,但如果再连接回来,它们又能“原地复原”——就像什么都没发生一样。这种“空间记忆感”,让临时更换工作环境不再是一场灾难。
niri 不仅能自动平铺窗口,还支持将多个窗口“分组”成标签页的形式。这类似浏览器标签页,把多个相关窗口(比如浏览器、笔记、参考文档)合并在一列中,通过标签切换,大大节省了屏幕空间,也让逻辑组织更清晰。
对于程序员来说,这种方式堪称生产力神器:你可以将调试终端、代码编辑器、文档分组在一个标签组里,按需切换,而不是堆在一起混战。
在视觉上,niri 支持边框渐变、动画、间距、透明度等精细调节,连边框颜色都可以使用 Oklab 或 Oklch 模型实现自然过渡。同时,niri 支持用自定义着色器来调整动画细节,对喜欢 DIY 的用户来说非常友好。
交互方面,niri 提供完整的触控板和鼠标手势支持,甚至还能识别绘图板和触摸屏(虽然目前还没有完整的触屏手势),你甚至可以用手势来快速切换工作区、分组窗口。
niri 内置了截图 UI,并支持通过 xdg-desktop-portal-gnome 实现窗口录屏和投屏。它还允许“屏蔽”敏感窗口,不让它们出现在投屏中,这对远程演示和会议分享尤为重要。
投屏时你还能实时切换“投影窗口”,比如一边投屏演示 PPT,一边偷偷打开参考笔记,不被别人看到。这种灵活的控制方式,是传统桌面难以实现的。
虽然 niri 原生是 Wayland 架构,原则上不直接支持 X11,但通过一个名叫 xwayland-satellite 的工具,可以轻松运行传统 X11 应用——比如 Steam 游戏、JetBrains 系列 IDE、Electron 应用(如 Discord、Slack)甚至 Ghidra 都能良好运行。
需要注意的是,一些对窗口坐标依赖较强的老旧 X11 程序,在 niri 中可能无法精确定位,适合使用嵌套环境(如 labwc)或 rootful 模式解决。
niri 并不是一个“完整的桌面环境”,它更像是一个组件型的“窗口引擎”。它需要你搭配状态栏(如 waybar)和启动器(如 fuzzel)等工具一起使用。因此,它并不适合刚接触 Linux 桌面的用户,而是面向有一定配置能力、希望构建个人化使用环境的高级用户。
如果你追求极致效率、注重窗口组织,并且愿意花点时间配置系统,那么 niri 无疑是一个非常值得尝试的新选择。