Arch Linux上配置Niri:基础篇

阅读提示

  • 本文默认 Niri 主配置文件为:

    ~/.config/niri/config.kdl
  • 文中使用 Vim 编辑配置文件,你也可以换成 Nano、Neovim 或其他编辑器。

  • 安装软件包时,请按软件包名称选择提供者。例如 JACK 兼容层选择 pipewire-jack,字体选择 noto-fonts

  • 部分 AUR 软件包或配置项可能随时间变化,请以软件包页面及 Niri 官方文档为准。


0. 创建普通用户并配置 sudo

请避免直接使用 root 账户完成日常桌面环境配置。

创建用户并加入 wheel 用户组:

useradd -m -G wheel -s /bin/bash tinsiag
passwd tinsiag

安装 sudo

pacman -S sudo

编辑 sudoers 文件:

EDITOR=vim visudo

找到以下内容并删除前面的 #

%wheel ALL=(ALL:ALL) ALL

保存后退出,重新登录普通用户账户。


1. 可选:安装 Fish Shell

安装 Fish:

sudo pacman -S fish

临时进入 Fish:

fish

如果希望 Kitty 打开时直接进入 Fish,可在 Niri 快捷键中使用:

Mod+T hotkey-overlay-title="打开终端:Kitty + Fish" {
    spawn "kitty" "-e" "fish";
}

也可以使用 Shell 命令:

Mod+T {
    spawn-sh "kitty -e fish";
}

2. 安装 Niri 与基础组件

安装 Niri、终端、启动器、浏览器及常用字体:

sudo pacman -S niri xwayland-satellite xdg-desktop-portal-gnome fuzzel kitty firefox wqy-zenhei

各软件包的用途如下:

软件包 用途
niri Niri 平铺窗口管理器
xwayland-satellite 为 X11/XWayland 应用提供兼容支持
xdg-desktop-portal-gnome 文件选择、屏幕共享等桌面门户能力
fuzzel 程序启动器
kitty 终端模拟器
firefox 浏览器
wqy-zenhei 文泉驿正黑中文字体

安装时如出现提供者选择:

  • JACK 兼容层请选择 pipewire-jack
  • 字体提供者请选择 noto-fonts

首次启动 Niri:

niri-session

如果使用 GDM、SDDM 等显示管理器,可在登录界面直接选择 Niri 会话。


3. 修改默认终端与基础快捷键

按下 Super+Shift+E 退出 Niri,然后编辑配置:

vim ~/.config/niri/config.kdl

搜索 alacritty,将默认终端绑定修改为 Kitty:

Mod+T hotkey-overlay-title="打开终端:Kitty" {
    spawn "kitty";
}

常用快捷键如下:

快捷键 功能
Super+Shift+/ 打开或关闭 Niri 快捷键说明
Super+T 打开终端
Super+D 打开 Fuzzel 启动器
Super+U / Super+I 上下切换工作区
Super+Shift+E 退出 Niri

4. 配置显示器

先查看显示输出名称及支持的模式:

niri msg outputs

config.kdl 中添加显示器配置。请将接口名、分辨率、刷新率与缩放比例替换为自己的实际参数:

output "eDP-1" {
    mode "2560x1440@165"
    scale 1.33
    position x=0 y=0
    focus-at-startup

    // 可选:启用可变刷新率
    // variable-refresh-rate

    // 可选:旋转屏幕
    // transform "90"
}

外接显示器示例:

output "DP-2" {
    mode "2560x1440@180"
    scale 1
    position x=1925 y=0
}

多显示器坐标使用缩放后的逻辑尺寸:

逻辑宽度 = 物理分辨率宽度 ÷ scale
逻辑高度 = 物理分辨率高度 ÷ scale
  • 右侧显示器:修改 x
  • 下方显示器:修改 y
  • 左侧或上方显示器:使用负坐标;
  • 不设置 position 时,Niri 会自动排列显示器。

5. 关闭鼠标加速

在配置文件的 input 中找到或加入 mouse

input {
    mouse {
        accel-profile "flat"

        // 可选:鼠标速度,通常范围为 -1.0 至 1.0
        // accel-speed -0.2

        // 可选:滚轮速度
        // scroll-factor horizontal=2.0 vertical=1.0
    }

    touchpad {
        // 不需要自然滚动时,注释掉这一行
        natural-scroll
    }
}

accel-profile "flat" 可关闭系统默认的鼠标加速曲线。


6. 安装通知服务与 Polkit 权限代理

安装通知服务、通知命令和 Polkit 认证代理:

sudo pacman -S libnotify mako polkit-gnome

在 Niri 配置中加入:

spawn-at-startup "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
spawn-at-startup "mako"

无需重启 Niri,立即启动服务:

/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & disown
mako & disown

创建 Mako 配置文件:

mkdir -p ~/.config/mako
vim ~/.config/mako/config

写入以下内容:

default-timeout=8000
border-radius=8

重新加载 Mako:

makoctl reload

测试通知:

notify-send "Niri" "通知功能正常"

7. 设置中文界面

如果希望应用界面使用中文,但仍保持系统主语言为英文,可在 Niri 配置中加入:

environment {
    LC_MESSAGES "zh_CN.UTF-8"
}

仅设置 LC_MESSAGES 可以让菜单、提示等界面使用中文,同时避免全局切换语言可能引发的输入法兼容问题。

若系统尚未生成中文 Locale,编辑:

sudo vim /etc/locale.gen

取消下面这一行的注释:

zh_CN.UTF-8 UTF-8

然后生成 Locale:

sudo locale-gen

退出并重新登录后生效。

如果只想让某个应用使用完整中文环境,可单独启动:

LANG=zh_CN.UTF-8 firefox

8. 添加 Arch Linux CN 软件源

仅当你需要安装 Arch Linux CN 中的软件包,例如 rime-ice-pinyin-git 或 Yay 时,才需要执行本节操作。

编辑 Pacman 配置:

sudo vim /etc/pacman.conf

在文件末尾加入:

[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
Server = https://mirrors.hit.edu.cn/archlinuxcn/$arch
Server = https://repo.huaweicloud.com/archlinuxcn/$arch

安装密钥环:

sudo pacman -Sy archlinuxcn-keyring

随后进行完整系统更新,避免部分升级:

sudo pacman -Syu

9. 安装 Fcitx5、RIME 与雾凇拼音

安装输入法框架、RIME 引擎及雾凇拼音:

sudo pacman -S fcitx5-im fcitx5-rime rime-ice-pinyin-git

在 Niri 的 environment 配置中补充:

environment {
    LC_MESSAGES "zh_CN.UTF-8"
    XMODIFIERS "@im=fcitx"
}

创建 RIME 配置目录:

mkdir -p ~/.local/share/fcitx5/rime
vim ~/.local/share/fcitx5/rime/default.custom.yaml

写入:

patch:
  __include: rime_ice_suggestion:/

立即启动 Fcitx5:

fcitx5 -d

打开 Fcitx5 配置,添加 Rime(中州韵) 输入法。首次切换时需要等待部署完成。

将 Fcitx5 加入 Niri 自动启动:

spawn-at-startup "fcitx5"

如果 Fcitx5 导致部分 GTK 弹窗无法正常打开,可以添加一个临时开关:

Mod+F1 {
    spawn-sh "pkill fcitx5 || fcitx5";
}

10. 配置 Nautilus 文件管理器

安装 Nautilus 及常用扩展:

sudo pacman -S ffmpegthumbnailer gvfs-smb nautilus-open-any-terminal file-roller gnome-keyring gst-plugins-base gst-plugins-good gst-libav

这些组件主要提供以下功能:

  • 文件缩略图;
  • SMB/NAS 网络共享访问;
  • 右键在终端中打开;
  • 压缩与解压;
  • 密钥环与密码保存;
  • 媒体信息预览。

如需让 Nautilus 的“在终端中打开”调用 Kitty,可创建兼容链接:

sudo ln -s /usr/bin/kitty /usr/bin/gnome-terminal

如果 /usr/bin/gnome-terminal 已存在,请不要覆盖。此时建议通过 nautilus-open-any-terminal 自身的设置方式选择终端。

让 Kitty 默认使用 Fish:

mkdir -p ~/.config/kitty
vim ~/.config/kitty/kitty.conf

写入:

shell /usr/bin/fish

为 Nautilus 添加快捷键:

Mod+E {
    spawn "nautilus";
}

11. 可选:使用 Thunar 与 GTK 文件选择器

如果更喜欢 Thunar,可以安装以下组件:

sudo pacman -S --needed xdg-desktop-portal-gtk thunar tumbler ffmpegthumbnailer poppler-glib gvfs-smb file-roller thunar-archive-plugin gnome-keyring

创建 Portal 配置目录:

mkdir -p ~/.config/xdg-desktop-portal
vim ~/.config/xdg-desktop-portal/niri-portals.conf

写入:

[preferred]
default=gnome;gtk;
org.freedesktop.impl.portal.FileChooser=gtk

12. 配置 Swaylock 锁屏

安装 Swaylock Effects:

sudo pacman -S swaylock-effects

创建配置文件:

mkdir -p ~/.config/swaylock
vim ~/.config/swaylock/config

写入:

screenshots
clock
indicator
indicator-radius=200
indicator-thickness=15
effect-blur=10x5

Niri 默认配置通常已经包含 Mod+Alt+L 的锁屏绑定。可在 config.kdl 中搜索 swaylock 确认。


13. 配置 Swayidle 自动锁屏、熄屏与休眠

安装 Swayidle:

sudo pacman -S swayidle

创建脚本目录和脚本文件:

mkdir -p ~/.config/niri/scripts
vim ~/.config/niri/scripts/swayidle.sh

写入:

#!/usr/bin/env bash

# 5 分钟锁屏,10 分钟关闭显示器,20 分钟挂起
exec swayidle -w \
    timeout 300  'swaylock -f' \
    timeout 600  'niri msg action power-off-monitors' \
    resume       'niri msg action power-on-monitors' \
    timeout 1200 'systemctl suspend'

赋予执行权限:

chmod +x ~/.config/niri/scripts/swayidle.sh

加入 Niri 自动启动:

spawn-at-startup "~/.config/niri/scripts/swayidle.sh"

立即运行:

bash ~/.config/niri/scripts/swayidle.sh & disown

14. 蓝牙与性能模式

蓝牙

安装蓝牙服务和终端管理工具:

sudo pacman -S --needed bluez bluetui
sudo systemctl enable --now bluetooth

如需图形化蓝牙管理工具,可额外安装并运行 blueberry

性能模式

安装并启用电源配置服务:

sudo pacman -S power-profiles-daemon
sudo systemctl enable --now power-profiles-daemon

15. 安装 Clipse 剪贴板管理器

安装 Yay:

sudo pacman -S yay

安装剪贴板组件:

yay -S wl-clipboard clipse-git clipse-gui

立即开启剪贴板历史监听:

clipse --listen

在 Niri 中自动启动:

spawn-sh-at-startup "clipse --listen"

设置快捷键:

Mod+Alt+V {
    spawn "clipse-gui";
}

查询窗口信息:

niri msg pick-window

选中 Clipse GUI 窗口后,根据返回的 app-idtitle 添加浮动规则:

window-rule {
    match app-id="clipse-gui"
    open-floating true
}

16. 使用 Satty 编辑截图

安装 Satty:

sudo pacman -S satty

创建配置目录:

mkdir -p ~/.config/satty
vim ~/.config/satty/config.toml

写入:

[general]
copy-command = "wl-copy"
focus-toggles-toolbars = true
actions-on-right-click = ["save-to-clipboard"]

创建截图编辑脚本:

vim ~/.config/niri/scripts/edit-screenshot.sh

写入:

#!/usr/bin/env bash

# 记录截图前的剪贴板哈希
CLIPNOW=$(wl-paste | sha1sum)

# 打开 Niri 区域截图
niri msg action screenshot

# 等待剪贴板内容变化
while [ "$(wl-paste | sha1sum)" = "$CLIPNOW" ]; do
    sleep .05
done

# 将新截图传给 Satty
wl-paste | satty -f -

赋予脚本执行权限:

chmod +x ~/.config/niri/scripts/edit-screenshot.sh

设置快捷键:

Mod+Shift+S {
    spawn "~/.config/niri/scripts/edit-screenshot.sh";
}

Niri 原生截图的区域截图、全屏截图、窗口截图及保存路径,可在 config.kdl 中搜索 screenshotscreenshot-path


17. 配置 PipeWire 音频服务

安装声卡相关固件:

sudo pacman -S --needed sof-firmware alsa-ucm-conf alsa-firmware

安装 PipeWire 及兼容层:

sudo pacman -S --needed pipewire wireplumber pipewire-pulse pipewire-alsa pipewire-jack

启用用户级服务:

systemctl --user enable --now pipewire pipewire-pulse wireplumber

安装图形化音量控制工具:

sudo pacman -S pavucontrol

18. 配置屏幕共享

在 Niri 启动项中同步会话环境并启动 GNOME Portal:

spawn-sh-at-startup "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=niri && /usr/lib/xdg-desktop-portal-gnome"

设置完成后,重启 Niri 或重新登录系统。

可以通过支持屏幕共享功能的浏览器、会议软件或录屏工具测试是否能够正常选择显示器或窗口。


19. 可选:安装 Flatpak 与软件商城

安装 Flatpak 和 Bazaar:

sudo pacman -S flatpak bazaar

如需使用上海交通大学的 Flathub 镜像,可执行:

sudo flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub

完成后建议重启系统。


20. 可选:Alt+Tab 窗口切换

新版 Niri 可能已经提供或改进原生窗口切换功能。配置前建议先检查当前默认配置与官方文档。

安装 Niriswitcher:

yay -S niriswitcher

立即启动:

niriswitcher & disown

加入自动启动和快捷键:

spawn-at-startup "niriswitcher"

Alt+Tab repeat=false {
    spawn "niriswitcherctl" "show" "--window";
}

仅显示当前显示器上的窗口:

mkdir -p ~/.config/niriswitcher
vim ~/.config/niriswitcher/config.toml

写入:

current_output_only = true

21. 笔记本亮度调节

安装亮度控制工具:

sudo pacman -S brightnessctl

后续可结合 Niri 快捷键调用 brightnessctl 调节亮度。


22. 配置 Swww 与 Waypaper 壁纸

安装 Swww 和 Waypaper:

yay -S swww waypaper

在 Niri 中启动 Swww 守护进程,并绑定 Waypaper:

spawn-at-startup "swww-daemon"

Mod+Alt+W {
    spawn "waypaper";
}

使用以下命令查询 Waypaper 窗口信息:

niri msg pick-window

然后添加浮动窗口规则:

window-rule {
    match app-id="waypaper"
    open-floating true
}

23. 安装 Waybar

安装 Waybar 和 Nerd Font:

sudo pacman -S waybar ttf-jetbrains-mono-nerd

如果默认配置中没有 Waybar 自动启动项,加入:

spawn-at-startup "waybar"

添加重启 Waybar 的快捷键,方便配置修改后重新加载:

Mod+F2 {
    spawn-sh "pkill waybar || true && waybar";
}

立即启动 Waybar:

waybar & disown

可选安装蓝牙和网络托盘组件:

sudo pacman -S blueman network-manager-applet dnsmasq

加入自动启动:

spawn-at-startup "blueman-applet"
spawn-at-startup "nm-applet"

如果不需要图形化网络托盘,可直接在终端中运行:

nmtui

24. 可选:导入 Waybar 配置

这一部分依赖较多,且 AUR 包名可能发生变化。建议先创建系统快照,再逐项安装和测试。

安装相关依赖:

yay -S --needed waybar-cava-git cava grim slurp swappy wf-recorder hyprpicker waybar-niri-taskbar-git waybar-module-pacman-updates-git ddcutil-service blueberry wlogout

下载配置仓库:

git clone https://github.com/SHORiN-KiWATA/ShorinArchExperience-ArchlinuxGuide.git

在仓库中找到类似以下路径的 Waybar 配置目录:

dotfiles/.config/waybar-niri-LikeWin11

将其复制到:

~/.config/waybar

随后使用前文设置的快捷键重启 Waybar。

如果需要通过 DDC/CI 调节外接显示器亮度,还需要将当前用户加入 i2c 组:

sudo gpasswd -a "$USER" i2c
reboot

25. 可选:使用 Matugen 根据壁纸生成 Waybar 配色

安装 Matugen 并创建模板目录:

yay -S matugen
mkdir -p ~/.config/matugen/templates

colors.css 模板复制到:

~/.config/matugen/templates/colors.css

编辑 Matugen 配置:

vim ~/.config/matugen/config.toml

写入:

[config.wallpaper]
command = "swww"

[templates.waybar]
input_path = '~/.config/matugen/templates/colors.css'
output_path = '~/.config/waybar/colors.css'

编辑 Waypaper 配置:

vim ~/.config/waypaper/config.ini

设置壁纸切换后的执行命令:

post_command = matugen image $wallpaper

同时确认 Waybar 的 style.css 已导入生成的颜色文件:

@import "colors.css";

26. Niri 外观与交互微调

全局窗口规则示例:

window-rule {
    geometry-corner-radius 8
    clip-to-geometry true
    opacity 0.99
    draw-border-with-background false
}

其他常用配置项:

配置项 用途
focus-ring 设置聚焦边框的粗细与颜色
prefer-no-csd 请求应用隐藏客户端标题栏
focus-follows-mouse 鼠标悬停时自动聚焦窗口
warp-mouse-to-focus 切换焦点后将鼠标移动到目标窗口
gaps 设置窗口间距
center-focused-column 设置聚焦列居中策略
preset-column-widths 设置窗口宽度切换预设
default-column-width 设置新窗口默认宽度

安装 Breeze 光标主题:

sudo pacman -S breeze-cursors

在 Niri 配置中加入:

cursor {
    xcursor-theme "breeze_cursors"
    xcursor-size 30
    hide-after-inactive-ms 15000
}

关键路径速查

内容 路径
Niri 主配置 ~/.config/niri/config.kdl
Niri 脚本 ~/.config/niri/scripts/
Mako 配置 ~/.config/mako/config
Fcitx5 RIME 配置 ~/.local/share/fcitx5/rime/
Kitty 配置 ~/.config/kitty/kitty.conf
XDG Portal 配置 ~/.config/xdg-desktop-portal/niri-portals.conf
Swaylock 配置 ~/.config/swaylock/config
Satty 配置 ~/.config/satty/config.toml
Niriswitcher 配置 ~/.config/niriswitcher/config.toml
Waybar 配置 ~/.config/waybar/
Matugen 配置 ~/.config/matugen/
Waypaper 配置 ~/.config/waypaper/config.ini