概述
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 sudo usermod -a -G lpadmin user
|
目前欧拉版和行业版基于centos,所有的打印机驱动没有适配,暂时需要手动下载安装驱动
问题4:cups配置文件被破坏
cups服务配置文件位于/etc/cups/cupsd.conf,有时候配置文件被系统其他程序破坏,导致无法启动,可以重新安装cups-daemon服务,重新安装之后会初始化配置文件:
1
| sudo apt install cups-daemon --reinstall
|
不要卸载cups,这是两个包,而且重新安装不会卸载对应的强依赖,更加安全。