niri 入门上手:从零跑起滚动平铺 Wayland 合成器
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
niri 是一款用 Rust 编写的滚动平铺 Wayland 合成器,面向想要平铺式窗口管理、又受够了"每开一个窗口,全屏窗口都被挤一遍"的桌面用户。它把窗口按"列"排布,列可以在一条无限长的水平轨道上左右滚动,新窗口开出来只占自己的位置,不挤占已有窗口。这篇文章按"第一次运行到日常使用"的顺序,带你从安装、登录、快捷键到改配置走一遍,并解释它这样设计的来龙去脉。
开一个窗口,现有窗口不再挪动
传统平铺窗口管理器的痛点很具体:你打开第三个窗口时,前两个窗口会被重新分割、缩放,桌面上所有东西都在动。滚动平铺的思路来自 GNOME 扩展 PaperWM:把屏幕想象成一条向右无限延伸的胶片,每个窗口(或一列窗口)是胶片上的一帧。新窗口加到胶片后面,你往右滚就能看见它,胶片前面的内容纹丝不动。
niri 把这个思路做成了独立的合成器,并处理了扩展做不到的多屏问题:
- 每块显示器有自己的窗口条,窗口永远不会溢出到邻屏。
- 工作区是动态的、垂直排列,每块显示器一套独立工作区,且最下面永远有一个空工作区兜底。
- 拔掉显示器时,它的工作区会挪到别的屏幕上;重新接上后又会挪回来。
下图展示了这种"显示器各自挂一条垂直工作区序列"的结构:
作者写 niri 的直接动机之一,就是 PaperWM 作为 GNOME Shell 扩展,被迫在 Shell 的全局坐标空间里做窗口防溢出,没法把显示器干净地隔离开。独立合成器则可以在架构上就把"每屏一条轨道"做死。
把 niri 装到能登录的程度
对绝大多数人来说,发行版包是最省心的路径,仓库的 Getting Started 文档 按发行版列了命令。以 Fedora 为例:
sudo dnf copr enable yalter/niri sudo dnf install niri systemctl --user add-wants niri.serviceArch 上pacman -S niri即可,Ubuntu 25.10+ 有官方认可的 PPA。包安装完成后,注销,在显示管理器里选 Niri 重新登录就行。
如果你要自己从源码编译(比如想要最新版,或想参与开发),流程不复杂但首次编译偏慢,这属于 Rust release 构建的正常现象:
git clone https://gitcode.com/GitHub_Trending/ni/niri cd niri cargo build --release依赖是一批 C 开发库(udev、GBM、xkbcommon、wayland、pipewire、pango 等),按发行版用包管理器装一次即可,Getting Started 文档 的 Building 一节给了完整清单。Rust 工具链用 rustup 装最新版。编完后二进制在target/release/niri,配合仓库resources/里的niri-session、niri.desktop、niri.service等文件手动装到对应目录(文档里有对照表),效果和装包一致。
登录后前 30 秒:先熟悉默认快捷键
登录进 niri 后,它开箱就能用,因为构建时内嵌了一份默认配置。没有配置文件时,它会自动在~/.config/niri/config.kdl生成一份默认配置,所以你的第一次修改可以直接在这个文件上做。
在 TTY 下 Mod 键是 Super(Windows 键),进终端试这几组键就够上手:
Super+T开终端,Super+D开应用启动器,Super+Q关焦点窗口。Super+←/→在列之间移动焦点,Super+J/K在一列内上下移动。- 凡是"移动焦点"的键加
Ctrl就变成"把窗口挪过去",比如Super+Ctrl+→把整列移到右边。 Super+O打开总览(Overview),把整条工作区序列缩放到视野里,适合在几十个窗口间跳转。Super+Shift+/弹出完整快捷键列表,忘了什么随时查。
总览模式的效果大致如下,全屏窗口在里面仍然保持自己是布局的一部分:
如果不想走显示管理器,也可以直接进现有桌面,在窗口里运行niri试跑;窗口模式主要用于开发体验,快捷键略有异常属正常现象。正式从 TTY 启动则用niri-session,它会以 systemd 服务方式拉起 niri 并建立图形会话,portal 等服务依赖它。
把 config.kdl 改成自己的样子
niri 的配置是 KDL 格式,最重要的两个特性:实时热重载和可校验。编辑保存后立刻生效,不用重启合成器;写错了也能在应用前用niri validate提前发现语法问题。
配置的组织方式是按"块"分节:input、layout、binds、window-rule、animations、gestures等。改动通常就是"改这一行,得到这个效果",比如:
// 把列间距改成 8 像素,保存即生效 layout { gaps 8 }想要某个应用永远浮动,就加一条窗口规则:
// 让名字里带 "Settings" 的窗口浮动 window-rule { matches title_regex "Settings" floating }布局相关的选项值得一试:gaps控制窗口间距,struts可以在屏幕上下左右预留固定区域(放状态栏之类),效果示意如下:
各配置节都有独立文档页,配置入门 一页带全部链接,遇到不认识的块名直接去查对应小节即可。
屏幕黑掉或窗口卡住时,先过这三关
新手最常撞到的问题基本集中在开机和显卡这两件事上,按顺序自查:
- NVIDIA 黑屏:这是最常见的。先确认驱动新到支持 GBM,再把
nvidia-drm.modeset=1加进内核启动参数开启内核态显示;两者都满足后大部分黑屏问题会消失。 - TTY 下启动方式不对:直接跑
niri和跑niri-session不是一回事,后者才导入全局环境、注册 D-Bus 服务。从 TTY 启动请用niri-session(systemd)或niri --session(其他 init)。 - 虚拟机里黑屏:给虚拟机开 3D 加速。Asahi 等 ARM 平台上如果检测不到渲染设备,可在配置的
debug块里手动指定/dev/dri/renderD*设备。
两个小的日常细节:如果你额外装了桌面外壳(比如 DankMaterialShell),默认配置还会拉起 Waybar,出现两条状态栏时删掉配置里的spawn-at-startup "waybar"一行即可;需要跑 X11 程序的话,25.08 起 Xwayland 已通过 xwayland-satellite 集成,装包时带上 xwayland-satellite 依赖。
从第一次登录到现在,你已经有了一个能开终端、能平铺、能热重载配置的桌面。下一步值得做的事:把layout里的gaps和边框颜色按自己的口味调一轮,配置保存即生效,几行之内就能看出 niri 这套滚动平铺是不是你的工作流。
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考