开发文档 ifu 团队 2026-08-11 · 15 分钟

ifu Agent API 完整参考手册

12 个命令逐个详解:请求参数、JSON 示例、返回值与错误约定

ifu Agent API 完整参考手册

本文是 ifu Agent 的 API 完整参考手册,面向需要二次开发的开发者(控制端、自动化脚本、集成方)。如果你只需要快速了解协议能力,可以先读《ifu Agent 通信协议与 API 详解》。

1. 接口总览

ifu Agent 同时开放三个端口,职责清晰:

协议 端口 用途
HTTP 42000 REST API + Web 控制台
TCP 42001 可靠指令通道(需要确认送达的场景)
UDP 42002 设备发现 + 简单命令

2. 通用请求格式

所有命令均为 JSON 对象,核心字段:

字段 类型 必选 说明
cmd string 命令名(见第 4 节命令详解)
mac string 目标机器 MAC 地址;"all" 表示广播(本机验证通过才执行)
value int 按命令 数值参数(音量 0-100、静音开关 0/1)
text string 按命令 文本参数(键盘输入、剪贴板内容)
key string 按命令 按键名称(见 4.5 按键名称表)
mods []string 按命令 修饰键列表:ctrl / shift / alt / win
x / y int 按命令 鼠标屏幕坐标
button string 按命令 鼠标按键:left / right / middle(默认 left
scroll int 按命令 滚轮格数(正=上滚,负=下滚)

MAC 地址支持 4 种格式(统一为小写): aa:bb:cc:dd:ee:ffaa-bb-cc-dd-ee-ffaabbccddeeffall

传输细节

协议 传输格式 上限
HTTP POST /Content-Type: application/json 请求体 4KB
TCP 每行一条 JSON,以换行符 \n 结尾 单行 4KB
UDP 单包一条 JSON 2048 字节

3. 通用响应格式

{
  "status": "success | error | skipped",
  "message": "人类可读信息",
  "data": {}
}
状态 含义
success 命令执行成功
error 执行失败,message 含失败原因(含功能不可用原因)
skipped MAC 地址不匹配,命令未执行

data 为可选字段,仅在查询类命令(volume_getclipboard_read)中返回。

4. 命令详解(12 个命令)

音量 / 屏幕 / 键盘 / 鼠标 / 剪贴板命令需在前台模式下使用;服务模式(Session 0)下返回 error 并附缺失原因。可用 GET /capabilities 查询。

4.1 电源控制

命令 参数 响应 data 说明
poweroff mac - 立即关机
reboot mac - 立即重启
{ "cmd": "poweroff", "mac": "aa:bb:cc:dd:ee:ff" }
{ "status": "success", "message": "Executing reboot command" }

4.2 系统音量(前台模式可用)

命令 参数 响应 data 说明
volume_get - {"volume": 50, "muted": false} 查询当前音量(0-100)与静音状态
volume_set value (0-100) - 设置音量,越界返回错误
volume_mute value (1=静音, 0=取消) - 切换静音状态
{ "cmd": "volume_set", "mac": "all", "value": 30 }
{ "status": "success", "message": "获取音量成功", "data": { "volume": 50, "muted": false } }

4.3 屏幕开关(前台模式可用;Linux 仅 X11)

命令 参数 响应 data 说明
screen_off - - 关闭显示器(DPMS 待机)
screen_on - - 打开显示器
{ "cmd": "screen_off", "mac": "all" }

4.4 键盘模拟(前台模式可用)

命令 参数 响应 data 说明
key_tap key, mods - 模拟按键(支持组合键)
key_type text - 输入文本(支持 Unicode)
{ "cmd": "key_tap", "mac": "all", "key": "c", "mods": ["ctrl"] }

组合键示例:{"key":"tab","mods":["ctrl","shift"]} 等价于 Ctrl+Shift+Tab。

4.5 key_tap 支持的按键名称

字母 a-z、数字 0-9、功能键 f1-f12,以及:

名称 按键 名称 按键
enter / return 回车 space 空格
tab Tab esc / escape 退出
backspace 退格 delete / del 删除
insert 插入 home / end Home / End
pageup / pagedown 翻页 up / down / left / right 方向键
capslock 大写锁定 printscreen 截屏键
scrolllock / pause 锁定 / 暂停 minus / equals - / =
comma / period / dot , . slash / backslash / \
semicolon / quote ; ' bracketleft / bracketright [ ]

4.6 鼠标控制(前台模式可用)

命令 参数 响应 data 说明
mouse_move x, y - 移动鼠标到屏幕坐标
mouse_click button - 单击(left / right / middle)
mouse_scroll scroll - 滚动滚轮(格数)
{ "cmd": "mouse_click", "mac": "all", "button": "right" }

4.7 剪贴板(前台模式可用;Linux 需 xclip/xsel/wl-copy)

命令 参数 响应 data 说明
clipboard_write text - 写入剪贴板(Unicode)
clipboard_read - {"text": "剪贴板内容"} 读取剪贴板文本
{ "cmd": "clipboard_write", "mac": "all", "text": "要复制的内容" }
{ "status": "success", "message": "读取剪贴板成功", "data": { "text": "剪贴板内容" } }

5. UDP 设备发现协议

设备发现基于 UDP 广播,允许控制端在不知道 IP 的情况下发现局域网内的设备。

发现流程:

  1. 控制端向 255.255.255.255:42002 发送广播包。
  2. 客户端收到广播包后校验 server 字段。
  3. 客户端向控制端的发送源 IP 和端口回复单播响应包。

请求包(ping):

{
  "type": "discovery",
  "action": "ping",
  "server": "ifu-agent-server",
  "timestamp": 1734267000
}

server 字段必须匹配 ifu-agent-server,否则请求被忽略。

响应包(pong):

{
  "type": "discovery",
  "action": "pong",
  "mac": "00:11:22:33:44:55",
  "response_time": 1734267001,
  "timestamp": 1734267001
}

时间戳同步规则:时间戳非零时,接收方会将本机时钟同步为发送方时间(差异超过 30 秒时执行)。

6. TCP 控制协议

  • 端口 42001,长连接或短连接均可(建议发送完命令接收响应后断开)。
  • 每行一条 JSON 命令,以 \n 结尾,单行上限 4KB。

交互流程: 建立连接 → 发送 JSON 命令 → 接收 JSON 响应 → 断开。

{"cmd":"volume_set","mac":"all","value":30}
{"status":"success","message":"Executing reboot command"}

7. HTTP 特殊端点

端点 方法 说明
/health GET 健康检查,返回 {"status":"success","time":"2024/05/20 10:00:00"}
/control GET Web 控制面板(HTML 页面)
/capabilities GET 功能能力清单(可用性与缺失原因)

/capabilities 返回 6 个功能项(固定顺序):powervolumescreenkeyboardmouseclipboardavailable=falsereason 说明缺失原因(Session 0、缺依赖、权限不足等)。

{
  "features": [
    { "name": "power", "available": true },
    { "name": "volume", "available": false, "reason": "服务模式(Session 0)无交互音频会话,音量控制需在前台模式下使用" },
    { "name": "screen", "available": true },
    { "name": "keyboard", "available": true },
    { "name": "mouse", "available": true },
    { "name": "clipboard", "available": true }
  ]
}

8. 错误码与响应约定

HTTP 接口返回标准状态码:200 成功、400 JSON 格式错误、405 方法错误、413 请求体过大、500 服务器内部错误。

场景 响应
JSON 解析失败 HTTP 400 {"status":"error","message":"Invalid JSON format"}
请求体超限(>4KB) HTTP 413 {"status":"error","message":"请求体过大"}
HTTP 方法不允许 HTTP 405
命令未知 {"status":"error","message":"Unknown command"}
MAC 不匹配 {"status":"skipped","message":"Command skipped - MAC address mismatch"}
功能不可用 {"status":"error","message":"<功能>功能不可用: <缺失原因>"}
参数非法 {"status":"error","message":"不支持的按键: ..."} / "音量必须在 0-100 之间"

功能不可用示例:{"status":"error","message":"键盘模拟功能不可用: /dev/uinput 无写权限"}

9. curl 快速上手

# 关机
curl -X POST http://localhost:42000/ -H "Content-Type: application/json" \
  -d '{"cmd":"poweroff","mac":"all"}'

# 设置音量 30
curl -X POST http://localhost:42000/ -H "Content-Type: application/json" \
  -d '{"cmd":"volume_set","mac":"all","value":30}'

# 组合键 Ctrl+Shift+Tab
curl -X POST http://localhost:42000/ -H "Content-Type: application/json" \
  -d '{"cmd":"key_tap","mac":"all","key":"tab","mods":["ctrl","shift"]}'

# 写入剪贴板
curl -X POST http://localhost:42000/ -H "Content-Type: application/json" \
  -d '{"cmd":"clipboard_write","mac":"all","text":"内容"}'

# 查询功能能力
curl http://localhost:42000/capabilities

继续阅读

关联工具

想看更多?订阅我们的 RSS

第一时间获取 ifu 团队的文章与工具更新