Gprinter (佳博) 热敏纸打印机 Mac / Linux CUPS 驱动

二 27 三月 2018
由 Difan Zhang 创作

身在操蛋的美国,总是有一些操蛋的需求 —— 比方说寄快递要自己打 label. 当然,我也可以选择屁颠屁颠的跑去 FedEx store 在柜台上告诉 amigo 我要寄给谁什么东西,或者我也可以直接拿 letter 纸打印了糊到箱子/快递信封上,但是这不是逼格不够高么。

于是我买了一部 Gprinter 佳博牌热敏纸打印机,淘宝买的。自带了 NiceLabel 软件以及 Windows printer driver. 但是,这机器两个毛病 —— 第一,它没以太网口,第二,它也没 CUPS 驱动程序。 NiceLabel 软件倒是不错,打个地址标签什么的逼格很高。

为了解决问题一,基于能从中国买破烂绝对不从美国买正常产品的思路,我买了一些二手 TP-Link TL-WR802N (AR9331) 路由器,插上打印机,自己编译个 openwrt 跑个 p910nd 就搞定了。至于问题二,就没那么容易了。

USB 的通讯协议可以用 WireShark 抓包。于是我就真的抓包了。看了下包内容,是自定义的二进制而不是标准的 PostScript —— 当然,让这种东西支持 PostScript 属于脑子不好使的表现之一。不过凑近处一看,其实是个事实标准协议。当年国产厂商们为了兼容爱普生(!)打印机,使用的都是 ESC 协议。半路又跳出来了个台湾厂 TSC 卖的热敏打印机不错,于是厂商们也纷纷支持了 TSC 协议。

这些协议倒是挺有意思的 —— 用户甚至可以写 BASIC 程序执行在打印机里,以便节约有限的(当然现在已经基本无所谓)带宽以及可能很受限制的上位机 CPU 资源。不过这属于我们的讨论话题之外了。

想让 UNIX 用好打印机,自然是用 CUPS 了。CUPS 有一个好,那就是可以把控制和实际的 device specific control 给分开,控制 ppd 文件也很(bu)容易写对。看了下手册, ESC 协议基本上就是把图像二值化以后传给打印机就可以了。从网上一搜,居然还真有其他厂商写的二进制驱动。基于不信任二进制以及安全的考虑,请读者自行搜索 "TSC Mac|Linux driver" 获取二进制。TSC 网站有驱动可以下,自己花点功夫可以解开 copy 到 /usr/libexec/cups/filter/rastertobarcodetspl 中。或者,你也可以通过修改 rastertoepson.c 的方式实现 rastertogprinter

PPD 文件可以在这里下载到: https://tifan.la/ZM8odX/JAB91NbEFF 请注意,如果你的打印机不是 GP-1324D,那么需要进行一些计算。需要支持不同格式的纸,也需要进行计算。

计算的方法:打印机分辨率 203 DPI (可以从参数中找到),打印点尺寸 0.125mm*0.125mm。 PostScript 中 1 point = 1/72 inch. 打印面积为最大 104mm * 2286mm. 经过计算,得到 PostScript 中的宽度为 10.4/2.54*72=294.80 高度为 64800.0.

纸张大小: FedEx 可免费获取的 thermal label 为 4in x 5in. 因此,大小为 4*72 x 5*72 = 288 360. 若你需要加入其他的纸张大小,请修改 PPD 文件砍掉打印机重新安装 ...

DPI 的设置在 *OpenGroup:Quality/Quality 小节中。

添加打印机时,只需要选择 Software - Other 即可选中 PPD 文件。这个驱动应该可以适用于绝大部分型号的热敏纸打印机。

评论