363 字
2 分钟

配置Niri自动切换显示配置

前言#

寒假回家后由于家里有两台显示器,刷新率又不同

  • 学校使用 1 * 15.6英寸显示器/260Hz/2K
  • 在家使用 2 * 27英寸显示器/240Hz/2K

于是需要两个不同的显示配置,希望能自动切换

思路#

  1. 在 niri 启动项加入一个检查脚本 或 使用 systemd 配置脚本和niri一起启动
  2. 脚本中调用niri IPC检测显示器数量: niri msg outputs中有无多出的DP-3输出
  3. 如果有并且和当前的配置文件不一致,则重新链接

操作#

准备好需要切换的配置文件,我有两份

  • ~/.config/niri/config-home.kdl
  • ~/.config/niri/config-dorm.kdl

创建一个脚本并chmod +x niri-config.sh

~/.config/niri/bin/niri-config.sh
#!/usr/bin/env bash
TARGET="$HOME/.config/niri/config.kdl"
CONFIG="$HOME/.config/niri/config-home.kdl"
# 通过检测是否有DP-3输出判断环境
if niri msg outputs | grep -q "DP-3"; then
# home
CONFIG="$HOME/.config/niri/config-home.kdl"
else
# dorm
CONFIG="$HOME/.config/niri/config-dorm.kdl"
fi
# 只有在需要时才替换
if [ ! -L "$TARGET" ] || [ "$(readlink "$TARGET")" != "$CONFIG" ]; then
echo "配置文件已加载 $CONFIG"
ln -sf "$CONFIG" "$TARGET"
else
echo "目标文件与源文件相同,无需替换"
fi

自动配置(方式一)#

在config-home.kdl和config-dorm.kdl中添加启动项spawn-at-startup "~/.config/niri/bin/niri-config.sh"

自动配置(方式二)#

使用systemd配置脚本作为niri.service的一部分

~/.config/systemd/user/niri-config
# custom
[Unit]
Description=Automatically switch niri config
PartOf=graphical-session.target
After=graphical-session.target
ConditionPathExists=%h/.config/niri
[Service]
Type=oneshot
ExecStart=%h/.config/niri/bin/niri-config.sh
[Install]
WantedBy=niri.service

启用对应服务

Terminal window
systemctl --user enable --now niri-config.service
Tip

使用自动配置方式一: 第一次必须手动直接运行脚本 或 手动链接一次ln -sf config-home.kdl config.kdl

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

配置Niri自动切换显示配置
https://blog.cedon.cn/posts/system-ops/niri-auto-switch-monitor-config/
作者
Cedon
发布于
2026-03-13
许可协议
CC BY-NC-SA 4.0
最后更新于 2026-03-13,距今已过 40 天

部分内容可能已过时

Profile Image of the Author
Cedon
Hi, I'm Cedon.
公告
如果哪一天停止活动,可能就是走了
分类
标签
站点统计
文章
13
分类
6
标签
24
总字数
11,180
运行时长
0 天
最后活动
0 天前

目录