如何把 Xteink X3 变成一台打印机

How to Build a Printer

如何把 Xteink X3 变成一台打印机

我原本打算自制电子墨水屏,结果被 Xteink X3 的可编程特性吸引。为了摆脱繁琐的热点上传流程,我决定让它像真正的纸张一样支持打印。通过实现 Internet Printing Protocol 协议,我让 MacBook 能直接识别名为 penguin 的打印机。面对 400 KB RAM 无法容纳 8.4 MB 打印数据的困境,我巧妙利用屏幕显存作为中转,边接收边渲染,最终实现了从 Preview 直接打印漫画页到设备上的功能。现在,这台阅读器不仅能读,还能打印,输出托盘就是 SD 卡里的一个文件夹。

如果它看起来像纸,那它就应该表现得像纸一样。
  1. ValdikSS

    >penguin 会把结果缩小以适应屏幕。

    >我声明了 A5 和 Letter 纸张,媒体类型为 stationery,输出托盘名为 face-up。

    你可以在 `media-size-supported` 中定义屏幕的确切尺寸(而且应该这么做!)。这很可能是一个非标准的 IPP 名称,因此你应该在 `media-supported` 中将其定义为 `om_NNNmmxYYYmm` 或 `oe_NNNinxYYYin`。

    这样你就不需要缩放传入的数据了,PC 会直接将数据格式化为屏幕的确切尺寸。

    PWG Raster 和 Apple Raster 都支持 1 位/像素模式(而不是你使用的 8 位/像素),因此输入数据量可以减少到原来的八分之一。要实现这一点,请使用 `print-color-mode-{supported,default}=bi-level` 而不是 `monochrome`。同时调整 `urf-supported` 的 `W` 选项,这种情况下使用 `W1`。

    屏幕/抖动在 1 位模式下可能效果很差,参见 https://github.com/OpenPrinting/libcupsfilters/pull/160,我在其中添加了更多抖动选项(仅限 Linux,看来 Apple 已经放弃了他们的 CUPS)。

  2. tapia

    在 Linux 上,用 cups 创建这类东西非常简单。不久前,我为我的 Fujitsu Quaderno A4 [1] 写了一个 cups 后端。能够直接在任何支持打印的程序中打开任何文档,然后只需“打印”到我的设备上,这超级有用。

    [1] https://github.com/cristobaltapia/dpt-rp1-cups

  3. alternativeworl

    太酷了。我原本以为能学到关于墨水、打印头等等的内幕,结果却学到了“如何制造一张像打印机一样工作的纸”,这反而有趣多了。

  4. e12e

    不错。我一直在想,这些设备配合 DjVu 会不会比 pdf 和光栅格式更友好?

    https://djvu.sourceforge.net/

  5. ks2048

    干得漂亮,但我还是想知道如何制造一台真正的打印机。

同日更多故事

2026-09-08