go-simu-terminal 是一个功能强大的终端模拟器,能够以“无头”模式运行命令行程序,并将其输出实时渲染为高分辨率的 PNG 或 SVG 图像。它非常适合用于自动化脚本演示、终端录制、远程终端监控或生成美观的命令行输出截图。
- 🚀 实时渲染:将终端内容渲染为矢量图 (SVG) 或位图 (PNG)。
- 🌐 HTTP 控制:内置 Web 服务,支持通过 API 发送输入(按键/文本)并获取截图。
- 📸 快照模式:运行指定命令,在命令执行完成后自动捕获并保存终端屏幕。
- 🔠 多语言支持:内置 Menlo (ASCII) 和 文泉驿微米黑 (CJK) 字体,完美支持中文显示。
- 🎨 高度可配置:支持自定义行列数、缩放倍率 (DPI) 以及外部字体文件。
- 🛠️ 跨平台:基于 Go 编写,支持 Linux 和 macOS(由于 PTY 依赖,暂不支持原生 Windows)。
确保你已经安装了 Go 环境 (1.16+),然后克隆并编译:
git clone https://github.com/your-repo/go-simu-terminal.git
cd go-simu-terminal
go build -o simu-terminal启动一个交互式终端(如 bash 或 top)并开启 HTTP 服务:
./simu-terminal --port 8888 --rows 30 --cols 100 --timeout 60 -- bash以上命令将启动服务,并在 60 秒后自动退出。
服务启动后,你可以通过以下接口进行交互:
- 获取截图:
http://localhost:8888/screenshot?format=png&scale=2.0 - 发送输入:
curl -X POST -d '{"text": "ls -la\n"}' http://localhost:8888/input
运行命令并直接保存结果到文件:
# 截取当前目录详细列表
./simu-terminal --snapshot list.png --scale 1.5 -- ls -alh# 递归运行并限时截图
./simu-terminal --snapshot output.png --scale 2.0 --timeout 5.5 -- ls -R /etc如果命令在 5.5 秒内未完成,程序将强制截取并保存当前屏幕。
| 参数 | 说明 | 默认值 |
|---|---|---|
--port |
HTTP 服务监听端口 | 8888 |
--cols |
终端宽度(列数) | 140 |
--rows |
终端高度(行数) | 36 |
--snapshot |
保存快照的文件名 (e.g. out.png, out.svg) |
(空) |
--timeout |
指定延时几秒自动退出(支持浮点数,0 表示不启用) | 0 |
--scale |
渲染缩放比例(用于高清导出) | 1.0 |
--font-ascii |
自定义 ASCII 字体路径 (.ttf) | (内置 Menlo) |
--font-cjk |
自定义中文字体路径 (.ttf/.ttc) | (内置文泉驿) |
--version |
显示版本信息 | - |
发送字符或特殊按键到终端。
- 示例 Payload:
{"text": "hello"}或{"key": "enter"} - 支持的特殊按键:
up,down,left,right,enter,tab,esc,ctrl+c等。
获取当前屏幕的 SVG 或 PNG。
- 参数:
scale(缩放),format(png/svg),save(保存到服务器本地路径)。
以文件下载的形式导出当前屏幕。
- 参数:
format(png/svg),filename(文件名),scale(缩放)。
感谢以下优秀开源项目的支持:
- go-headless-term: 核心终端状态管理。
- pty: Go 的 PTY 实现。
- gg: 2D 图形渲染。
