
niri 使用教程完整配置可滚动平铺 Wayland 桌面的快速上手指南【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niriniri 是一款可滚动平铺的 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 { ModReturn spawn(alacritty) Modq close-window }保存后先校验一遍语法再重启 niriniri 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-idorg.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 { ModReturn spawn(alacritty) Modq close-window Modj focus-window left Modk focus-window down Modl focus-window up Modsemicolon focus-window right ModShiftm maximize-window ModTab show-workspace-overview }动画全部集中在animations {}里。每条动画可以写时长曲线也可以写弹簧参数damping-ratio越小越有弹性stiffness越大回弹越快。觉得默认节奏不对先调全局slowdown而不是逐个改animations { slowdown 2.0 window-movement { spring damping-ratio1.0 stiffness800 epsilon0.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-1output HDMI-A-1 { scale 1.0 mode 1920x108060.000 position x1920 y0 }高频坑点快问快答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),仅供参考