跳转到内容

Niri

来自 Arch Linux 中文维基

Niri 是一个可滚动的平铺式 Wayland 合成器。与 SwayHyprland 不同的地方在于,Niri 将窗口排列在一个无限延伸的水平桌面上,你可以向左或向右滚动(当然也可以实现更复杂的布局)。它类似于 GNOME 的 PaperWM 和 KDE 的 Karousel。

安装

可以通过安装 niri 来获取 Niri。

此外,为了获得更好的使用体验,你可能还需要安装以下软件:

启动

Niri 附带了一个可以被显示管理器执行的 桌面项。在显示管理器中选择它将会启动 niri-sessionniri-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, waybarswayidle/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 这个外部工具来作为替代。这个包被列到了可选依赖中,安装它之后不需要做额外的配置。

另见