串行打印机打印文档开头乱码问题排查求助
串行打印机打印乱码问题排查
问题背景
使用lpr命令通过Craden DP-9串行打印机打印文档,打印机在CUPS中注册为printer1,通过USB转串行适配器连接笔记本。打印任务有响应,但输出始终乱码。打印机自检文档打印正常,硬件状态确认良好。
使用的打印脚本
#!/bin/bash # Created on 2023-09-10T17:52:18-04:00 # Author: nate set -eo pipefail if [[ -z "$1" || ! -f "$1" ]] ; then echo "Please provide an input file." exit 0 fi tempfile="$(mktemp)" trap "rm -f $tempfile" EXIT WIDTH="90" LINES="60" MARGIN="0" cat "$1" \ | unix2dos\ | tee "$tempfile"\ | lpr -P printer1 -o raw cat "$tempfile"
测试情况
执行命令 ./print.sh ./print.sh 打印脚本自身时,输出文档开头出现乱码;打印机自检文档输出正常。
CUPS打印机配置(lpoptions输出)
copies=1 device-uri=serial:/dev/ttyUSB0?baud=38400+bits=8+parity=none+flow=soft finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=0 number-up=1 print-color-mode=monochrome printer-commands=AutoConfigure,Clean,PrintSelfTestPage printer-info printer-is-accepting-jobs=true printer-is-shared=true printer-is-temporary=false printer-location printer-make-and-model='IBM ProPrinterII Foomatic/ibmpro (recommended)' printer-state=3 printer-state-change-time=1694275126 printer-state-reasons=none printer-type=8564740 printer-uri-supported=ipp://localhost/printers/printer1
疑问
- 为何文档开头会出现乱码?
- 排查这类行式打印机打印乱码问题的常规方法有哪些?
解答
问题1:文档开头乱码的可能原因
- 驱动不匹配:当前配置的
IBM ProPrinterII Foomatic/ibmpro驱动与Craden DP-9不兼容,驱动发送的初始化指令被打印机误解析为打印内容,导致开头乱码。 - 串行参数不匹配:虽然配置了
baud=38400+bits=8+parity=none+flow=soft,但打印机实际默认波特率、流控等参数可能与当前设置不符,初始数据传输同步失败,出现乱码。 - Raw模式冲突:使用
-o raw时,CUPS仍可能插入驱动自带的控制码,这些指令未被打印机正确识别,表现为开头乱码。 - USB转串口适配器问题:部分适配器在数据传输初始阶段存在信号不稳定,导致前几个字节传输错误,出现开头乱码。
问题2:行式打印机打印乱码的常规排查方法
- 驱动适配检查:
- 查找打印机官方CUPS驱动或兼容驱动,替换当前的IBM ProPrinter驱动;若无官方驱动,尝试
Generic Text Only通用文本驱动。
- 查找打印机官方CUPS驱动或兼容驱动,替换当前的IBM ProPrinter驱动;若无官方驱动,尝试
- 串行参数校准:
- 查阅打印机手册确认默认波特率、数据位、奇偶校验、流控设置,在CUPS中修改
device-uri对应参数,逐一测试不同组合(比如波特率尝试9600、19200)。
- 查阅打印机手册确认默认波特率、数据位、奇偶校验、流控设置,在CUPS中修改
- 简化打印流程:
- 跳过脚本直接执行
lpr -P printer1 -o raw test.txt打印纯文本,排除unix2dos等步骤的影响;尝试不使用-o raw,让驱动处理转换,对比输出结果。
- 跳过脚本直接执行
- 硬件链路测试:
- 更换USB转串行适配器排除故障;尝试不同USB端口,避免供电或信号干扰;检查串行线缆(若用延长线)是否接触不良。
- 日志分析:
- 查看CUPS日志(通常在
/var/log/cups/目录下的error_log和access_log),查找打印任务中的错误信息或初始化指令异常。
- 查看CUPS日志(通常在
- 打印机重置:
- 执行打印机重置操作(参考手册),清除残留错误设置后重新发送打印任务。
内容的提问来源于stack exchange,提问作者firstname gklsodascb
相关产品推荐
相关产品推荐

