wterm本地Shell教程浏览器里的完整本地终端node-pty多会话实战【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wtermwterm 是一款面向 Web 的终端模拟器terminal emulator for the web核心用 Zig 编写并编译为约 26 KB 的 WASM直接渲染到 DOM原生支持文本选择、复制粘贴、浏览器查找和 24 位色。本文基于 wterm 仓库中的 Local Shell 示例手把手教你用 node-pty WebSocket 在浏览器里跑起一台真实的本地 Shell并管理多个互不干扰的终端会话。一、为什么需要浏览器里的本地终端传统浏览器终端方案通常依赖 Canvas 渲染而 wterm 选择 DOM 渲染带来两个直接好处原生文本能力选择、复制、CtrlF 查找、屏幕阅读器直接作用于已挂载的行元素即插即用的框架组件React、Vue、Svelte 组件开箱即用见 packages/wterm/react、packages/wterm/vue、packages/wterm/svelte。wterm 的完整特性清单24 位色、Kitty 图片、Kitty 键盘协议、宽字符对齐等可以查阅 README.md。二、Local Shell 示例架构一句话讲清本项目的examples/local是一个 Next.js 应用旁边跑着一个自定义服务器用WebSocket 把浏览器和 node-pty 桥接起来浏览器里的每个终端标签页向/api/terminal发起 WebSocket 连接服务器为每个连接用 node-pty 生成一个 PTY 进程加载你的默认登录 Shell你在浏览器敲下的每个键经 WebSocket 发给服务器写入 PTYPTY 输出再经 WebSocket 回传由 wterm 渲染到页面。核心源码就两个文件非常值得精读服务端桥接examples/local/server.ts前端多会话工作区examples/local/app/session-workspace.tsx三、三步启动一键运行本地 Shell 前置要求Zig 0.16、Node.js 24、pnpm 11详见 README.md 的 Development 章节。git clone https://gitcode.com/gh_mirrors/wterm1/wterm cd wterm pnpm install zig build pnpm --filter local dev启动后浏览器打开local-example.wterm.localhost开发服务器通过 portless 分配地址若提示缺失可执行npm i -g portless即可看到一个左侧为会话列表、右侧为终端的完整本地 Shell 界面。⚠️ 注意Linux 上 node-pty 需要 C/Python 编译工具链见 README.md。四、多会话实战创建、切换、关闭三个按钮全搞定打开页面后体验 wterm 的多会话能力只需三个动作操作位置效果➕ 新建侧边栏右上角加号新增一个独立 PTY 独立终端自动获得焦点切换点击侧边栏任意会话项终端画面切换其他会话保持存活正在跑的任务不中断✖ 关闭悬停会话项右侧销毁该会话的 WebSocket 与 PTY 进程侧边栏每个会话项还会实时显示当前工作目录家目录缩写为~服务端每 500ms 轮询一次 PTY 进程的 cwdLinux 读/proc/pid/cwdmacOS 用 lsof你在终端里cd之后侧边栏标签会同步更新——实现见 examples/local/server.ts。切换会话时旧终端只是被visibility: hiddeninert遮住而非销毁examples/local/app/session-workspace.tsx所以你在 Terminal 1 里挂着htop切去 Terminal 2 干完活再切回来画面分毫未动。五、node-pty 桥接细节终端尺寸如何同步一个常见痛点浏览器窗口缩放后PTY 的列/行数必须跟着变否则vim、ls输出会错位。wterm 示例的做法很优雅前端通过onResize回调拿到核心实际应用的网格尺寸再拼一条自定义转义序列\x1b[RESIZE:cols;rows;像素宽;像素高]发给服务器examples/local/app/session-workspace.tsx服务器解析该序列后调用ptyProcess.resize(cols, rows)同时把像素尺寸写入 PTYmacOS/Linux 下通过 ioctl这样连按像素探测终端的工具也能正确工作examples/local/server.ts。由于 wterm 的autoResize基于 ResizeObserver窗口变化会即时触发onResize整条链路无需手动干预。六、进阶玩法 图形能力更强的 Ghostty 核心访问/ghostty路由终端切换为带图形能力的wterm/ghosttylibghostty 后端Kitty 图片协议可渲染 PNG/RGB 图像示例中限制在 640×480 CSS 像素内入口见 examples/local/app/ghostty/page.tsx。调试模式URL 加?debug参数可在 WTerm 实例上打开DebugAdapter检查转义序列、单元格数据与渲染性能examples/local/app/session-workspace.tsx。换主题给Terminal传themesolarized-dark/monokai/light即可文档见 packages/wterm/react/README.md。七、常见问题速查Q为什么打不开页面所有开发服务器使用 portless请留意终端里打印的实际.localhost地址而非写死的端口。QLinux 下 node-pty 安装失败需要 C 与 Python 工具链用于编译原生模块先装好再pnpm install。Q会话关闭后进程会泄漏吗不会。WebSocket 断开时服务器会立即ptyProcess.kill()并清理 cwd 轮询定时器examples/local/server.ts。八、小结wterm 的 Local Shell 示例用不到 500 行代码演示了一套完整的浏览器本地终端方案node-pty 负责真实 ShellWebSocket 负责双向传输wterm 负责高性能 DOM 渲染React 负责多会话状态管理。照着本文的三步启动命令跑起来你就能在浏览器标签页里拥有任意多个互不干扰的本地 Shell——这正是把开发环境搬进 Web 的第一步。【免费下载链接】wtermA terminal emulator for the web项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
紫光FPGA报错急救指南:IO约束、时钟定义与Modelsim仿真避坑 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:39:56
基于DeepSeek的保险续保预测:Transformer时序模型与特征工程实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:21:51
基于STM32的鸽子驯养系统:从硬件设计到软件实现的完整方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:21:45
深圳网页设计机构避坑指南:拒绝拖延,3招选对团队 深圳网页设计机构避坑指南:拒绝拖延,3招选对团队 改个需求建站公司拖一周,这种痛谁懂?我见过太多老板,合同签得漂亮,验收时才发现页面卡顿、后台难用,稍微提点修改意见,对方就装死。在深圳做企业官网或商城,找错深圳网页设计机构,轻则浪费预算,重… · 2026/9/27 6:21:45
宇树G1开发环境搭建:SSH远程连接与VSCode配置实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:21:39
springboot web jackson 简述
springboot web 自定义Jackson ObjectMapper
BeanSerializerModifier
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson… · 2026/9/27 6:21:39
别再找百度免费网站建设了,一文搞懂真实成本与避坑指南 别再找百度免费网站建设了,一文搞懂真实成本与避坑指南 很多老板一开口就是:“百度不是有免费建站吗?为什么还要花几万块找你们做?” 这句话我听了十年,耳朵都起茧子了。实话告诉你,那种“免费”的模板网站,上线三天你就想砸了电脑。… · 2026/9/27 6:21:39
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01