Niri IPC
Use Niri IPC through the niri msg CLI (preferred) or by writing JSON requests to $NIRI_SOCKET.
This skill assumes:
- - You are on Linux with Niri running.
- INLINECODE2 is set (usually true inside the Niri session).
Quick start (recommended)
Use the bundled helper script (wrapper around niri msg --json):
CODEBLOCK0
Deeper control
1) High-level helpers (window matching)
Use scripts/niri_ctl.py when you want to refer to windows by title/app_id substring instead of ids:
CODEBLOCK1
2) Full IPC access (raw socket)
Use scripts/niri_socket.py to talk to $NIRI_SOCKET directly (newline-delimited JSON):
CODEBLOCK2
Actions
Pass through Niri actions:
CODEBLOCK3
Output configuration
Use niri msg output ... via the wrapper:
CODEBLOCK4
Working directly with niri msg
If you don’t want the helper script, call Niri directly:
CODEBLOCK5
Tip: if niri msg parsing errors happen after upgrades, restart the compositor (new niri msg against old compositor is a common mismatch).
Event stream
For status bars/daemons: Niri can stream events.
CODEBLOCK6
Troubleshooting
- - If commands fail with “NIRISOCKET is not set”: run inside your Niri session, or export the socket path.
- If you need the socket protocol details, read:
./skills/niri-ipc/references/ipc.md. - If your goal is complex automation (pick the right window by title/appid, etc.), first query
windows, then act by window id.
Niri IPC
通过 niri msg CLI(推荐)或向 $NIRI_SOCKET 写入 JSON 请求来使用 Niri IPC。
本技能假设:
- - 你正在运行 Niri 的 Linux 系统上。
- 已设置 $NIRI_SOCKET(在 Niri 会话中通常为真)。
快速开始(推荐)
使用附带的辅助脚本(niri msg --json 的封装):
bash
./skills/niri-ipc/scripts/niri.py version
./skills/niri-ipc/scripts/niri.py outputs
./skills/niri-ipc/scripts/niri.py workspaces
./skills/niri-ipc/scripts/niri.py windows
./skills/niri-ipc/scripts/niri.py focused-window
深度控制
1) 高级辅助工具(窗口匹配)
当你想通过标题/应用ID子串而非ID来引用窗口时,使用 scripts/niri_ctl.py:
bash
列出窗口(可选过滤)
./skills/niri-ipc/scripts/niri_ctl.py list-windows --query firefox
通过子串匹配聚焦窗口
./skills/niri-ipc/scripts/niri_ctl.py focus firefox
关闭匹配的窗口(聚焦后关闭)
./skills/niri-ipc/scripts/niri_ctl.py close firefox
将匹配的窗口移动到工作区(按索引或名称)
./skills/niri-ipc/scripts/niri_ctl.py move-to-workspace firefox 3
./skills/niri-ipc/scripts/niri_ctl.py move-to-workspace firefox web
按索引或名称聚焦工作区
./skills/niri-ipc/scripts/niri_ctl.py focus-workspace 2
./skills/niri-ipc/scripts/niri_ctl.py focus-workspace web
2) 完整IPC访问(原始套接字)
使用 scripts/nirisocket.py 直接与 $NIRISOCKET 通信(换行分隔的JSON):
bash
发送简单请求(JSON字符串)
./skills/niri-ipc/scripts/niri_socket.py raw FocusedWindow
批量请求:每行一个JSON请求,通过标准输入
printf %s\n FocusedWindow Workspaces | ./skills/niri-ipc/scripts/niri_socket.py stdin
事件流(持续打印JSON事件直到中断)
./skills/niri-ipc/scripts/niri_socket.py event-stream
操作
传递Niri操作:
bash
按索引聚焦工作区
./skills/niri-ipc/scripts/niri.py action focus-workspace 2
将聚焦窗口移动到工作区
./skills/niri-ipc/scripts/niri.py action move-window-to-workspace 3
按ID聚焦窗口
./skills/niri-ipc/scripts/niri.py action focus-window 123
关闭聚焦窗口
./skills/niri-ipc/scripts/niri.py action close-window
重新加载niri配置
./skills/niri-ipc/scripts/niri.py action load-config-file
生成(无shell)
./skills/niri-ipc/scripts/niri.py action spawn -- alacritty
通过shell生成
./skills/niri-ipc/scripts/niri.py action spawn-sh -- notify-send hello
输出配置
通过封装使用 niri msg output ...:
bash
./skills/niri-ipc/scripts/niri.py output --help
直接使用 niri msg
如果你不想使用辅助脚本,直接调用Niri:
bash
niri msg --json windows
niri msg --json action focus-workspace 2
提示:如果升级后出现 niri msg 解析错误,请重启合成器(新版本 niri msg 与旧版本合成器不匹配是常见问题)。
事件流
用于状态栏/守护进程:Niri可以流式传输事件。
bash
原始JSON事件行(持续运行直到中断)
./skills/niri-ipc/scripts/niri.py event-stream
仅获取几行用于快速测试
./skills/niri-ipc/scripts/niri.py event-stream --lines 5
故障排除
- - 如果命令失败并显示“NIRI_SOCKET is not set”:请在Niri会话内运行,或导出套接字路径。
- 如果你需要套接字协议详情,请阅读:./skills/niri-ipc/references/ipc.md。
- 如果你的目标是复杂自动化(通过标题/应用ID选择正确的窗口等),请先查询 windows,然后通过窗口ID执行操作。