ClawSkills logoClawSkills

Niri IPC

通过 IPC(`niri msg --json` / $NIRI_SOCKET)在 Linux 上控制 Niri Wayland 合成器。当需要查询 Niri 状态(输出/工作区/窗口/f

介绍

# Niri IPC

通过 `niri msg` CLI(推荐)或向 `$NIRI_SOCKET` 写入 JSON 请求来使用 Niri IPC。

本技能假设: - 您正在运行 Linux 且 Niri 正在运行。 - 已设置 `$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) 高级辅助工具(窗口匹配)

当您希望通过 **标题/app_id 子字符串** 而非 ID 来引用窗口时,请使用 `scripts/niri_ctl.py`:

```bash # List windows (optionally filtered) ./skills/niri-ipc/scripts/niri_ctl.py list-windows --query firefox

# Focus a window by substring match ./skills/niri-ipc/scripts/niri_ctl.py focus firefox

# Close a matched window (focus then close) ./skills/niri-ipc/scripts/niri_ctl.py close firefox

# Move a matched window to a workspace (by index or by name) ./skills/niri-ipc/scripts/niri_ctl.py move-to-workspace firefox 3 ./skills/niri-ipc/scripts/niri_ctl.py move-to-workspace firefox web

# Focus a workspace by index or name ./skills/niri-ipc/scripts/niri_ctl.py focus-workspace 2 ./skills/niri-ipc/scripts/niri_ctl.py focus-workspace web ```

### 2) 完整 IPC 访问(原始 Socket)

使用 `scripts/niri_socket.py` 直接与 `$NIRI_SOCKET` 通信(换行符分隔的 JSON):

```bash # Send a simple request (JSON string) ./skills/niri-ipc/scripts/niri_socket.py raw '"FocusedWindow"'

# Batch requests: one JSON request per line on stdin printf '%s\n' '"FocusedWindow"' '"Workspaces"' | ./skills/niri-ipc/scripts/niri_socket.py stdin

# Event stream (prints JSON events until interrupted) ./skills/niri-ipc/scripts/niri_socket.py event-stream ```

### 动作

透传 Niri 动作:

```bash # Focus workspace by index ./skills/niri-ipc/scripts/niri.py action focus-workspace 2

# Move focused window to workspace ./skills/niri-ipc/scripts/niri.py action move-window-to-workspace 3

# Focus a window by id ./skills/niri-ipc/scripts/niri.py action focus-window 123

# Close focused window ./skills/niri-ipc/scripts/niri.py action close-window

# Reload niri config ./skills/niri-ipc/scripts/niri.py action load-config-file

# Spawn (no shell) ./skills/niri-ipc/scripts/niri.py action spawn -- alacritty

# Spawn through 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 # Raw JSON event lines (runs until interrupted) ./skills/niri-ipc/scripts/niri.py event-stream

# Just a few lines for a quick test ./skills/niri-ipc/scripts/niri.py event-stream --lines 5 ```

## 故障排除

- 如果命令失败并提示“NIRI_SOCKET is not set”:请在您的 Niri 会话中运行,或导出 socket 路径。 - 如果您需要 socket 协议的详细信息,请阅读:`./skills/niri-ipc/references/ipc.md`。 - 如果您的目标是复杂自动化(按标题/app_id 选择正确的窗口等),请先查询 `windows`,然后按窗口 ID 执行操作。

更多产品