niri 使用教程:完整配置可滚动平铺 Wayland 桌面的快速上手指南
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
niri 是一款可滚动平铺的 Wayland 合成器(合成器就是负责在屏幕上画窗口、管理输入的系统程序):窗口打开后自动排成列,左右滚动就能翻看整屏所有窗口,不用伸手拖位置。适合想体验 Wayland 平铺窗口管理、又不想从零啃传统 tiling WM 复杂配置的人。这篇 niri 使用教程带你从装好依赖,到调顺 niri 配置里的快捷键、工作区和动画。
niri 安装:三步从依赖到桌面跑起来
🚀 最短路径一共三步:装依赖、编译、写一份最小配置。
先装编译依赖,按你的发行版三选一:
# Ubuntu / Debian sudo apt-get install -y gcc clang libudev-dev libgbm-dev libxkbcommon-dev \ libegl1-mesa-dev libwayland-dev libinput-dev libdbus-1-dev libsystemd-dev \ libseat-dev libpipewire-0.3-dev libpango1.0-dev libdisplay-info-dev # Fedora / RHEL sudo dnf install gcc libudev-devel libgbm-devel libxkbcommon-devel wayland-devel \ libinput-devel dbus-devel systemd-devel libseat-devel pipewire-devel \ pango-devel cairo-gobject-devel clang libdisplay-info-devel # Arch Linux sudo pacman -S --needed base-devel clang libudev libgbm libxkbcommon egl-wayland \ wayland libinput dbus systemd seatd pipewire pango libdisplay-info然后拿到源码并编译运行(在 TTY 下运行,而不是嵌套在别的合成器里):
git clone https://gitcode.com/GitHub_Trending/ni/niri cd niri cargo build --release ./target/release/niri作为主实例启动时可以加--session参数,它会把环境变量导入 D-Bus 并托管 D-Bus 服务。
niri 的配置文件用 KDL 格式(一种以节点名组织、比 INI 更适合写嵌套结构的配置语法),默认读取~/.config/niri/config.kdl。没有配置文件时 niri 也能直接跑(用内置默认值),你可以随时建一份开始定制:
// ~/.config/niri/config.kdl binds { Mod+Return spawn("alacritty") Mod+q close-window }保存后先校验一遍语法,再重启 niri:
niri validateniri 平铺窗口怎么摆、工作区怎么分
niri 的平铺逻辑是:每个窗口占一"列",同列多个窗口上下堆叠;列装不下时,横向滚动屏幕就能继续看。你不需要拖拽,只需要决定"列多宽、同列怎么显示、窗口去哪"这三件事。
控制列宽和同列显示方式。layout {}块里管的就是这些:
layout { gaps 16 default-column-width { proportion 0.5; } default-column-display "tabbed" }gaps是窗口之间的间距;default-column-width用比例控制新列默认占视口一半宽;default-column-display "tabbed"让同一列的多个窗口变成标签页叠放,而不是上下挤在一起。想让某列临时占满整行宽度,可以用maximize-window动作把当前列最大化:
把工作区想成"一层层可以上下滚动的屏"。每个工作区是独立的一套平铺布局,纵向滚动即在它们之间切换。想让某个工作区永远存在(哪怕里面没窗口),就在配置顶层声明命名工作区:
workspace "chat" { open-on-output "DP-2" } window-rule { match app-id="org.gnome.Fractal" open-on-workspace "chat" }上面这段的效果:chat这个工作区常驻在 DP-2 显示器上,Fractal 聊天窗口一启动就自动落进它。配合spawn-at-startup动作(如spawn-at-startup "alacritty"),开机就能有一组固定的初始布局。
四周留白用 struts 而不是 gaps。gaps只管窗口之间,屏幕边缘的固定边距要写在struts {}里:
layout { struts { top 32 left 32 right 32 bottom 32 } }自定义快捷键、动画和输入:把 niri 调教到顺手
⌨️ 这一节把三块个性化设置放一起讲:binds、animations、input。
快捷键是 niri 的交互主线。常见动作有spawn(启动程序)、close-window、focus-window/move-window(焦点或整列左、右、上、下移动)、maximize-window、show-workspace-overview(打开总览)。一套够用的起手配置:
binds { Mod+Return spawn("alacritty") Mod+q close-window Mod+j focus-window left Mod+k focus-window down Mod+l focus-window up Mod+semicolon focus-window right Mod+Shift+m maximize-window Mod+Tab show-workspace-overview }动画全部集中在animations {}里。每条动画可以写时长曲线,也可以写弹簧参数(damping-ratio越小越有弹性,stiffness越大回弹越快)。觉得默认节奏不对,先调全局slowdown而不是逐个改:
animations { slowdown 2.0 window-movement { spring damping-ratio=1.0 stiffness=800 epsilon=0.0001 } }输入设备按类型配置,注意是input {}下的keyboard、touchpad、mouse等子块,每个子块对该类型所有设备生效:
input { keyboard { xkb { layout "us"; } repeat-rate 30 repeat-delay 500 } touchpad { natural-scroll accel-speed 0.2 } }多显示器在output {}里按接口名配置,名字先跑niri msg outputs查一下(笔记本内屏通常叫eDP-1):
output "HDMI-A-1" { scale 1.0 mode "1920x1080@60.000" position x=1920 y=0 }高频坑点快问快答:niri 配置不生效的常见原因
❓ 统一按"现象→原因→解法"看这四个最常遇到的问题。
现象:改完配置没反应,或者启动时报配置错误
- 原因:KDL 写错一个括号或键名,整份配置就无效;也可能改的根本不是 niri 正在读的那个文件。
- 解法:改完先跑
niri validate,它会直接指出语法问题;再确认路径是~/.config/niri/config.kdl,或给 niri 传--config指定别的文件。niri 运行中会监视配置文件,保存正确的新配置会热加载生效。
现象:键盘布局、按键重复率不生效
- 原因:xkb 配置不是顶层一个
xkb_layout键,而是input→keyboard→xkb三层嵌套,层级写错就不会被读取。 - 解法:按
input { keyboard { xkb { layout "us" } } }的结构写;改完用niri msg keyboard-layouts回读 niri 实际生效的布局。
现象:旧显卡上窗口切换、滚动时掉帧
- 原因:多数动画走弹簧模拟,高频刷新时开销不小,集显或旧核显容易跟不上。
- 解法:
animations {}里写一行off一次性关掉全部动画;或者先只把slowdown调大观察效果,再对个别动画单独禁用,不必全关。
现象:窗口紧贴屏幕边缘,想留一圈固定边距
- 原因:
gaps只控制窗口之间的间距,屏幕边缘的留白它管不到。 - 解法:用
struts { top 32 left 32 right 32 bottom 32 }给四边加固定边距(上文 layout 一节已给过示例)。
进阶入口:文档、源码与服务文件
- 配置项全集与逐项说明在 docs/wiki/,重点读 Configuration:-Key-Bindings.md、Configuration:-Named-Workspaces.md、Configuration:-Gestures。
- 想改配置解析行为,看 niri-config/;想写脚本和 niri 通信(对应
niri msg命令族),看 niri-ipc/。 - 想随登录自动启动:把仓库自带的 resources/niri.service 拷到
~/.config/systemd/user/,执行systemctl --user enable niri即可。 - 跟随上游更新时,拉取新代码后重新
cargo build --release并覆盖旧二进制就行。
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考