当前位置:首页>Linux>分享一种通过浏览器访问嵌入式linux终端的方法!

分享一种通过浏览器访问嵌入式linux终端的方法!

  • 2026-09-10 11:08:24
分享一种通过浏览器访问嵌入式linux终端的方法!
来源 | 嵌入式情报局

做嵌入式的小伙伴,大概都有这种经历:

想临时看一眼开发板上的终端, 要么翻出 PuTTY、Xshell, 要么找串口工具, 折腾半天,就为了看一条输出。

这里我们通过工具ttyd 来实现。

一、ttyd 是什么

ttyd是在web端一个简单的服务器命令行工具,类似我们在云厂商上直接ssh链接我们的服务器输入指令一样。

它的口号就一句话:Share your terminal over the web。 纯 C 写的单二进制程序,静态编译后基本无依赖, 起一条命令,浏览器里就能开终端。

它是怎么做到的?

关键在于 PTY 伪终端。

bash、vim、top 这些程序,都以为自己连着一块真实的屏幕。 ttyd 创建一对伪终端: 从设备(Slave)交给命令行程序, 主设备(Master)握在自己手里。

没有 PTY 会怎样? vim 直接报错 "Not a terminal", sudo 连密码都没法输。

进程模型也很简单: 一个主守护进程管 HTTP/WebSocket, 每个浏览器连上来,就 fork 一个子进程, 子进程再 fork 一次,孙进程去 exec bash, 把 stdin/stdout/stderr 全部重定向到 PTY 从设备。

数据走 WebSocket,libwebsockets 实现, 全双工、低延迟, 传的是原始字节流,ANSI 颜色序列原样保留。

前端渲染交给 xterm.js, 在浏览器里画出一个完整的终端。

(图1:ttyd 整体架构)

拿一次按键来说,你敲一个 ls:

  1. 浏览器捕获键盘,经 WebSocket 发出 ls + 回车
  2. ttyd 子进程收到,写入 PTY 主设备
  3. bash 从从设备读到命令,执行并输出(带颜色)
  4. ttyd 子进程读出输出,WebSocket 推回
  5. 浏览器解析 ANSI 序列,渲染出来

(图2:一次按键 ls 的旅程)

整条链路延迟很低, 用起来和本地终端差不多。

二、典型应用场景

这玩意能帮上忙的场景不少:

  • 现场调试:设备临时要看终端,浏览器一开就行,手机、平板、电视浏览器都能上
  • 演示教学:给一条网址,多人同时看甚至交互,比录屏、截图省事多了,远程排错、面试编程都用得上
  • 穿透防火墙:流量走 HTTP/HTTPS,伪装成普通网页请求,被封锁的 22 端口换个思路就通了
  • 嵌入后台:Web 运维面板里内嵌一个终端,管理员不用跳 SSH,鉴权直接融入系统登录体系
  • 临时入口:给外部合作者开一个受限终端,账号密码保护,用完即关,不留痕迹

三、板上资源够不够

嵌入式板子资源金贵, 跑不跑得动是大家最关心的。

先看结论:开销很小。

  • 存储:动态链接约 50~100 KB,静态编译约 300~800 KB,绝大多数板子的 Flash 毫无压力
  • 内存:空闲时 1~3 MB,每多一个连接加 2~6 MB,两三个人同时用也就 10~20 MB
  • CPU:空闲接近 0,刷屏跑 top 之类也就占 5%~15% 单核

给你一张快速对照表:

开发板
RAM
能不能跑
树莓派 Zero / 2/3/4
512 MB+
毫无压力
全志 H3/H5 系列
256 MB+
轻松
OpenWrt 路由器
128 MB
可用,注意连接数
低端 IoT 网关
64 MB
能用,建议用 ash 限连接
超轻量 MCU+Linux
32 MB
紧张,需裁剪系统

资源紧张的话, 换轻量 shell、加 -o 限制连接、 多人看用 tmux 共享, 都能把开销压下来。

四、快速上手

上手很快, 开发板上最省事的是直接下预编译二进制:

$ wget https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd.armhf$ chmod +x ttyd.armhf$ sudo mv ttyd.armhf /usr/local/bin/ttyd

armhf 是 32 位 ARM 的包, aarch64 板子换成 ttyd.aarch64; Debian/Ubuntu 也能直接 apt install ttyd。

起服务就一条命令:

$ ttyd -p 8080 bash

浏览器打开 http://开发板IP:8080 就行。

几个常用参数:

参数
作用
-p 8080
监听端口,默认 7681
-c admin:123456
用户名密码认证
-i 127.0.0.1
只绑定本机
-o
只接受一个连接,断开即退出
-R
只读模式,只能看不能输

重点提醒:ttyd 默认没有认证, 而且默认监听 0.0.0.0(所有接口)。 不加保护直接暴露到公网, 等于把 shell 送给了全世界。 上公网务必加 -c, 最好再挂 Nginx 反代做 TLS 和鉴权。

多个人想看同一个终端,可以这样:

$ ttyd tmux new-session -A -s demo

所有浏览器都 attach 进同一个 tmux 会话, 只有一份 shell,既同步又不费资源。

(图3:开发板部署示意)

一句话概括 ttyd:

用 PTY 给命令行一个"假终端", 用 WebSocket 在浏览器和这个假终端之间搭一座双向桥, 再用 xterm.js 在网页上把桥那头原样画出来。

它没有发明新协议, 只是把 Unix 古老的终端机制和现代 Web 通信粘在一起, 轻量、实用,开发板上也跑得动。

------------ END------------

成都见!免费领桃花岛主 20 小时 EMC 整改与设计经典教程

长鑫LPDDR6要来了 ,研发验证进入尾声!

给小学生解释Linux内核中的常用锁!

最新文章

随机文章