标签设备

SATO CUPS Driver for Linux 使用详解

Admin2026年9月5日

SATO CUPS Driver 基于 Linux 标准 CUPS 打印系统,核心过滤器为 rastertosbpl:把 CUPS 光栅位图转换成 SATO 原生 SBPL 指令下发给打印机,支持 USB、网口 9100、串口,支持 CL4NX‑Plus / CL4NX / CT4‑LX / S84‑ex 等主流机型。

一、工作原理

  1. 普通文档 / 标签图像打印(CUPS 光栅模式) 应用输出 PDF/PS → CUPS 滤镜链转为光栅位图 → rastertosbpl 将位图翻译为 SBPL 位图打印指令 → CUPS backend(socket/usb/serial)下发打印机 → 打印标签 / 文档。

该模式下:打印内容为图片点阵,不使用打印机内置矢量字体,条码是渲染后的位图。驱动里的标签尺寸、浓度、速度参数由 PPD 控制。

  1. 原生 SBPL 脚本直打(Raw 原始模式) 业务程序直接输出 SBPL 指令文本,跳过rastertosbpl转换,原样字节流发给打印机;可以调用打印机矢量字体、条码指令,性能更高,工业项目常用。

Linux CUPS 打印 SATO 打印机共 2 种路径:光栅驱动模式、raw 直通模式。

二、安装步骤

1. 前置依赖

# Debian/Ubuntu
sudo apt update
sudo apt install cups cups‑bsd libcups2‑dev
sudo systemctl enable --now cups
# 确认cups运行
systemctl status cups

浏览器访问 http://127.0.0.1:631 CUPS 管理 Web 界面,开启管理员权限。

2. 安装 SATO 驱动包

从 SATO 官网下载对应架构包:.deb(Debian/Ubuntu) / .rpm(RHEL/Fedora) / .tar.gz 通用包

# deb包安装
sudo dpkg -i satocupsdriver_xxx_amd64.deb
# rpm包
sudo rpm -ivh satocupsdriver‑xxx.x86_64.rpm

# tar.gz通用包
tar xvf Software_SATOLabelCupsDrv_Linux_xxx.tgz
cd 解压目录
sudo ./satodriver.install

安装完成校验:

  • filter:/usr/lib/cups/filter/rastertosbpl 存在,权限 755
  • PPD 文件目录:/usr/share/cups/model/SATO/

3. CUPS 添加打印机(Web 界面 http://localhost:631)

  1. Administration → Add Printer
  2. 选择设备 URI:
    • 网口打印机:socket://192.168.1.100:9100
    • USB:usb://SATO/CL4NX‑Plus
    • 串口:serial:/dev/ttyUSB0?baud=9600
  3. 厂商选择 SATO,对应机型 PPD(如 SATO CL4NX‑Plus 305dpi)
  4. 设置队列名称,启用打印机,设置默认标签介质尺寸。

命令行 lpadmin 添加示例:

sudo lpadmin -p SATO‑CL4NX‑Plus -E -v socket://192.168.1.50:9100 -m /usr/share/cups/model/SATO/sato‑cl4nx‑plus‑305.ppd

查看队列:lpstat -p

三、两种打印模式实操

模式 A:光栅模式(CUPS 驱动,打印 PDF、图片、普通文档)

适合:PDF 标签、图片标签、通用文档,任何程序 Ctrl+P 直接打印。

# 打印pdf标签
lp -d SATO‑CL4NX‑Plus label_100x60.pdf
# 指定介质尺寸(PPD预定义标签规格)、打印浓度
lp -d SATO‑CL4NX‑Plus -o media=w100h60 -o Darkness=12 label.pdf
# lpr方式
lpr -P SATO‑CL4NX‑Plus label.png

⚠️光栅模式所有内容转为位图;如果需要高质量矢量条码,优先使用 SBPL raw 模式。

模式 B:Raw 直通模式,下发原生 SBPL 脚本(工业项目推荐)

-o raw /-l 参数:CUPS 不经过任何滤镜,直接透传字节流,此时rastertosbpl不会执行,PPD 参数全部失效,SBPL 脚本完全自己控制。

示例 test.sbpl

<A>
<LH0050,0030>
<BC2,100,E,08>1234567890</BC>
<X>

命令发送 SBPL 文件:

# lp raw模式
lp -d SATO‑CL4NX‑Plus -o raw test.sbpl
# lpr raw模式
lpr -P SATO‑CL4NX‑Plus -l test.sbpl

也可直接 socket 编程往 9100 端口写 SBPL 字节流,不走 CUPS;但会丢失 CUPS 打印队列、日志、任务管理能力。

四、Linux 下开发程序打印标签的实现方案

方案 1:应用生成 PDF,调用 CUPS 打印(光栅模式)

Python 示例调用 lp 命令:

import subprocess
printer = "SATO‑CL4NX‑Plus"
pdf_file = "/tmp/label.pdf"
subprocess.run(["lp","-d",printer,"-o","media=w100h60",pdf_file])

优点:简单;缺点:条码图片化,dpi 受限。

方案 2:程序直接生成 SBPL 脚本,CUPS raw 透传(推荐工业)

import subprocess

sbpl_data = b"""<A>
<LH0020,0020>
<BC2,80,E,08>ABC123456</BC>
<X>
"""
p = subprocess.Popen(["lp","-d","SATO‑CL4NX‑Plus","-o","raw","-"],stdin=subprocess.PIPE)
p.stdin.write(sbpl_data)
p.stdin.close()

优点:使用打印机硬件渲染条码、矢量字体;速度快,适合大批量 RFID 标签,可包含 RFID 编码 SBPL 指令。

方案 3:直接 TCP Socket 写 9100 端口,绕过 CUPS

import socket
sock = socket.socket()
sock.connect(("192.168.1.50",9100))
sock.sendall(b"<A><X>")
sock.close()

缺点:无打印队列、无任务日志,异常重试、任务监控需要自己实现。

五、关键常见问题

  1. 光栅模式打印标签尺寸不对 必须在 PPD 里添加对应标签的 media 尺寸;或者打印时‑o media=wXXXhYYY指定;CUPS 默认 A4,会造成标签缩放错乱。
  2. raw 模式下驱动设置(浓度、速度)全部无效 raw 模式直接发送 SBPL,需要在你的 SBPL 脚本内部使用<CS>浓度、<SP>速度指令控制打印机参数。
  3. ARM 平台 (Raspberry Pi) 安装 下载 ARMv7 / ARMv8 架构驱动包;手动复制rastertosbpl到 cups filter 目录,chmod 755,复制 PPD 文件,不要使用 x86 包。
  4. RFID 标签打印
  • 光栅模式:只能打印标签图形,不能做 RFID 读写编码
  • 必须使用 raw 模式下发 SBPL RFID 指令(<RW>等)完成 EPC 写入。
  1. 查看 CUPS 打印日志

tail -f /var/log/cups/error_log

六、光栅模式 vs Raw 模式对比

项目 SATO CUPS光栅驱动模式 Raw直通模式(-o raw)
数据转换 rastertosbpl滤镜,位图转SBPL 不转换,透传原始SBPL字节流
条码输出 位图条码 打印机硬件矢量条码,质量高
PPD参数生效 ✅浓度、速度、介质尺寸 ❌全部失效,SBPL脚本控制
RFID编码 ❌不支持 ✅支持SBPL RFID指令
适用场景 PDF/图片标签、办公文档打印 工业大批量标签、RFID编码

业务选型建议:如果项目涉及 RFID 写入、大批量标签打印,优先 raw 透传 + 生成 SBPL 脚本;如果是用户上传 PDF 图片打印,用光栅 CUPS 驱动。如需要开发打印中间件可以联系上海敏用获取解决方案。