Skip to content

alexazhou/go_simu_terminal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go Simu Terminal

go-simu-terminal 是一个功能强大的终端模拟器,能够以“无头”模式运行命令行程序,并将其输出实时渲染为高分辨率的 PNGSVG 图像。它非常适合用于自动化脚本演示、终端录制、远程终端监控或生成美观的命令行输出截图。

核心特性

  • 🚀 实时渲染:将终端内容渲染为矢量图 (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

快速开始

1. 服务模式 (Interactive Mode)

启动一个交互式终端(如 bashtop)并开启 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

2. 快照模式 (Snapshot Mode)

运行命令并直接保存结果到文件:

# 截取当前目录详细列表
./simu-terminal --snapshot list.png --scale 1.5 -- ls -alh

Terminal Snapshot Example

# 递归运行并限时截图
./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 显示版本信息 -

API 接口说明

POST /input

发送字符或特殊按键到终端。

  • 示例 Payload: {"text": "hello"}{"key": "enter"}
  • 支持的特殊按键: up, down, left, right, enter, tab, esc, ctrl+c 等。

GET /screenshot

获取当前屏幕的 SVG 或 PNG。

  • 参数: scale (缩放), format (png/svg), save (保存到服务器本地路径)。

GET /export

以文件下载的形式导出当前屏幕。

  • 参数: format (png/svg), filename (文件名), scale (缩放)。

依赖项目

感谢以下优秀开源项目的支持:

许可证

MIT License

About

a vartual terminal in go

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages