Loading... # printervention:Web 技术让旧打印机复活 # 一、新闻概述 ## 1. 标题 printervention:Web 技术让旧打印机复活 ## 2. 发布时间 2026 年 4 月 ## 3. 来源 printervention.app 官方博客 # 二、核心内容 ## 1. 事件摘要 ### A. 主要内容 开发者 George MacKerron 发布了一项创新技术项目 printervention,通过 WebUSB 和浏览器虚拟机技术,让已被现代操作系统淘汰的老式照片打印机重新焕发生机。 ### B. 核心亮点 - 无需安装,通过浏览器即可使用旧打印机 - 完整模拟 Linux 打印环境,支持 CUPS 和 Gutenprint 驱动 - 实现双向通信,可获取打印机状态 - 支持 HEIC 格式照片自动转换 - 跨平台兼容,可在任何支持 WebUSB 的浏览器中运行 ## 2. 关键信息 ### A. 技术栈 - v86:x86 CPU 和整机模拟器 - WebUSB:浏览器 USB 设备访问 API - USB/IP:Linux USB 设备网络转发协议 - tcpip.js:JavaScript TCP/IP 协议栈实现 - CUPS:通用 Unix 打印系统 - Gutenprint:高质量打印机驱动 ### B. 应用场景 - Canon SELPHY 等老式照片打印机 - 其他 Gutenprint 支持的打印机型号 - 未来扩展支持扫描仪设备 ### C. 创新价值 - 环保:拯救数百万即将进入垃圾填埋场的旧打印机 - 低成本:无需购买昂贵的替换设备 - 便捷:无需安装驱动或专用软件 ## 3. 背景介绍 ### A. 问题起源 作者意外获得一台 Canon SELPHY 照片打印机,发现现代 macOS 和 Windows 已不再支持这些老设备。虽然 Linux 系统仍可通过 CUPS 和 Gutenprint 驱动使用,但非技术用户难以部署。 ### B. 最初的解决方案 作者使用 Manjaro Linux 机器配合 CUPS 和 Avahi,通过 AirPrint 共享打印机。但这需要额外的硬件和 Linux 技能,不适合普通用户。 ### C. 演进方向 探索纯软件解决方案,让任何人都能够通过浏览器使用旧打印机。 # 三、详细报道 ## 1. 主要内容 ### A. 技术演进 项目经历了三个主要版本的迭代: **第一代**:自定义 CUPS 后端 - 使用 shell script 接收打印数据 - 通过 v86 TTY 逐字节传输到浏览器 - 浏览器通过 WebUSB transferOut 发送数据 - 问题:TTY 对控制字符的处理导致打印数据损坏 **第二代**:9p 文件系统传输 - 使用 v86 的 9p 文件系统传输大块数据 - 效率更高,但存在同步问题 - 教训:在 JavaScript 读取前必须先 sync 文件 **第三代**:USB/IP 双向桥接 - Linux 端使用 USB/IP 协议 - JavaScript 端使用 tcpip.js 实现 TCP/IP 栈 - 实现完整的双向通信 ### B. 技术细节 **核心架构** printervention 的技术架构包含三个核心层次: ```mermaid graph TB subgraph 浏览器层 A[用户界面] B[WebUSB API] C[tcpip.js] D[HEIC 转换] E[PDF 生成] end subgraph 虚拟机层 F[v86 x86 模拟器] G[Alpine Linux] H[CUPS 打印系统] I[Gutenprint 驱动] J[USB/IP 协议] end subgraph 硬件层 K[USB 打印机] end A -->|上传文件| D D --> E E --> F B <-->|USB 数据| C C <-->|以太网帧| F F --> J J <-->|TCP/IP| C J <-->|虚拟 USB| H H --> I H -->|打印命令| J B <-->|USB 连接| K ```  **工作流程** ```mermaid sequenceDiagram participant U as 用户 participant B as 浏览器 participant V as v86 虚拟机 participant C as CUPS participant P as 打印机 U->>B: 上传照片 B->>B: HEIC 转 JPEG B->>B: 生成匹配尺寸 PDF B->>V: 上传文件到 VM V->>C: lp 打印命令 C->>C: Gutenprint 处理 C->>V: USB/IP 协议封装 V->>B: 以太网帧传输 B->>B: tcpip.js 解析 B->>P: WebUSB transferOut P->>B: 状态响应 B->>V: tcpip.js 封装 V->>C: USB/IP 解包 C->>U: 打印状态更新 ```  **关键技术点** 1. **v86 模拟器**:在浏览器中完整模拟 x86 计算机,将机器代码编译为 WebAssembly 模块运行 2. **WebUSB API**:允许网页直接连接 USB 设备,获取厂商和产品 ID 3. **USB/IP 协议**:将 USB 数据包封装在 TCP 中传输,消除对自定义 CUPS 后端的需求 4. **tcpip.js**:将 lwIP TCP/IP 栈编译为 WebAssembly,处理浏览器端的网络协议 5. **驱动匹配算法**:使用 trigram 搜索算法,将打印机型号匹配到最接近的 Gutenprint 驱动 ### C. 数据处理流程 **照片处理管道** ```mermaid graph LR A[HEIC 文件] --> B[libheif-js 解码] B --> C[提取 ICC 配置文件] C --> D[修正 EXIF 方向] D --> E[wasm-mozjpeg 编码] E --> F[嵌入 PDF 容器] F --> G[匹配纸张尺寸] G --> H[上传到虚拟机] ```  **内存优化** - 流式处理,避免一次性加载所有未压缩图像数据到内存 - 分块传输和打印 ## 2. 技术创新点 ### A. 双向通信实现 传统方案只能单向发送打印数据,无法获取打印机状态。通过 USB/IP 和 tcpip.js 实现双向通信后: - CUPS 能够实时了解打印过程 - 可检测纸张卡住、墨水耗尽等错误 - 用户能获得准确的打印状态反馈 ### B. 跨平台虚拟化 在浏览器中运行完整 Linux 环境,让 CUPS 误以为连接的是普通 USB 打印机,实现了: - 无需修改 CUPS 核心代码 - 兼容所有 Gutenprint 支持的打印机 - 统一的打印体验 ### C. 无感知用户体验 - 无需安装任何软件 - 自动识别打印机型号 - 自动安装匹配驱动 - 支持 HEIC 等现代图片格式 ## 3. 数据与事实 ### A. 技术限制 - 仅在支持 WebUSB 的浏览器中可用(主要是 Chrome) - 打印速度受限于 WebAssembly 性能 - 不适合打印超大文件 ### B. 兼容性 - 已测试:Canon SELPHY 系列照片打印机 - 理论支持:所有 Gutenprint 驱动覆盖的型号 - 计划添加:brlaser 和 splix 驱动包 ### C. 商业模式 - 消耗品 affiliate 链接 - 基础遥测数据(会话、打印机、打印任务) - 寻求打印机耗材厂商白标合作 # 四、影响分析 ## 1. 行业影响 ### A. 硬件生命周期延长 通过软件手段延长硬件使用寿命,挑战传统的"计划性报废"模式。 ### B. Web 技术边界拓展 展示了 Web 平台在系统级硬件控制方面的潜力,为类似项目提供参考。 ### C. 开源生态贡献 虽然代码尚未完全开源,但技术思路可为类似问题提供解决方案。 ## 2. 用户影响 ### A. 成本节约 - 无需购买新打印机 - 继续使用已有的耗材库存 - 降低维护成本 ### B. 便利性提升 - 跨设备打印支持 - 移动端友好 - 无需驱动安装 ### C. 使用门槛 - 仍需技术用户首次授权 USB 访问 - 依赖 Chrome 浏览器 ## 3. 技术趋势 ### A. Web 标准的增强 WebUSB、WebAssembly 等标准让 Web 应用具备原生应用能力。 ### B. 虚拟化普及化 浏览器端虚拟化降低了专业软件的使用门槛。 ### C. 环保意识提升 通过技术手段减少电子垃圾,符合可持续发展理念。 # 五、各方反应 ## 1. 技术社区 ### A. 创新认可 项目展示了 Web 技术的强大能力,获得技术社区关注。 ### B. 实用价值 解决了真实痛点,具有广泛的适用场景。 ## 2. 潜在用户 ### A. 摄影爱好者 可以继续使用老式照片打印机输出作品。 ### B. 家庭用户 方便打印手机照片,无需购买新设备。 ## 3. 未来展望 ### A. 扫描仪支持 作者已注册 yes-we-scan.app 域名,计划将类似技术应用于老式扫描仪。 ### B. 驱动扩展 计划添加更多打印机驱动支持,扩大兼容范围。 ### C. 开源可能性 作者表示愿意与打印机耗材厂商合作白标方案,目前暂不开源。 # 六、相关链接 ## 1. 官方资源 - printervention.app:项目主页 - printerface.app:备用域名 ## 2. 核心技术 - v86 x86 模拟器:github.com/copy/v86 - tcpip.js:github.com/chipmk/tcpip.js - Gutenprint 项目:sourceforge.net/projects/gimp-print/ ## 3. 相关标准 - WebUSB API:developer.mozilla.org/docs/Web/API/USB - USB/IP 协议:usbip.sourceforge.net/ *** ## 参考资料 1. [printervention: the backstory](https://printervention.app/details) 最后修改:2026 年 04 月 17 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏