通过 Niri 的 IPC(`niri msg --json` / $NIRI_SOCKET)控制 Linux 上的 Wayland 合成器。用于从 OpenClaw 代理查询 Niri 状态(输出/工作区/窗口/焦点窗口)或执行操作(聚焦/移动/关闭窗口、切换工作区、执行命令、重新加载配置)。
Niri IPC. 通过 niri msg CLI(首选)使用 Niri IPC 或将 JSON 请求写到 $NIRI SCKET是一项面向实际任务的技能,主要用于此技能假设:. 您正在运行 Niri 的 Linux 上;$NIRI SCKET 已设定( 通常是真实的)。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
通过 niri msg CLI(推荐方式)或向 $NIRI_SOCKET 写入 JSON 请求来使用 Niri IPC。
本技能假设:
$NIRI_SOCKET 已设置(通常在 Niri 会话内部自动完成)。使用附带的辅助脚本(封装了 niri msg --json):
./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
当您希望依据窗口标题或 app_id 的子字符串(而非 ID)引用窗口时,请使用 scripts/niri_ctl.py:
# 列出窗口(可选地进行过滤) ./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
使用 scripts/niri_socket.py 直接与 $NIRI_SOCKET 通信(JSON 消息以换行符分隔):
# 发送一条简单请求(JSON 字符串) ./skills/niri-ipc/scripts/niri_socket.py raw '"FocusedWindow"' # 批量请求:标准输入中每行一条 JSON 请求 printf '%sn' '"FocusedWindow"' '"Workspaces"' | ./skills/niri-ipc/scripts/niri_socket.py stdin # 事件流(持续输出 JSON 事件,直到被中断) ./skills/niri-ipc/scripts/niri_socket.py event-stream
透传 Niri 支持的操作指令:
# 按索引聚焦工作区 ./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 ...:
./skills/niri-ipc/scripts/niri.py output --help
niri msg如不希望使用辅助脚本,可直接调用 Niri:
niri msg --json windows niri msg --json action focus-workspace 2
提示:若升级后 niri msg 出现解析错误,请重启合成器(新版本 niri msg 与旧版合成器不兼容是常见原因)。
适用于状态栏或守护进程:Niri 可以持续推送事件流。
# 原始 JSON 事件行(持续运行直至被中断) ./skills/niri-ipc/scripts/niri.py event-stream # 仅输出若干行用于快速测试 ./skills/niri-ipc/scripts/niri.py event-stream --lines 5
./skills/niri-ipc/references/ipc.md。windows 查询所有窗口信息,再基于返回的 window id 执行后续操作。相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 133.8万人学习
共49课时 | 82.4万人学习
最新文章