使用CUPS打印服务
1. 测试环境 2
2. CUPS介绍 3
2.1 CUPS的配置文件 3
2.1.1 cupsd.conf 3
2.1.2 cups-files.conf 3
2.1.3 printcap 3
2.1.4 printers.conf 3
2.2 SPOOL假脱机 4
2.3 CUPS 支持各种打印机,包括: 4
2.4 CUPS的beh 4
2.5 使用beh 5
2.6 安装cups,并激活 6
3. 打印机驱动 6
3.1 lpinfo -m列出已有驱动程序 6
3.2 添加更多的驱动 6
4. 打印相关命令: 7
4.1 有2个打印命令 7
4.2 打印任务管理 7
4.3 查看打印机状态 7
4.4 控制打印机状态 8
4.5 打印机设置 8
5. 添加打印机 8
5.1 找到打印机 9
5.2 找到打印机驱动 9
5.2.1 添加更多的驱动
5.2.2 安装第三方驱动
5.3 添加打印机 9
5.3.1 设置默认打印机 10
5.3.2 更改选项 10
5.3.3 检查状态 11
5.3.4 测试打印 11
5.3.5 打印任务 11
5.4 添加打印机-图形界面 12
5.5 删除打印机 12
6. 其他参考(只有链接和部分摘要,具体请打开链接看原文) 12
6.1 本机使用的打印机Xprinter XP-58的第三方驱动 12
6.2 异常问题检查 13
6.3 开发人员观点中的Foomatic如何运作?(有流程图) 13
6.4 其他Linux系统的参考 13
6.5 openprinting.org的(绝望指南) 13
6.6 查看错误日志 14
6.7 OpenPrinting CUPS快速入门 14
6.8 使用CUPS打印的基础知识 14
6.9 用户角度的教程 15
6.10 打印为PDF
1. 测试环境
Printer: Xprinter XP-58IIH
指令支持: ESC/POS
接口: USB, 蓝牙
Linux系统: Arch Linux
$ sudo pacman -Qi cups
Name : cups
Version : 2.2.11-1
Description : The CUPS Printing System - daemon package
Architecture : x86_64
URL : https://www.cups.org/
Licenses : GPL
Groups : None
Provides : None
Depends On : acl pam libcups>=2.2.11 cups-filters bc dbus systemd
libpaper hicolor-icon-theme
Optional Deps : xdg-utils: xdg .desktop file support [installed]
colord: for ICC color profile support [installed]
Required By : None
Optional For : None
Conflicts With : None
Replaces : None
Installed Size : 13.92 MiB
Packager : Andreas Radke <andyrtr@archlinux.org>
Build Date : Sun 24 Mar 2019 06:39:26 PM CST
Install Date : Sun 07 Apr 2019 05:07:53 PM CST
Install Reason : Explicitly installed
Install Script : Yes
Validated By : Signature
2. CUPS介绍
https://www.ibm.com/developerworks/cn/linux/l-lpic1-108-4/index.html
管理打印机和打印 Ian Shields 2018 年 3 月 14 日发布
CUPS 原先为通用 UNIX 打印系统 (Common UNIX Printing System) 的首字母缩写,是 Linux 的打印机和打印作业管理器。
System 也有一个打印守护程序。它的功能类似于 Berkeley LPD,但采用不同的命令集。您将会经常看到两种具有不同选项但完成相同任务的命令。
例如,来自 Berkeley 实施的 lpr和来自 System V 实施的 lp 都可打印文件。
CUPS 打印系统的核心是作为守护进程运行的 cupsd 打印服务器。
2.1 CUPS的配置文件
2.1.1 cupsd.conf
CUPS 配置文件通常位于 /etc/cups/cupsd.conf 中。
原先 cupsd.conf 中允许的文件、目录和用户配置指令,现在改为存储在 cups-files.conf 中。这样可防止某些类型的特权升级攻击。
2.1.2 cups-files.conf
$ sudo cat /etc/cups/cups-files.conf
# Location of the file listing all of the local printers...
#Printcap /etc/printcap
2.1.3 printcap
自动生成的 /etc/printcap 文件。这是 LPD 打印服务器的配置文件名称,部分应用仍使用它来确定可用的打印机及其属性。
$ sudo cat /etc/printcap
# This file was automatically generated by cupsd(8) from the
# /etc/cups/printers.conf file. All changes to this file
# will be lost.
Xprint|Xprint:rm=tompc:rp=Xprint:
2.1.4 printers.conf
$ sudo cat /etc/cups/printers.conf
# Printer configuration file for CUPS v2.2.11
# Written by cupsd on 2019-04-09 14:41
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
<Printer Xprint>
UUID urn:uuid:192cdccd-05bc-3ef7-4582-c6233773ef56
Info Xprint
Location pc
MakeModel Zijiang ZJ-58
DeviceURI usb://Unknown/Printer?serial=?
State Idle
StateTime 1554792072
ConfigTime 1554792065
Type 53252
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>
2.2 SPOOL假脱机
https://zh.wikipedia.org/zh-hans/假脱机
假脱机(外部设备联机并行操作,SPOOL,Simultaneous Peripheral Operations On-line)是一种数据缓冲,指传输数据的过程中,将数据存放在临时工作区中。
最常见的假脱机的应用是打印缓存,即把打印任务加入到队列。
根据文件系统层次结构标准 (FHS),假脱机文件默认情况下存储在 /var/spool 文件系统中。
2.3 CUPS 支持各种打印机,包括:
Local Printers本地连接:
- 并行打印机和 USB 打印机
Network Printers网络链接:
- Backend Error Handler 后端错误处理程序
- LPD/LPR 主机或打印机
- AppSocket/HP JetDirect
- 互联网打印协议 (http)
- 互联网打印协议 (https)
- 互联网打印协议 (ipp)
- 互联网打印协议 (ipps)
2.4 CUPS的beh
Backend Error Handler beh 后端错误处理程序
https://wiki.linuxfoundation.org/openprinting/database/backenderrorhandler
下载 beh.txt 脚本:http://www.openprinting.org/download/files/beh
当CUPS后端和打印机之间的通信出现错误时,CUPS禁用打印队列!!!
对于桌面/家庭用户来说, 这经常发生,通常家用打印机只会在偶尔需要使用时才打开。
而经常发送打印任务后,才发现打印机还没开,或网线没有插...这时候就需要从新启用打印服务...
此类问题可以通过安装beh脚本解决,此脚本使得后端错误处理可配置:
让队列根本不被禁用。简单的方法,但工作会丢失。
重复给定次数。
经常无限重复,直到工作最终通过。这是LPRng的标准,它消除了工作的损失。
也可以配置两次尝试运行后端之间的时间间隔。
对每个打印队列独立完成配置。因此,可以区别对待本地打印机和网络打印机。
只需下载脚本,将其复制到CUPS后端目录(通常/usr/lib/cups/backend/),然后使用“ chmod 755 beh。
然后重新启动它注册新后端的CUPS,通常使用“ killall -HUP cupsd”或“/etc/init.d/cups restart”。
如果你做的都正确,那么在“ beh”的输出中必须有一行包含“ lpinfo -v”。
beh是一个包装器,由CUPS调用代替通常的后端,beh现在称为后端。
这种方式beh可以根据其配置重复调用后端,或者只是隐藏后端的错误状态,使其不被CUPS守护程序看到。
2.5 使用beh
要使用打印队列beh,请获取root并调用命令,如下所示:
lpadmin -p <queue name> -E -v beh:/<dd>/<att>/<delay>/<originaluri>
- <queue name>:打印队列的名称
- <dd>:如果“ 1” beh始终以零状态退出,请不要禁用,因此当原始后端退出并出现错误时,队列永远不会被禁用。“ 0”将后端的最后一次调用(<att>重试后)的错误状态传送到CUPS,因此队列通常被禁用。
- <att>:尝试,在出现错误时尝试调用后端的次数。“ 0”表示无限重试。在这种情况下<dd>变得毫无意义。
- <delay>:两次尝试调用beckend之间的延迟,以秒为单位给出,并作为整数。没有意义,如果<att>是一个。
- <originaluri>:您的队列之前拥有 的原始URI(使用“ lpstat -v”来显示您的队列的URI)。
所有参数,特别是<dd>,<att>和<delay>一直被指定,即使其中一人是没有意义的,由于其他的设置。
beh与除了每个后端工作hp从后端HPLIP。如果beh与hp后端一起使用,HP Toolbox将无法再找到打印机。
示例URI:
beh:/1/3/5/socket://printer:9100
在主机名为“ printer” 的网络打印机上,尝试访问3次,尝试之间有5秒的延迟。如果作业仍然失败,则不会禁用队列(并丢弃作业)。
beh:/0/10/60/socket://printer:9100
每隔一分钟重试10次,在仍未成功时禁用队列。
beh:/1/0/60/usb://Brother/HL-5040%20series
在USB上的Brother HL-5040上无限次地尝试,直到打印机返回,间隔为一分钟。这样,当打印机关闭时,作业不会丢失,并且可以通过简单地关闭打印机来有意地延迟打印。桌面打印机和/或家庭用户的理想配置。
2.6 安装cups,并激活
这里将安装在 Arch Linux 系统上。其他Linux系统主要是安装命令有差异,其他命令基本相同。
$ sudo pacman -S cups //安装在Arch Linux系统上使用pacman命令。
$ sudo systemctl start org.cups.cupsd //启动
$ sudo systemctl status org.cups.cupsd //查看状态
$ sudo systemctl enable org.cups.cupsd //设置开启启动
3. 打印机驱动
lpinfo 命令还可帮助您识别可用设备类型和驱动程序。使用 -v 选项可列出受支持的设备,-m 选项可列出驱动程序。
3.1 lpinfo -m列出已有驱动程序
$ lpinfo -m |grep hp
$ lpinfo -m |grep epson
drv:///sample.drv/epson9.ppd Epson 9-Pin Series
drv:///sample.drv/epson24.ppd Epson 24-Pin Series
全部列出,不方便查看,加上过滤条件,如上,没找到hp的打印机驱动,但有2个Epson的驱动。如果使用类似方式找到里匹配你正在使用的打印机,可以跳过下一节(添加更多的驱动。)
3.2 添加更多的驱动
请访问 OpenPrinting.org(参阅相关主题),查看是否有用于您的特定打印机的驱动程序。
Foomatic:Linux Foundation的OpenPrinting工作组的foomatic为许多打印机驱动程序提供PPD,包括free和nonfree。有关foomatic的功能的更多信息,请参阅Developer's View中的Foomatic。
要使用foomatic,请安装foomatic-db-engine以及至少以下之一:
- foomatic-db - foomatic-db-engine用于生成PPD文件的XML文件集合。
- foomatic-db-ppds - 预建的PPD文件。(60Mb)
- foomatic-db-nonfree - 来自打印机制造商的XML文件集合,由foomatic-db-engine用于生成PPD文件的非免费许可证。
- foomatic-db-nonfree-ppds - 非免费许可下的预建PPD文件。
$ sudo pacman -S foomatic-db-engine
$ sudo pacman -S foomatic-db-ppds //安装好这个预建的PPD文件, 有(60Mb)多,有好几千个打印机驱动了。
“PPD文件”(PostScript打印机描述文件)
再使用过滤条件列出已添加的驱动,找到匹配的驱动后,就可以进入下一节了,如果还是没有,上面4选1,把试过没有的卸载掉,继续尝试其他的,也可以挨个儿全部安装,添加更多的驱动再找。
$ lpinfo -m |grep 过滤关键字
4. 打印相关命令:
https://www.computerhope.com/unix/ulpadmin.htm
https://www.computerhope.com/unix/ulp.htm
https://www.computerhope.com/unix/ulpstat.htm
4.1 有2个打印命令
- lp - 在System V操作系统上打印文件。
- lpr - 提交打印请求。
*lpr 会以静默方式实现作业假脱机,而 lp 则会显示假脱机作业的编号
*lp 具有与 lpr 相似的选项,但名称可能不同;例如,lpr 上的 -# 与 lp 上的 -n 等效
lpr 的选项选项 及 用途
- -C、-J 或 -T 设置作业名。
- -P 选择特定打印机。
- -# 指定副本数量。请注意,这与您在 lp 命令中看到的 -n 选项不同。
- -m 作业完成时发送电子邮件。
- -l 指示已设置打印文件的格式以进行打印。与 -o raw 等效。
- -o 设置作业选项。
- -p 使用阴影标题设置文本文件格式。与 -o prettyprint 等效。
- -q 使作业暂挂(或排队),以便稍后打印。
- -r 实现文件假脱机以进行打印后,移除此文件。
4.2 打印任务管理
lpq - 列出可用打印机的状态,列出打印作业。
lprm - 从打印队列中删除请求。
4.3 查看打印机状态
lpstat - 列出LP打印服务的状态。
- -a 显示打印机的接受状态。
- -c 显示打印类。
- -p 显示打印状态:已启用或已禁用。
- -s 显示默认的一个或多个打印机和类。等效于 -d、 -c 和 -v。请注意,必须将多个选项隔开,因为可为许多选项指定值。
- -s 显示打印机及其设备。
lpstat -d; lpstat -v HL-2280DW; lpstat -s; lpstat -a XP-610; lpstat -p -a;
$ lpstat -s
system default destination: XPRINT
device for XPRINT: usb://Unknown/Printer?serial=?
$ lpstat -p
printer XPRINT disabled since Mon 08 Apr 2019 05:10:17 PM CST -
reason unknown
4.4 控制打印机状态
可通过 cupsaccept 和 cupsreject 命令控制是启用还是禁用排队
可通过 cupsenable 和 cupsdisable 命令控制是启用还是禁用打印
#cupsdisable queue_name //停用打印机
#cupsenable queue_name //激活打印机
#cupsaccept queue_name //将打印机设置为接受作业
4.5 打印机设置
$ lpoptions -d xxx //设置默认打印机
$ lpoptions -p xxx -l //列出选项 List the options
$ lpoptions -p xxx -o option=value //设置一个选项 Set an option
比如:$ lpoptions -p HP_DESKJET_940C -o PageSize=A4
5. 添加打印机
掌握了基本信息后,安装了cups,找到了打印机驱动,就可以使用 lpadmin 命令来配置打印机.
命令行方式 适用于几乎所有打印机
5.1 找到打印机
已USB打印机为例,使用 lpinfo命令查找打印机的uri。
$ sudo lpinfo -v
...
direct usb://Unknown/Printer?serial=?
这里找到就是USB打印机的uri了,不同的打印机,这里会很不一样。
注:可以先不插USB,执行以上命令;再插上USB打印机,再执行以上命令,这样就很容易分辨了。
$ /usr/lib/cups/backend/snmp ip_address #使用SNMP查找URI
5.2 找到打印机驱动
使用$ lpinfo -m命令加过滤找到打印机驱动model
$ lpinfo -m |grep 58
lsb/usr/cupsfilters/zj58.ppd Zijiang ZJ-58
如果正好找到了,就可以跳到下一节添加打印机了。
5.2.1 添加更多的驱动
参照3.2 添加更多的驱动
然后再lpinfo1 -m查找,大部分都能通过以上方式或打印机厂商网站找到。
5.2.2 安装第三方驱动(20190412补充)
如果以上方式都没有适合的驱动,正好买到了小众的打印机,有些国产或者山寨等,也可以向店家请教。
比如这里找到了github上的驱动。
https://github.com/klirichek/zj-58
下载,参照readme的指导安装即可
$ sudo pacman -S cmake //安装编译工具
下载,解压缩.
$ cd /home/toma/Downloads/xp/zj58 //进入解压缩的目录
$ mkdir build //建立构建二进制用的目录
$ cmake /home/toma/Downloads/xp/zj58 //编译
$ sudo make install //安装
...
[100%] Linking C executable rastertozj
[100%] Built target rastertozj
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/lib/cups/filter/rastertozj
-- Installing: /usr/share/cups/model/zjiang/zj58.ppd
-- Installing: /usr/share/cups/model/zjiang/xp58.ppd
-- Installing: /usr/share/cups/model/zjiang/tm20.ppd
-- Installing: /usr/share/cups/model/zjiang/zj80.ppd
$ lpinfo -m |grep xp58
zjiang/xp58.ppd J-speed XP-58
5.3 添加打印机
$ sudo lpadmin -p queue_name -E -v uri -m model
queue_name, 改为打印机名称。
uri,前面lpinfo找到的字符串。
model,前面找到的打印机驱动,指定PPD文件。
https://lists.cups.org/pipermail/cups/2004-December/031341.html
有两种方法可以指定PPD:-m标准模型 或 -P绝对路径的ppd文件
"-m ppdfile.ppd”或“-m subdir/ppdfile.ppd"这个“-m”参数
指定标准的CUPS“模型”(通常位于“/usr/share/cups/model/”)或者在子目录中
“在/usr/share/cups/model/subdir/”。就是使用lpinfo -m找到的ppd文件。
注:指定标准模型或PPD文件,如上只需要使用文件名,或子目录\文件名即可,不需要注明具体的路径。
另注:查看当前ArchLinux系统的ppd文件在这里:/usr/share/ppd/cupsfilters/
“-P /path/to/ppdfile.ppd”或“-P ../path/to/ppdfile.ppd”。这个“-P”
参数采用绝对或相对路径来查找 ppdfile.ppd。这类是标准库里找不到,从其他地方获取的,需要手动指定,则需要绝对路径,比如:/home/toma/Download/zj58.ppd
https://wiki.archlinux.org/index.php/CUPS 上的添加示例
- #lpadmin -p HP_01 -E -v "usb://HP...uri" -m drv:///HP...ppd.gz //指定标准模型
- #lpadmin -p AirPrint -E -v "ipp://10.0.1.25/ipp/print" -m everywhere #无驱动(Apple AirPrint或IPP Everywhere)
- #lpadmin -p Print02 -m raw #Raw queue; 没有PPD或过滤器
- #lpadmin -p Print03 -E -v "ipp://10.0.1.3/ipp/print" -m pxlmono.ppd #指定PPD而不是模型
本机添加(错误尝试记录):
$ sudo lpadmin -p Xprint -E -v "usb://Unknown/Printer?serial=?" -m zj58.ppd
lpadmin: Unable to copy PPD file.
注:zj58.ppd并不是标准库里的,我是从github上找到的,手动复制到标准模型的目录下,
$ sudo cp zj58.ppd /usr/share/ppd/cupsfilters/zj58.ppd
然后使用-m指定ppd文件来添加打印机,结果报错:“无法复制PPD文件”。
这时就需要使用-P指定绝对路径的方式了:
$ sudo lpadmin -p Xprint -E -v "usb://Unknown/Printer?serial=?" -P /usr/share/ppd/cupsfilters/zj58.ppd
添加成功后,会将ppd文件复制到/etc/cups/ppd/Xprint.ppd
单纯指定一个ppd文件,可以添加成功,查看打印机状态也OK,但发送打印任务永远都是stoped状态。
正确的方式是标准库里的PPD模型,或者下载厂商提供的驱动程序,我这里使用的是第三方驱动,(20190412添加)
5.2.2 安装第三方驱动
这是再查找出 -v, -m 参数,然后添加打印机:
$ sudo lpinfo -v
direct usb://Unknown/Printer?serial=?
$ lpinfo -m |grep xp58
zjiang/xp58.ppd J-speed XP-58
$ sudo lpadmin -p Xprint58 -E -v "usb://Unknown/Printer?serial=?" -m zjiang/xp58.ppd
5.3.1 设置默认打印机
$ lpstat -s
no system default destination
device for Xprint58: usb://Unknown/Printer?serial=?
[toma@tompc build]$ lpstat -p
printer Xprint58 is idle. enabled since Fri 12 Apr 2019 11:41:10 AM CST
[toma@tompc build]$
$ lpoptions -d Xprint58
copies=1 device-uri=usb://Unknown/Printer?serial=? 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 printer-commands=none printer-info=Xprint58 printer-is-accepting-jobs=true printer-is-shared=true printer-is-temporary=false printer-location printer-make-and-model='J-speed XP-58' printer-state=3 printer-state-change-time=1555040470 printer-state-reasons=none printer-type=53252 printer-uri-supported=ipp://localhost/printers/Xprint58
$ lpstat -p
printer Xprint58 is idle. enabled since Fri 12 Apr 2019 11:41:10 AM CST
[toma@tompc build]$ lpstat -s
system default destination: Xprint58
device for Xprint58: usb://Unknown/Printer?serial=?
5.3.2 更改选项
#列出选项
$ lpoptions -p Xprint58 -l
PageSize/Media Size: *X48MMY65MM X48MMY105MM X48MMY210MM X48MMY297MM X48MMY3276MM Custom.WIDTHxHEIGHT
CutMedia/Cut Media: *None EndOfPage EndOfJob
OptionCash1/Cash drawer 1: *False True
OptionCash2/Cash drawer 2: *False True
OptionCutter/Cutter: *False True
FeedDist/Feed distance: 0feed3mm 1feed6mm *2feed9mm 3feed12mm 4feed15mm 5feed18mm 6feed21mm 7feed24mm 8feed27mm 9feed30mm 10feed33mm 11feed36mm 12feed39mm 13feed42mm 14feed45mm
FeedWhere/When to feed: None AfterPage *AfterJob
BlankSpace/Blank space at page's end: True *False
CashDrawer1Setting/Cash Drawer 1: *None 1BeforePrinting 1AfterPrinting
CashDrawer2Setting/Cash Drawer 2: *None 2BeforePrinting 2AfterPrinting
CashDrawer1PulseOn/Cash Drawer 1 pulse ON time: None 10XMS 20XMS 30XMS *40XMS 50XMS 60XMS 70XMS 80XMS
CashDrawer1PulseOff/Cash Drawer 1 pulse OFF time: None 10XMS 20XMS 30XMS 40XMS *50XMS 60XMS 70XMS 80XMS
CashDrawer2PulseOn/Cash Drawer 2 pulse ON time: None 10XMS 20XMS 30XMS *40XMS 50XMS 60XMS 70XMS 80XMS
CashDrawer2PulseOff/Cash Drawer 2 pulse OFF time: None 10XMS 20XMS 30XMS 40XMS *50XMS 60XMS 70XMS 80XMS
Resolution/Resolution: *203x203dpi
激活打印机
#cupsenable Xprint58
将打印机设置为接受作业
#cupsaccept Xprint58
5.3.3 检查状态
$ lpstat -s
system default destination: Xprint58
device for Xprint58: usb://Unknown/Printer?serial=?
$ lpstat -p
printer Xprint58 is idle. enabled since Sun 07 Apr 2019 09:37:27 PM CST
禁用打印机后再查看状况
#cupsenable Xprint
$ lpstat -p
printer Xprint disabled since Sun 07 Apr 2019 09:54:03 PM CST -
Unable to send data to printer.
5.3.4 测试打印
$ lpr file
$ lpr -# 17 file # print the file 17 times
$ echo 'Hello, world!' | lpr -p # print the result of a command. The -p switch adds a header.
5.3.5 打印任务
列出打印队列
$ lpq
$ lpq -a # on all queues
移除打印任务
# lprm # remove last entry only
# lprm - # remove all entries
5.4 添加打印机-图形界面
部分厂商提供独立的打印驱动安装程序,参照厂商说明安装好驱动,然后打开CUPS的网页添加打印机即可。
http://127.0.0.1:631
5.5 删除打印机
首先将其设置为拒绝所有传入的条目:
$ sudo cupsreject XPRINT
$ lpstat -p
printer XPRINT disabled since Mon 08 Apr 2019 05:10:17 PM CST -
Rejecting Jobs
然后禁用它。
$ sudo cupsdisable XPRINT
$ lpstat -p
printer XPRINT disabled since Mon 08 Apr 2019 05:10:17 PM CST -
Paused
最后删除它。
$ sudo lpadmin -x XPRINT
$ lpstat -p
lpstat: No destinations added.
$ lpstat -s
no system default destination
lpstat: No destinations added.
lpstat: No destinations added.
6. 其他参考(只有链接和部分摘要,具体请打开链接看原文)
https://www.cups.org/faq.html
https://www.cups.org/doc/options.html
http://localhost:631/help
https://en.wikipedia.org/wiki/CUPS
6.1 本机使用的打印机Xprinter XP-58的第三方驱动
Printer name is "Xprinter", model: XP-58IIH. Support USB and Bluetooth.
https://github.com/klirichek/zj-58
Zj-58, Zj-80 and other receipt printers
CUPS filter for cheap thermal receipt printers as Zijiang ZJ-58, XPrinter XP-58, JZ-80 with cutter, Epson TM-T20, and may be any other printers understanding ESC/POS commands.
Originally it was reverse-engineered filter for Zijiang zj-58 with it's specific PPD, but later it is revealed that it actually works with many other cheap 58mm printers, like Xprinter XP-58.
https://github.com/klirichek/zj-58/blob/master/zj58.ppd
6.2 异常问题检查
https://wiki.ubuntu.com/DebuggingPrintingProblems
Debugging Printing Problems
打开终端/控制台并检查是否加载了usb内核模块:
$ lsmod | grep usb
检查USB子系统是否正确检测到打印机并确定其USB供应商/产品ID以及USB总线和设备地址:
$ lsusb
注意:如果关闭或拔下打印机电源,USB总线和设备地址会发生变化。如果需要,请重新运行此命令。
检查打印机的设备文件是否已创建,所有权(“root lp”)和权限(非HP:“crw-rw-r--”,HP:“crw-rw-r - +”)是否正确设置:
$ ls -l /dev/usb/lp*
$ ls -l /dev/bus/usb/*/*
6.3 开发人员观点中的Foomatic如何运作?(有流程图)
6.4 其他Linux系统的参考
https://wiki.archlinux.org/index.php/CUPS
https://wiki.archlinux.org/index.php/CUPS/Printer-specific_problems
https://wiki.gentoo.org/wiki/Printing
https://wiki.debian.org/Printing
https://wiki.debian.org/SystemPrinting
6.5 openprinting.org的(绝望指南)
http://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/VII.cups-help/VII.cups-help.html
(VII。)故障排除 - CUPS-并寻求帮助HOWTO(绝望指南)
https://www.cups.org/documentation.html
6.6 查看错误日志
http://127.0.0.1:631/admin/log/error_log?
E [09/Apr/2019:10:23:28 +0800] [cups-driverd] Unable to open \"/usr/share/cups/model/zj58.ppd\" - No such file or directory
/usr/share/cups/model/zj58.ppd
E [09/Apr/2019:20:34:56 +0800] Xprint: File \"/usr/lib/cups/filter/rastertozj\" not available: No such file or directory
/usr/lib/cups/filter/rastertozj
6.7 OpenPrinting CUPS快速入门
https://wiki.linuxfoundation.org/openprinting/database/foomatic
https://wiki.linuxfoundation.org/openprinting/database/cupsdocumentation
Foomatic计划分为三个部分:
数据库
该数据库包含许多XML文件,这些文件详细说明了如何执行给定的打印机驱动程序。有两个前端使用这些文件:(1)人类可读的前端生成所有“执行细节”页面上显示的信息; (2)PPD-O-Matic PPD生成器计算Adobe兼容的PPD文件,您需要配置打印队列。
PPD文件
数据库生成的PPD文件包含有关重要打印机功能,可用选项以及如何构建渲染器(通常为Ghostscript)命令行的所有信息,具体取决于用户对选项的选择。foomatic-rip读取它以了解如何执行打印作业。GUI前端读取它以构建用户可以调整选项的对话框。除了通常的东西,PPD文件包含以“* Foomatic ...”开头的各种额外行。这些包含驱动程序命令行的详细信息,选项是否接受任意数字(而不仅仅是PPD文件中列出的选项)等信息。CUPS和应用程序忽略了这些额外的行。
过滤器
过滤脚本'foomatic-rip'由CUPS调用,具有各种输入; 输入包括PPD文件名和用户选择的各种选项。foomatic-rip打开PPD,提取所有选项及其可能的设置,还提供命令行以使用适当的驱动程序执行Ghostscript。它解析PostScript打印文件以进行选项设置。这些选项设置可能已被CUPS或应用程序填入; foomatic-rip本身还会在打印数据流中插入其他PostScript代码,以便根据需要设置选项。它还将标准CUPS选项类型按摩为数据库使用的更通用的打印机/驱动程序特定格式。
6.8 使用CUPS打印的基础知识
https://wiki.linuxfoundation.org/openprinting/database/cupsprintingtutorial
本教程介绍了使用CUPS打印的基础知识,包括
设置本地(USB,并行)PostScript和非PostScript打印机
多功能设备
为以太网连接的打印机分配IP地址
在网络中共享打印机
高可用性 - 冗余CUPS队列和服务器
使用Samba将打印机共享到Windows机器
和更多 …
6.9 用户角度的教程
http://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorial-handout-foomatic-user.html
(II。)从用户的角度看起来很有用:
在Foomatic的帮助下安装打印机
设置打印机的一个大问题是使假脱机程序调用正确的过滤器并使用户可以控制打印机的功能。大多数GNU / Linux发行版使用自己的工具,这些工具通常不支持最新的打印机型号,也只能访问非常基本的驱动程序选项。
为了改善这种情况,Printing-HOWTO的作者Grant Taylor建立了一个数据库,用于提供有关免费软件打印机驱动程序以及打印机以及如何使用免费软件支持它们的信息。这个名为Foomatic的数据库位于linuxprinting.org上而我目前正在维护它。现在,数据库列出了所有免费软件打印机驱动程序及其命令行和所有可用选项以及所有打印机,我们可以获取有关它们支持程度的信息。数据库是用XML实现的,Perl脚本可以自动创建配置文件,甚至可以为所有已知的免费缓冲器完成打印机队列:LPD,LPRng,GNUlpr,CUPS,PPR,PDQ和无后台打印。通过这些队列,用户可以访问所使用的打印机驱动程序的全部功能,并获得与假脱机程序无关的用户界面,以便他可以以相同的方式操作所有的假脱机程序。
http://www.linuxprinting.org/
http://www.openprinting.org/download/
http://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.Foomatic-User.pdf
https://wiki.linuxfoundation.org/openprinting/start
https://wiki.linuxfoundation.org/openprinting/database/foomatic
https://wiki.linuxfoundation.org/openprinting/database/aboutfoomatic
Foomatic是一个数据库驱动的系统,用于在Unix下将免费软件打印机驱动程序与常见的解析器集成。
它支持CUPS,LPRng,LPD,GNUlpr,Solaris LP,PPR,PDQ,CPS,以及我们已知的每个免费软件打印机驱动程序以及已知使用这些驱动程序的每个打印机的直接打印。
https://en.opensuse.org/Concepts_printing
https://en.opensuse.org/SDB:CUPS_in_a_Nutshell
6.10 打印为PDF
跨平台的办公软件LibreOffice自带PDF输出,所以大部分需有直接在这里就能实现了。
以下是CUPS的cups-pdf的软件包,可以直接输出为PDF文件。
https://wiki.archlinux.org/index.php/CUPS
If you intend to "print" into a PDF document, also install the cups-pdf package. By default, pdf files are stored in /var/spool/cups-pdf/username/. The location can be changed in /etc/cups/cups-pdf.conf.
$ sudo pacman -S cups-pdf
http://distro.ibiblio.org/smeserver/contribs/rvandenaker/testing/smeserver-cups/documentation/howtos/cups-pdf-printer.html
使用CUPS打印服务的更多相关文章
- 【不积跬步,无以致千里】关闭631端口cups打印服务和8009端口ajp
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- REDHAT一总复习1 cups 打印服务配置
停止cups服务 $ sudo systemctl stop cups $ sudo systemctl status cups 配置cups服务,使其不在系统启动时启动 $ sudo systemc ...
- centos7下cups + samba共打印服务的教程
centos7系统我们用到的不多但是这款系统比centos6功能要强大了不少,下文来介绍一篇centos7下cups + samba,共打印服务的例子,具体如下所示. 这个算是rhce课程的篇外篇 ...
- centos7下cups + samba共打印服务
centos7下cups + samba共打印服务 2015年8月21日admin发表评论阅读评论 这个算是rhce课程的篇外篇,Samba除了提供文件共享外,也可以像windows下的共享一样提 ...
- fedora23的打印服务
cups: common unix printing system. 是通用的打印服务. whatever 不管什么; whichever: 不管哪个 可以使用 http://localhost:63 ...
- 批处理定时重启print打印服务,解决打印机异常队列堆积
公司有台打印机,由于是公用的,经常出现一个较大的文档卡在队列里面,导致队列后面的打印无法被执行,人工去清理岂不是太费事了,下面分享一个批处理文件 @echo off echo 计划任务开始执行 3 e ...
- 提示“Web打印服务CLodop未安装启动”的各种原因和解决方法
旧版提示:"CLodop云打印服务(localhost本地)未安装启动!"新版提示:"Web打印服务CLodop未安装启动,点击这里下载执行安装(若此前已安装过,可点这里 ...
- C-Lodop打印服务没启动怎么办
C-Lodop作为服务,解决了高版本火狐谷歌不支持np插件问题,支持跳出来浏览器的限制,支持所有浏览器,默认是只需安装一次,以后每次开机自启动,但是如果禁止了开机启动项等问题,会造成之后突然出现没启动 ...
- 开启打印服务Print Spooler
windows系统需要开启Print Spooler才能进行打印,如果不开启,可能造成很多现象和原因,比如windows打印机队列的打印机全部消失,用Lodop打印的时候提示"Printer ...
随机推荐
- Oracle数据库TNS错误解决方法
ORA-12154: TNS:could not resolve the connect identifier specified ,即无法解析指定的连接 标识符.这说明缺少了一个环境变量,TNS_A ...
- css引用与html语义化
一.CSS引用1. 使用外部样式表: CSS代码在一个独立的文件中,HTML通过link元素引入到页面 格式:link + tab键<link rel="stylesheet&q ...
- ALV屏幕捕捉回车及下拉框事件&ALV弹出框回车及下拉框事件
示例展示: 屏幕依据输入的物料编码或下拉框物料编码拍回车自动带出物料描述: 点击弹出框,输入物料编码拍回车带出物料描述,点击确认,更新ALV: 1.创建屏幕9000,用于处理ALV弹出框: 2.针对屏 ...
- thinkPHP验证码不显示问题
使用验证码的时候,不显示图片时,要清理下输出缓存:ob_clean_end();
- 二、redis持久化
一.redis持久化 1 RDB持久化(定redis的数据定时dump到磁盘上的RDB持久化)RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据 ...
- MySQL数据库需进行修改密码问题解决方案
两种方式可供大家进行参考: 第一种: 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码pass123: 首先在DOS下进入目录mysql\bin,然 ...
- 软件测试:第二次作业(JUnit单元测试方法)
一.JUnit是什么? JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework).JUnit测试是程序员测试, ...
- selenium中的alter弹框
from selenium import webdriverimport timedriver=webdriver.Chrome()driver.get('http://ui.imdsx.cn/uit ...
- 最近学习的 Node.js 数组_函数
数组的排序,用到了箭头函数 let arr=[, , , , , , ]; /* arr.sort(function (n1, n2){ return n1-n2; }); */ // 等价于上面的写 ...
- mysql 的存储过程 循环 变更某个表里的字段
/*Navicat MySQL Data Transfer Source Server : localhost_3306Source Server Version : 50505Source Host ...