一次四小时的 Claude Code 会话为 HP 的 Laser 1008a 构建了一个 Mac 桥接器

Kuber Mehta 的修复将 CUPS 通过 Linux VM 和 HP 的 SPL3 codec 路由,然后直接通过 USB 写入打印作业。

By · Published

Primary source: Kuber Studio

Why it matters

Coding agents can now compress obscure, cross-layer hardware work into one sitting. The result still depends on human testing, root access and heavyweight runtime infrastructure.

Claude Code Teaching macOS to Natively Print to the HP Laser 1008a — cdn.kuber.studio/chat # Teaching macOS to natively print to the HP Laser 1008a _A printer HP never shipped a Mac driver for, made to "just work" from Cmd-P, in one…

Kuber Mehta (@kuberwastaken) 使用 Anthropic 的 Claude Code,在一台 Apple Silicon Mac 上让 HP Laser 1008a 打印,于 8 月 17 日的大约四小时会话中完成了首个可工作的版本。

生成的 MIT-licensed repository 将打印转变为 HP 的 Laser 1003、1006 和 1008 型号的普通 Cmd-P 工作流。底层实现则远不普通:一个 CUPS 队列、一个 root 守护进程、一个始终运行的 Linux 虚拟机、HP 专有的光栅编码器以及直接的 USB 写入。

Mehta 在一份 略作编辑的会话记录 中记录了这项工作。根据 他的简历,他在 BITS Pilani 和 Guru Gobind Singh Indraprastha University 学习计算机科学与人工智能,参与 Razorpay 的核心 AI 项目,并创立了生成式界面项目 PolyThink Labs。该打印机项目最初是作为在家人 Mac 上安装驱动的请求开始的,而非计划中的软件发布。

跨越打印堆栈的四小时

Mehta 表示,他使用的是 Anthropic 在 5 月 28 日发布、用于编码和长时间代理工作的 Claude Opus 4.8。Claude Code 最初沿着显而易见的路径推进:检测 USB 设备,检查可用的 CUPS 驱动并安装通用的 PCL 配置。

该配置停滞不前,因为 Laser 1008a 使用的是 Samsung Printer Language,或称 SPL,而不是 PCL 或 PostScript。该打印机基于 Samsung 硬件,要求主机生成设备专用的光栅流。

会话随后经历了若干失败的尝试。通用驱动让设备处于脱机状态。开源的 foo2zjs 编码器促使打印机打印出一页错误页,要求使用正确的驱动。Mehta 还测试了 SpliX 2.0.2(该版本最近为相关的 HP Laser 型号增加了支持),但其输出在他的 1008a 上产生了有条纹、重复的页面。

可行的路径重用了 HP Unified Linux Driver 中的 rastertospl 二进制文件。由于该二进制文件不能直接在 macOS 上运行,安装程序将其放入由 Colima 管理的 ARM64 Linux 容器中。macOS 的 CUPS 队列将应用程序输出转换为 CUPS 光栅数据并发送到本地套接字。一个 root LaunchDaemon 接收作业,将其通过 HP 的编解码器处理,并使用 libusb 将生成的 SPL3 流直接写入打印机。

这种拆分也绕过了 Mehta 遇到的两个 macOS 限制:CUPS 过滤器无法在其沙箱内调用容器,标准的 USB 后端将打印机视为永久脱机。将这两项操作移到 CUPS 沙箱之外的守护进程中后,得到了整洁的测试页。

HP 的 macOS 支持记录与其驱动页面不一致

HP 的文档使得兼容性问题更难判断。Laser 1008a specifications page 在可兼容的操作系统列表中包含了直到 Sonoma 的 macOS 版本。然而,HP 目前的 driver-download page 在其操作系统选择器中只提供了 Linux 和若干 Windows 版本,并没有 macOS 选项。

HP 的 2023 年产品数据表也提到 AirPrint,尽管其脚注将无线和移动打印限制在 1008w。1008a 仅具备 USB 连接。Mehta 的测试在该 USB 连接上未发现无驱动的 IPP 端点,导致他机器上的 macOS 26 没有可用的内置路径。

据 Mehta 所述,该仓库到目前为止已在运行 macOS 26 的 Apple Silicon Mac 上进行了测试。它支持仅 USB 的 “a” 型号以及通过 USB 连接的 “w” 型号。更广泛的兼容性尚未确定。

本地打印,配以始终在线的 Linux 虚拟机

最终结果在应用程序看来像一个本地打印机。实现对“本地”一词的拉伸相当明显。

安装需要 Homebrew,并会添加 Colima、Docker 和 libusb,以及一个必须保持可用的小型 Linux 虚拟机。它还会安装一个 root LaunchDaemon 和一个登录项以在重启后重启 Colima。安装程序会请求 Mac 管理员密码并在设置期间下载 HP 的 Linux 驱动。

该仓库包含的是 Mehta 的粘合代码,而非 HP 的编解码器。安装程序会从 HP 获取专有的 rastertospl 二进制文件,而 Mehta 的组件以 MIT 许可证发布。

重启后首次打印可能需要等待最多一分钟以便虚拟机启动。根据 Mehta 的说法,在打印机已经断电后发送的作业会在约 10 到 15 秒内完成,因为打印机唤醒并加热其定影器。一旦系统运行,转换和 USB 传送大约需要一秒钟。

这些依赖关系使得该项目成为已有相应硬件的拥有者的实用修复方案,而不是轻量级的通用打印包。一个更干净的版本将需要识别 HP 的 SPL3 输出与 SpliX 生成的畸形输出之间的字节级差异。Mehta 正在请求贡献者帮助修补该开源编码器,这可能会将 Linux 虚拟机从路径中移除。

该会话是衡量编程代理已变得多有效的有用标尺:那些跨越 shell 命令、操作系统服务、二进制编解码器、容器运行时和物理硬件的晦涩问题。Claude Code 在一次会话中遍历了这些层并生成了一个打包安装程序。Mehta 仍然提供了设备、解读了其物理输出并测试了每一次尝试的修复。最终发布的工件来自于代理操作 Mac 与站在打印机旁的开发者之间的那个循环。

Reader comments

Conversation for this story loads after sign-in.