UOS系统打印机问题现场指南 V0.1

UOS系统打印机问题现场指南 V0.1

收集信息

  1. 拍摄打印机的型号名牌,很多时候大家只拍摄了厂家的log. 打印机的铭牌上一般有以下信息:

    • 厂家的品牌Log
    • 打印机的功能简单描述
    • 打印机的具体型号 (非常重要)
    • 打印机的输入电压范围
    • 打印机的产地
    • 打印机的具体生成厂家
  2. 收集 lsusb 命令输出,类似这样的:

    1
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 005: ID 04f2:b2eb Chicony Electronics Co., Ltd  Bus 001 Device 004: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad] Bus 001 Device 007: ID 0000:0538   Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  3. 收集 usb_printerid /dev/usb/lp0 输出.

    • 其中参数 /dev/usb/lp0, 要看当时打印机是连接在哪个usb接口上,默认是/dev/usb/lp0;

    • 如果 usb_printerid 没有任何输出,就尝试把 /dev/usb/lp0 改成lp1,lp2,lp3等等.

    • 比如东芝的某个打印机: MFG:TOSHIBA;CMD:T.32;MDL:e-STUDIO225;

    • 惠普的某个打印机

      1
      MFG:Hewlett-Packard;MDL:HP LaserJet Professional M1136MFP;CMD:ZJS,HBS,PJL,ACL,HTTP;CLS:PRINTER;DES:HP LaserJet Professional M1136MFP;FWVER:20140317;
  4. 收集 /etc/cups/ppd 目录的所有ppd文件

    • 这个目录的每个ppd文件描述了一个打印机的能力和完成一次打印作业需要那些模块.
  5. 收集cups的debug日志,步骤如下:

    • 打开 /etc/cups/cupsd.conf 文件,找到 Loglevel warn 这一行改成Loglevel debug
    • 保存后,执行这个命令重启cups服务: sudo /etc/init.d/cups restart.
    • 再次打印一次文件, cups就会记录详细的打印日志到这个文件 /var/log/cups/error_log
    • 另外还有 access_log 文件(记录提交给cups调度器的请求)和 page_log 文件(记录每页打印的情况).
  6. 把前面5步的列出信息或文件,再加上打印有问题的文档文件一起压缩一下发回来.

cups error_log 日志分析方法

日志格式

  1. 第1列是日志级别:
    • A - Alert message (LogLevel alert)
    • C - Critical error message (LogLevel crit)
    • D - Debugging message (LogLevel debug)
    • d - Detailed debugging message (LogLevel debug2)
    • E - Normal error message (LogLevel error)
    • I - Informational message (LogLevel info)
    • N - Notice message (LogLevel notice)
    • W - Warning message (LogLevel warn)
    • X - Emergency error message (LogLevel emerg)
  2. 第2列是日志时间和时区
  3. 第3列是具体的日志内容
  4. 更多, 阅读手册: man cupsd-logs

日志内容的前缀标签

[Job N], 所有以它开头的日志都是cups进行第N次打印作业的调度的日志, 非常重要,包含了以下信息.

  • 设置的打印参数和环境变量:

    1
    D [18/Oct/2017:10:59:09 +0800] [Job 45] argv[0]="Hewlett-Packard-HP-LaserJet-Professional-M1216nfh-MFP"      D [18/Oct/2017:10:59:09 +0800] [Job 45] argv[1]="45"      D [18/Oct/2017:10:59:09 +0800] [Job 45] argv[2]="deepin"      D [18/Oct/2017:10:59:09 +0800] [Job 45] argv[3]="安装.pdf"      D [18/Oct/2017:10:59:09 +0800] [Job 45] argv[4]="1"      D [18/Oct/2017:10:59:09 +0800] [Job 45] argv[5]="finishings=3 number-up=1 job-uuid=urn:uuid:5b4fd9f9-c4f2-3028-6aa5-971abb7f5c8e job-originating-host-name=localhost date-time-at-creation= date-time-at-processing= time-at-creation=1508295549 time-at-processing=1508295549 document-name-supplied=安装.pdf"      D [18/Oct/2017:10:59:09 +0800] [Job 45] argv[6]="/var/spool/cups/d00045-001"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[0]="CUPS_CACHEDIR=/var/cache/cups"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[1]="CUPS_DATADIR=/usr/share/cups"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[2]="CUPS_DOCROOT=/usr/share/cups/doc-root"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[3]="CUPS_FONTPATH=/usr/share/cups/fonts"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[4]="CUPS_REQUESTROOT=/var/spool/cups"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[5]="CUPS_SERVERBIN=/usr/lib/cups"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[6]="CUPS_SERVERROOT=/etc/cups"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[7]="CUPS_STATEDIR=/var/run/cups"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[8]="HOME=/var/spool/cups/tmp"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[9]="PATH=/usr/lib/cups/filter:/usr/bin:/usr/sbin:/bin:/usr/bin"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[10]="SERVER_ADMIN=root@deepin-pc"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[11]="SOFTWARE=CUPS/2.1.3"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[12]="TMPDIR=/var/spool/cups/tmp"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[13]="USER=root"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[14]="CUPS_MAX_MESSAGE=2047"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[15]="CUPS_SERVER=/var/run/cups/cups.sock"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[16]="CUPS_ENCRYPTION=IfRequested"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[17]="IPP_PORT=631"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[18]="CHARSET=utf-8"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[19]="LANG=zh_CN.UTF-8"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[20]="PPD=/etc/cups/ppd/Hewlett-Packard-HP-LaserJet-Professional-M1216nfh-MFP.ppd"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[21]="RIP_MAX_CACHE=128m"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[22]="CONTENT_TYPE=application/pdf"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[23]="DEVICE_URI=usb://HP/LaserJet%20Professional%20M1216nfh%20MFP?serial=000000000QJA1550PR1a"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[24]="PRINTER_INFO=Hewlett-Packard HP LaserJet Professional M1216nfh MFP"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[25]="PRINTER_LOCATION=deepin-pc"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[26]="PRINTER=Hewlett-Packard-HP-LaserJet-Professional-M1216nfh-MFP"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[27]="PRINTER_STATE_REASONS=none"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[28]="CUPS_FILETYPE=document"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[29]="FINAL_CONTENT_TYPE=application/vnd.cups-pdf"      D [18/Oct/2017:10:59:09 +0800] [Job 45] envp[30]="AUTH_I****"
  • 需要哪些 filter:

    1
    D [18/Oct/2017:10:59:09 +0800] [Job 45] 2 filters for job:      D [18/Oct/2017:10:59:09 +0800] [Job 45] pdftopdf (application/pdf to application/vnd.cups-pdf, cost 66)
  • 目标 backend :

    1
    I [18/Oct/2017:10:59:09 +0800] [Job 45] Started filter /usr/lib/cups/filter/pdftopdf (PID 12374)     I [18/Oct/2017:10:59:09 +0800] [Job 45] Started filter /usr/lib/cups/filter/foomatic-rip (PID 12375)     I [18/Oct/2017:10:59:09 +0800] [Job 45] Started backend /usr/lib/cups/backend/usb (PID 12376)

进行简单排查,举例

  • 打开日志文件后先搜索 E 级别的日志, 优先排除:

    1
    E [18/Oct/2017:10:59:18 +0800] [Job 45] Job stopped due to filter errors; please consult the error_log file for details.   E [30/Oct/2017:08:44:06 +0800] [cups-driverd] Bad driver information file \\\\"/usr/share/cups/model/uld-samsung/cms/CLP-360sc.cts\\\\"!  E [30/Oct/2017:08:44:06 +0800] [cups-driverd] Skipping \\\\"/usr/share/ppd/uld-samsung\\\\": loop detected!
  • 对于惠普的hplip插件的打印机搜索 hplip 字符串, 日志可以看出hplip插件没有安装

    1
    D [18/Oct/2017:11:50:07 +0800] [Job 50] prnt/hpcups/HPCupsFilter.cpp 429: HPCUPS: found Printer Language, it is - ljzjstream  D [18/Oct/2017:11:50:07 +0800] [Job 50] STATE: +connecting-to-device  D [18/Oct/2017:11:50:07 +0800] [Job 50] STATE: +hplip.plugin-error  D [18/Oct/2017:11:50:07 +0800] [Job 50] prnt/hpcups/HPCupsFilter.cpp 486: m_Job initialization failed with error = 48  D [18/Oct/2017:11:50:07 +0800] [Job 50] prnt/hpcups/HPCupsFilter.cpp 579: HPCUPS: processRasterData returned 1, calling closeFilter()
  • 搜索 error 字符串, 这个日志看出,缺少libpopt库

    1
    D [26/Sep/2017:15:26:21 +0800] [Job 28] /usr/bin/captfilter: error while loading shared libraries: libpopt.so.0: cannot open shared object file: No such file or directory
  • 搜索 status 字符串, 这个日志显示 foomatic-rip运行不正常, 错误码9:

    1
    D [18/Oct/2017:10:59:10 +0800] [Job 45] PID 12375 (/usr/lib/cups/filter/foomatic-rip) stopped with status 9.
  • 偶现错误,cups无法创建临时文件:

    1
    D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[12]="TMPDIR=/var/spool/cups/tmp"D [26/Aug/2020:09:56:30 +0800] [Job 8] Set job-printer-state-message to "Can\'t create temporary file", current level=ERROR

  问题原因:cups是lp用户组,没有TMPDIR目录的写权限。通过getfacl /var/spool/cups/tmp可以查看权限问题。解决办法:

  sudo setfacl -m g:lp:rwx /var/spool/cups/tmp

  sudo setfacl -m d:group:lp:rwx /var/spool/cups/

  • 用户组权限问题:

    新版欧拉系统测试打印管理器,发现lpinfo -v可以发现直接的打印机,但是打印管理器自动发现没找到,有一个细节就是用户需要sudo才能执行该命令,但是正常的专业版是不需要的,所以应该是当前用户不在lp和lpadmin组,导致无法管理打印机。输入id命令查看当前用户所属组,发现确实用户默认没有lp和lpadmin组。所以手动添加组即可,命令如下:

    1
    sudo usermod -a -G lp user   #给user用户添加lp组sudo usermod -a -G lpadmin user #给user用户添加lpadmin组

    > 目前欧拉版和行业版基于centos,所有的打印机驱动没有适配,暂时需要手动下载安装驱动

  • filter权限问题

    安装print-scan这个驱动包,添加打印机打印,cups错误如下:

    正确的filter权限如下图:

    发现现场的filter的owner和group被修改成了非root,手动修改为root就好了,命令如下:

    1
    sudo chown root:root file
  • 驱动正确安装但是无法打印

    在打印机管理器中安装了推荐的佳能驱动,添加打印机成功,但是无法打印,打印管理器日志提示filter错误,cups日志找到具体问题,提示 libcupsimage找不到。所以直接apt安装这个 libcupsimage2就可以解决。

  • 天融信审计软件问题

    正常添加打印机后,无法打印,查看cups日志发现打印机的uri被串改,前缀多了个TDABACKEND0,导致后续的filter-backend流程错误。卸载或者升级该软件重新添加打印机即可。

共享打印机常见问题

共享打印机的分为两个开关,设置里面的是总开关,打印机列表的右键菜单里面的共享是针对单个打印机,所以需要先在设置里面开启总开关(第一和第二项)。共享Linux打印机,通常使用ipp协议打印机,自动匹配的驱动是ipp everywhere无驱方案。共享windows打印机,需要先在windows开启lpd,然后选择对应的lpd协议打印机。smb协议打印机目前存在问题,尽量避免使用该协议打印机(一般正常情况不会出现,除非搜索不到别的协议打印机)。

三种添加打印机的区别

  • 自动查找

    自动查找可以发现同网段的网络打印机、同网段的其他用户共享的打印机和直连的USB打印机。

  • 手动查找

    手动查找分为两种情况,一种是查找指定ip共享的打印机,一种是查找指定ip的打印机。直接连接指定ip的打印机,协议为socket,端口为9100,所以需要确保ip和端口可以正常访问。

  • URI添加

    这种情况是知道打印机的URI和对应的型号以及驱动,纯手动添加打印机,比如有些打印机的端口不是9100,查找不到,就可以使用这种方式添加打印机。

    1
    nmap ip   #扫描开放的端口

云打印常见问题排查

  • 服务器配置界面无法显示ip

    首先排查服务是否启动,在任务管理器当中查看DeepinCloudPrintService服务是否启动,没有启动就先进入程序安装目录,管理员启动cmd,执行CloudPrint.exe install,手动安装这个服务,查看是否存在错误,常见错误就是说DeepinCloudPrintService这个注册表项已经存在了,所以需要启动注册表编辑器搜索这个项,删掉这个对应的注册表就行,然后重新手动安装服务,或者重新安装这个安装包。

  • 客户端能够连接服务器,但是打印任务一直暂停

    首先排查客户端后台服务是否启动,ps aux|grep cloud,看输出的结果里面damon和agent两个后台进程是否启动,目前由于dtk升级导致不兼容的问题,会导致agent这个进程无法启动,直接终端启动/usr/lib/deepin-daemon/deepin-cloud-print-agent,会报dtkwidget的无法找到符号的问题。这时候升级libdtkwidget5就行,升级完然后直接启动云打印客户端就可以自动启动agent后台程序,不需要重新启动系统。

  • 勾选逐份导致打印出现多份的情况

    原因是5.2.0.0之前的版本,在客户端和服务端都处理了多份这个参数,所以导致打两份出现四份的情况。在5.2.0.0及之后的版本已经修复。

  • 无法打印彩色文档

    原因是有两方面,一个是打印软件比如是wps,没有将color参数传递给cups,第二个原因是云打印客户端默认是gray(灰色模式),5.2.0.0及以后的版本修复这个问题。但是打印机也分不同的情况,有的打印机能够识别windows传递给打印机的色彩参数,有的打印机并不能识别这个参数,这种情况也会导致无法打印彩色(这种不属于云打印的问题)。

  • 双面打印参数问题

    有的打印机本身支持双面打印,但是在windows上通过驱动读取的结果不正确,显示不支持。导致将打印能力传到客户端时,客户端根据错误的结果生成打印机ppd,然后打印软件比如wps等就没有了双面打印的选项,只有一个手动双面打印。解决办法就是手动修改ppd里面的内容,自己增加双面打印的选项。ppd路径在/etc/cups/ppd/目录下,文件名是打印机的名字,添加如下内容:

    1
    2
    3
    4
    5
    6
    7
    *OpenUI *Duplex/2-Sided Printing: PickOne
    *OrderDependency: 10 AnySetup *Duplex
    *DefaultDuplex: None
    *Duplex None/Off (1-Sided): "<</Duplex false>>setpagedevice"
    *Duplex DuplexNoTumble/Long-Edge (Portrait): "<</Duplex true/Tumble false>>setpagedevice"
    *Duplex DuplexTumble/Short-Edge (Landscape): "<</Duplex true/Tumble true>>setpagedevice"
    *CloseUI: *Duplex

    添加完如下图所示:

    wps打印属性添加完结果如下图所示:

    修改完需要重启cups服务,命令如下:

    1
    sudo systemctl restart cups

云打印日志路径

  • 客户端界面程序 :~/.cache/uniontech/deepin-cloud-print/deepin-cloud-print.log

  • 客户端dcp程序 : /var/log/cups/dcp_log

  • 服务端界面程序:%temp%/deepin-cloud-print-config/dcpc.log

  • 服务端后台程序:安装目录的Logs/cloud-print-server.log

1.1.1.1及之后版本服务端的日志都会放在安装目录的Logs目录

云打印缓存文件开关

为了方便前端排查问题,云打印服务端(1.1.3)和客户端(5.2.1)新增保留缓存文件开关。

  • 服务端

    打开注册表,搜索DeepinCloudPrintServer,将IsCacheMode的值修改为1(默认是0表示不缓存),用完记得改回0。缓存目录在安装目录的Cache目录。截图如下:

  • 客户端

    添加一个 /usr/share/dcp/dcp.conf 文件(原始不存在,用完记得删除),缓存路径在/var/spool/dcp/SPOOL/路径,具体文件名参考dcp日志最后输出的缓存文件名。

    内容如下:

    1
    2
    [IsCacheMode]
    Mode = 1

UOS系统打印机问题现场指南 V0.1
http://yoursite.com/2021/01/29/UOS系统打印机问题现场指南 V0.1/
作者
还在输入
发布于
2021年1月29日
许可协议