按咱们实际跑的过程写了。核心卖点是几个反直觉的坑(mako D-Bus 复活、通知名真实持有者、官方模板有毒
)——这些是别的地方查不到的。
```text
【Debian 13 + niri】把桌面壳从 DankMaterialShell 换成 Noctalia,
全程不登出、不重启、一个窗口都不丢。
这期不是"装个软件"的流水账,而是把切换过程中实测出来的几个反直觉结论讲清楚。
尤其是第 3 个坑,我一开始判断错了,是跑的时候才发现的。
▌环境
Debian 13 trixie / niri 26.04 / Wayland
Intel Iris Xe / 双屏(eDP-1 内屏 + DP-4 外接)
▌章节
00:00 先说结论:这俩根本不是同一代东西
01:20 安装:官方 Debian 源,0 冲突 0 卸载
03:10 坑 1:mako 杀不死,因为它是 D-Bus 激活的
05:40 坑 2:通知名真正的主人不是 mako(我判断错了)
07:30 坑 3:官方 niri 模板有毒,直接 cp 会让 niri 拒绝加载
09:50 热重载不跑 spawn-at-startup(源码级结论)
11:30 启动,向导走一遍
13:00 验证:通知 / GPU / 双屏 / 中文 / 锁屏
15:20 电源菜单的 id 不是猜的,是探出来的
▌三个关键结论
1)Noctalia v5 已经不是 Quickshell 了
纯 C++ 直接跑 Wayland + OpenGL ES,二进制 7.7 MB,无 Qt 无 GTK 依赖。
网上说"两者都是 Quickshell 壳"的说法已经过时——v4 才是 Quickshell 实现,
官方已明确废弃。所以两者不共享运行时、不抢进程,切换成本比想象中低得多。
2)pkill mako 是无效的
mako 的 cgroup 显示它是被 dbus-daemon 按
/usr/share/dbus-1/services/fr.emersion.mako.service 拉起来的,
绕过 systemd,你 mask 掉 mako.service 也没用。
任何应用一发通知它就复活,然后抢走 org.freedesktop.Notifications,
Noctalia 的通知永远注册不上。
正解是用户级覆盖那个 service 文件:
mkdir -p ~/.local/share/dbus-1/services
printf '[D-BUS Service]\nName=org.freedesktop.Notifications\nExec=/bin/false\n' \
> ~/.local/share/dbus-1/services/fr.emersion.mako.service
3)官方模板不能直接用
/usr/share/noctalia/assets/templates/niri/niri.kdl 里全是
{{colors.primary.default.hex}} 这种 mustache 占位符,
直接 cp 过去 niri 会报 error loading config 直接拒绝加载。
先用静态色版本占位,跑起来再让 Noctalia 渲染真实调色板。
▌顺带两个源码/实测层面的修正
· 实际持有通知名的是 DMS 自己,不是 mako(mako 只是冗余备份)
· niri 的 spawn-at-startup 只在启动时执行一次,
热重载走 reload_config(),里面根本没有 spawn_at_startup
→ 换壳必须手动拉起,这点很多教程会漏
▌回滚
配置改前已备份,一条命令回来:
cp ~/.config/niri/config.kdl.bak-noctalia-日期 ~/.config/niri/config.kdl
niri msg action load-config-file
实测结果:通知接管 / Intel Iris Xe OpenGL ES 3.2 / 双屏各有 bar /
界面中文 / logind 锁屏监听正常。