Niri
Niri 是一个可滚动的平铺式 Wayland 合成器。与 Sway 或 Hyprland 不同的地方在于,Niri 将窗口排列在一个无限延伸的水平桌面上,你可以向左或向右滚动(当然也可以实现更复杂的布局)。它类似于 GNOME 的 PaperWM 和 KDE 的 Karousel。
安装
此外,为了获得更好的使用体验,你可能还需要安装以下软件:
- fuzzel:Niri 的默认应用启动器
- mako:通知管理器
- waybar:Wayland 状态栏
- xdg-desktop-portal-gtk、xdg-desktop-portal-gnome:用于实现屏幕共享功能
- alacritty:Niri 的默认终端
- swaybg:设置桌面背景图片
- swayidle、swaylock:用于在空闲时锁定屏幕
- xwayland-satellite:用于运行 X11 应用程序
- udiskie:用于管理和自动挂载 USB 驱动器
启动
Niri 附带了一个可以被显示管理器执行的 桌面项。在显示管理器中选择它将会启动 niri-session。niri-session 会把 环境变量导入至systemd.
你也可以从 getty 执行:
niri-session
这可以结合Getty#自动登录到虚拟控制台来实现一个无缝的启动体验。
配置
Niri 从 ~/.config/niri/config.kdl 读取配置文件。它是一个有多个部分的 KDL 文件。首次启动创建的配置文件通过注释给出了默认的选项设置。然而,随着更新所引入的新选项并不会在用户的配置中所体现,你可能需要查看 Niri 官方文档。
Niri 在配置文件保存时会自动应用更改。无效的配置在自动应用更改时并不会使 Niri 崩溃,而是会保留上一次可工作的状态,并提醒用户配置文件无效。 可以执行 niri validate 来在 Niri 会话外检查配置是否有效。
键盘布局
要配置键盘布局,编辑 input/keyboard/xkb 部分.
例如,假设你想要有一个 CapsLock 当作 Ctrl 的 "US Int Alt Gr" 布局:
~/.config/niri/config.kdl
input {
keyboard {
xkb {
layout "us"
variant "altgr-intl"
options "ctrl:nocaps"
}
}
...
}
显示输出
首先执行 niri msg outputs 以获取所有 Niri 识别到的输出。然后你可以给每个显示器应用配置。例如设置 HDMI 显示器为 2560x1440 60Hz 并有 1.2 倍缩放,且关闭笔记本显示器,可以这样设置:
~/.config/niri/config.kdl
output "HDMI-A-1" {
mode "2560x1440@60.000"
scale 1.2
}
output "eDP-1" {
off
}
使用 kanshi 来动态设置布局
你也可以使用 kanshi 来动态设置布局,例如当你想要在连接至外部显示器时关闭内置显示器。
按键绑定
这一部分允许配置各种 Niri 可用的快捷键。很多已经在初次启动时生成的默认配置中配置好了。它们都可以重新改为其他按键。
请注意 Niri 不 加载任何默认的绑定。若一个绑定没有在配置文件中指定,那么它就不会生效。“默认”只是在自动生成的配置文件中提供的。因此,在移除它们时请小心。建议使用注释来注释掉不需要的绑定。
按键绑定的设置要通过使用修饰键和+号以及在大括号内写上要执行的动作。'spawn' 这个动作会启动指定的程序。例如,你会有这样的按键绑定:Mod+T 启动 alacritty 以及 Mod+D 启动 fuzzel包。默认配置下直接运行 Niri 时 Mod 一般是 Super 键,当它在其他环境下作为一个窗口运行时则是 Alt 键。
~/.config/niri/config.kdl
binds {
...
Mod+T { spawn "alacritty"; }
Mod+D { spawn "fuzzel"; }
...
}
注意使用 spawn 时所有用空格分开的参数都需要用引号包裹:
~/.config/niri/config.kdl
binds {
...
Mod+Ctrl+semicolon {
spawn "swaylock" "-c" "121212" "-e" "-f" "-F"
}
...
}
WASD-式操作
可以配置 Niri 的工作区、窗口切换快捷键类似于游戏中的 WASD 那样:
~/.config/niri/config.kdl
binds {
...
Mod+A { focus-column-left; }
Mod+S { focus-window-or-workspace-down; }
Mod+W { focus-window-or-workspace-up; }
Mod+D { focus-column-right; }
...
}
注意这可能也需要更改其他的绑定。同时,一些人可能会喜欢在右手侧配置,或是 Vim 式的操作。
自动启动
Niri 可以让某些程序随 Niri 一起启动。 例如上面提到的程序,比如 mako包, waybar包 和 swayidle包/swaylock包 可以这样配置
~/.config/niri/config.kdl
spawn-at-startup "mako" spawn-at-startup "waybar" spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f"
注意这些进程被绑定到了 Niri 的会话,使得当 Niri 退出或挂起时,它们也会被杀死。为使它们能持续运行,你可能需要通过添加 "&" 参数来把它们设置成后台任务。
XWayland
Niri 不提供 XWayland 支持来运行 X11 应用。它推荐使用 xwayland-satellite包 这个外部工具来作为替代。这个包被列到了可选依赖中,安装它之后不需要做额外的配置。