cups常用问题记录

概述

cups作为Linux和mac的基础打印服务,在解决问题的时候,首先排除一些人为的问题,然后可以通过查看cups的错误日志解决问题,日志目录在/var/log/cups/error.log。

问题1:临时目录权限问题

反馈说某台打印机无法打印,查看打印日志的时候发现以下问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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] envp[13]="USER=root"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[14]="CUPS_MAX_MESSAGE=2047"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[15]="CUPS_SERVER=/run/cups/cups.sock"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[16]="CUPS_ENCRYPTION=IfRequested"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[17]="IPP_PORT=631"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[18]="CHARSET=utf-8"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[19]="LANG=zh_CN.UTF-8"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[20]="PPD=/etc/cups/ppd/HP-LaserJet-M1319f-MFP.ppd"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[21]="RIP_MAX_CACHE=128m"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[22]="CONTENT_TYPE=application/vnd.cups-pdf-banner"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[23]="DEVICE_URI=smb://workgroup/192.168.5.162/A912"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[24]="PRINTER_INFO=HP LaserJet M1319f MFP"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[25]="PRINTER_LOCATION=A912"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[26]="PRINTER=HP-LaserJet-M1319f-MFP"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[27]="PRINTER_STATE_REASONS=none"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[28]="CUPS_FILETYPE=document"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[29]="FINAL_CONTENT_TYPE=application/vnd.cups-pdf"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[30]="AUTH_I****"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[31]="AUTH_U****"
D [26/Aug/2020:09:56:30 +0800] [Job 8] envp[32]="AUTH_P****"
D [26/Aug/2020:09:56:30 +0800] [Job 8] Started filter /usr/lib/cups/filter/bannertopdf (PID 12160)
D [26/Aug/2020:09:56:30 +0800] [Job 8] Started filter /usr/lib/cups/filter/pdftopdf (PID 12161)
D [26/Aug/2020:09:56:30 +0800] [Job 8] Started filter /usr/lib/cups/filter/foomatic-rip (PID 12162)
D [26/Aug/2020:09:56:30 +0800] [Job 8] Started backend /usr/lib/cups/backend/smb (PID 12163)
D [26/Aug/2020:09:56:30 +0800] [Job 8] pdftopdf: Last filter determined by the PPD: foomatic-rip; FINAL_CONTENT_TYPE: application/vnd.cups-pdf => pdftopdf will log pages in page_log.
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无法在TMPDIR目录创建临时文件,导致无法继续打印,所以先查看该目录的权限

1
getfacl /var/spool/cups/tmp

结果如下图

从结果看group没有w写权限,通过执行下列命令修复

1
2
sudo setfacl -m g:lp:rwx /var/spool/cups/tmp
sudo setfacl -m d:group:lp:rwx /var/spool/cups/

第一行是添加一个lp用户组,分配rwx权限,第二行是给上级目录添加lp用户组rwx权限,因为tmp目录是集成cups目录权限的,重启后cups调用mkdir创建tmp目录继承cups目录的权限,所以要修改上层cups目录的权限。

问题2:PPD文件异常

ppd文件是打印机能力的描述文件,如果ppd文件损坏,会导致cups无法正确解析打印机的各种属性。通过ipp请求获取打印机型号时,cups返回的是添加打印机时缓存的属性,这时候ppd损坏也可以返回正确值,但是cups重启后,重新加载ppd,这个时候就无法获取和ppd相关的属性。代码里面也要做出判断,比如std::map等容器直接使用没有的key会导致异常退出。

问题3:用户组权限问题

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

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

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

问题4:cups配置文件被破坏

cups服务配置文件位于/etc/cups/cupsd.conf,有时候配置文件被系统其他程序破坏,导致无法启动,可以重新安装cups-daemon服务,重新安装之后会初始化配置文件:

1
sudo apt install cups-daemon --reinstall

不要卸载cups,这是两个包,而且重新安装不会卸载对应的强依赖,更加安全。


cups常用问题记录
http://yoursite.com/2020/08/26/cups常用问题记录/
作者
还在输入
发布于
2020年8月26日
许可协议