681 字
3 分钟
Hello Arch + Niri
2025-12-25

这是一份我在 Arch Linux 上搭建 niri 桌面环境的完整记录。内容包含:系统与引导器、核心软件、常用快捷键、坑位与修复方案(例如飞书共享屏幕),并尽量做到“可复现”。


0. 环境概览#

  • 系统:Arch Linux(UEFI)
  • 桌面:niri(Wayland)
  • 登录管理器:SDDM(自定义主题)
  • 引导器:systemd-boot

1. 引导器:从 GRUB 迁移到 systemd-boot#

loader.conf#

# /boot/loader/loader.conf
default arch.conf
timeout 0
console-mode max

启动项#

# /boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /amd-ucode.img
initrd  /initramfs-linux.img
options root=UUID=ee47c9bd-01d0-425e-83f5-1627a27c7a78 rw quiet splash rd.systemd.show_status=false rd.udev.log_level=3

2. Shell 与终端#

  • Shell:zsh
  • Oh My Zsh + powerlevel10k
  • 即时提示设置为 quiet,避免 zsh 启动警告
# ~/.zshrc
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

终端:Ghostty#

# ~/.config/ghostty/config
font-family = Maple Mono NF CN
font-size = 14

3. niri 核心配置#

配置文件:

  • ~/.config/niri/config.kdl
  • ~/.config/niri/binds.kdl
  • ~/.config/niri/output.kdl

3.1 显示器#

只固定外接屏刷新率,其他保持自动:

# ~/.config/niri/output.kdl
output "HDMI-A-1" {
    mode "1920x1080@100.000"
}

3.2 桌面 Shell / Bar#

# ~/.config/niri/config.kdl
spawn-sh-at-startup "qs -c noctalia-shell"

Noctalia 性能优化(内存占用下降)#

我在 noctalia-shell 上关闭了动画与阴影后,内存占用明显下降,体验更稳定。

// ~/.config/noctalia/settings.json
"general": {
  "animationDisabled": true,
  "enableShadows": false
}

3.3 锁屏#

手动锁屏走 noctalia:

# ~/.config/niri/binds.kdl
Mod+Alt+L { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "lockScreen" "lock"; }

自动锁屏仍用 swayidle 触发:

# ~/.config/niri/scripts/swayidle.sh
exec swayidle -w \
  timeout 300  'qs -c noctalia-shell ipc call lockScreen lock' \
  timeout 600  'niri msg action power-off-monitors' \
  resume       'niri msg action power-on-monitors' \
  timeout 1200 'systemctl suspend'

4. 常用快捷键(节选)#

启动器与工具#

  • Super+T:Ghostty
  • Super+Z:noctalia launcher
  • Super+Alt+L:锁屏(noctalia)
  • Super+Alt+V:剪贴板

音量/亮度#

  • XF86Audio*:音量/静音/媒体
  • XF86MonBrightness*:亮度

截图(grim + slurp + satty)#

  • Print:全屏截图并编辑
  • Shift+Print / Sys_Req:区域截图并编辑
  • Ctrl+Print:窗口截图并编辑
  • Super+Shift+A:区域截图并编辑

5. 输入法与主题#

Fcitx5#

# ~/.config/fcitx5/conf/classicui.conf
Theme=Matugen
DarkTheme=Matugen
Vertical Candidate List=False

系统深色模式#

gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'

6. 浏览器与触控板#

Chrome 触控板前进/后退#

# ~/.config/chrome-flags.conf
--enable-features=TouchpadOverscrollHistoryNavigation

触控板滚动灵敏度#

# ~/.config/niri/config.kdl
scroll-factor horizontal=0.3 vertical=0.3

7. 飞书相关问题与解决#

7.1 Dock 出现灰色 + 问号双图标#

原因:Wayland 下飞书窗口 app_id 为空,dock 无法正确匹配。

解决:强制 Feishu 走 XWayland:

# ~/.config/feishu-flags.conf
--ozone-platform=x11

然后在 noctalia 的固定项里用一致的 app_id:

// ~/.config/noctalia/settings.json
"pinnedApps": [
  "...",
  "Feishu"
]

7.2 飞书屏幕共享(niri)#

GNOME portal 在 niri 下无法正确获取窗口列表,导致屏幕共享失败。

最终方案:

  • 默认 portal 走 gnome/gtk
  • 屏幕共享走 hyprland portal
# ~/.config/xdg-desktop-portal/portals.conf
[preferred]
default=gnome;gtk;
org.freedesktop.impl.portal.Access=gtk;
org.freedesktop.impl.portal.Notification=gtk;
org.freedesktop.impl.portal.Secret=gnome-keyring;
org.freedesktop.impl.portal.ScreenCast=hyprland;
org.freedesktop.impl.portal.RemoteDesktop=hyprland;

niri 启动时拉起 hyprland portal:

# ~/.config/niri/config.kdl
spawn-sh-at-startup "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=niri & /usr/lib/xdg-desktop-portal-hyprland"

结果:

  • 屏幕共享可用
  • 窗口级共享在 niri 下仍可能不可用(portal 限制)

8. 小结#

这套配置的目标是:

  • 保留 niri 的轻量与灵活
  • 让日常工具稳定可用(飞书/浏览器/输入法)
  • 关键操作有明确快捷键

如果将来要迁移或复现,只需要同步这些配置文件即可。

Hello Arch + Niri
https://bangwu.top/posts/arch-niri-setup/
作者
棒无
发布于
2025-12-25
许可协议
CC BY-NC-SA 4.0