将信息写在纸上是一项至关重要的功能,尽管许多人试图消除它。打印有两个基本组成部分。数据必须交付给打印机,并且必须采用打印机可以理解的形式。
第十一章 打印11.1. 快速开始11.2. 打印机连接11.2.1. 总结11.3. 常用页面描述语言11.3.1. 将PostScript®转换为其他PDLs11.3.2. 总结11.4. 直接打印11.5. LPD(Line Printer Daemon)11.5.1. 初始设置11.5.2. 使用 lpr(1) 打印11.5.3. 过滤器11.5.3.1. 防止踩踏纯文本打印机11.5.3.2. PostScript®打印机上带有 print/enscript 的花式纯文本11.5.3.3. 将PostScript®打印到PCL打印机11.5.3.4. 智能过滤器11.5.4. 多个队列11.5.5. 监控打印11.5.5.1. lpq(1) 11.5.5.2. lprm(1)11.5.5.3. lpc(8)11.5.6. 共享打印机11.5.6.1. 别名11.5.6.2. 标题页11.5.7. 参考文献11.6. 其他打印系统11.6.1. CUPS(Common UNIX® Printing System)11.6.2. HPLIP11.6.3. LPRngCUPS on FreeBSD摘要1. 通用Unix打印系统(CUPS)简介2. 安装CUPS打印服务器3. 配置CUPS打印服务器4. 在CUPS打印服务器上配置打印机5. 配置CUPS客户端5.1. UNIX® 客户端5.2. Windows® 客户端6. CUPS故障排除
可以快速设置基本打印。打印机必须能够打印纯ASCII文本。要打印到其他类型的文件,请参阅【11.5.3. 过滤器】。
创建一个目录来存储打印时的文件:
xxxxxxxxxx# mkdir -p /var/spool/lpd/lp# chown daemon:daemon /var/spool/lpd/lp# chmod 770 /var/spool/lpd/lp以root身份创建/etc/printcap,并包含以下内容:
xxxxxxxxxxlp:\lp=/dev/unlpt0:\ ①sh:\mx#0:\sd=/var/spool/lpd/lp:\lf=/var/log/lpd-errs:① 此行用于连接到USB端口的打印机。
对于连接到并行或“打印机”端口的打印机,请使用:
xxxxxxxxxx:lp=/dev/lpt0:\对于直接连接到网络的打印机,请使用:
xxxxxxxxxx:lp=:rm=network-printer-name:rp=raw:\将 network-printer-name 替换为网络打印机的DNS主机名。
通过编辑 /etc/rc.conf 并添加以下行来启用LPD:
xxxxxxxxxxlpd_enable="YES"启动服务:
xxxxxxxxxx# service lpd startStarting lpd.打印测试:
xxxxxxxxxx# printf "1. This printer can print.\n2. This is the second line.\n" | lpr如果打印出的两行都不是从左边框开始,而是从“stairstep”(级差,整行逐字跳跃)开始,请参阅【11.5.3.1. 防止在纯文本打印机上出现阶梯】。
现在可以使用 lpr 打印文本文件。在命令行上给出文件名,或将输出直接导入 lpr 。
xxxxxxxxxx% lpr textfile.txt% ls -lh | lpr打印机以各种方式连接到计算机系统。小型台式打印机通常直接连接到计算机的USB端口。较旧的打印机连接到并行(parallel)或“打印机”端口。一些打印机直接连接到网络,使多台计算机可以轻松共享它们。少数打印机使用罕见的串行端口(serial port)连接。
FreeBSD可以与所有这些类型的打印机通信。
USB
USB打印机可以连接到计算机上任何可用的USB端口。
当FreeBSD检测到USB打印机时,会创建两个设备条目:/dev/ulpt0 和 /dev/unlpt0。发送到任一设备的数据都将中继到打印机。每次打印作业后,ulpt0 都会重置USB端口。重置端口可能会导致某些打印机出现问题,因此通常会使用 unlpt0 设备。unlpt0 根本不会重置USB端口。
Parallel (IEEE-1284)
并行端口设备是 /dev/lpt0。无论是否连接打印机,此设备都会显示,它不会被自动检测到。
供应商在很大程度上已经放弃了这些“传统”端口,许多计算机不再拥有它们。适配器可用于将并行打印机连接到USB端口。有了这样的适配器,打印机就可以被视为真正的USB打印机。称为打印服务器的设备也可用于将并行打印机直接连接到网络。
Serial (RS-232)
串行端口是另一种传统端口,除了某些特定应用外,很少用于打印机。电缆、连接器和所需的接线差异很大。
对于主板内置的串行端口,串行设备名称为 /dev/cuau0 或 /dev/cuau1 。也可以使用串行USB适配器,这些适配器将显示为 /dev/cuaU0 。
必须知道几个通信参数才能与串行打印机通信。最重要的是波特率(baud rate)或BPS(Bits Per Second)和奇偶校验(parity)。值各不相同,但典型的串行打印机使用9600的波特率,没有奇偶校验。
网络
网络打印机直接连接到本地计算机网络。
必须知道打印机的DNS主机名。如果DHCP为打印机分配了动态地址,则应动态更新DNS,以便主机名始终具有正确的IP地址。网络打印机通常被赋予静态IP地址以避免此问题。
大多数网络打印机都理解使用LPD协议发送的打印作业。还可以指定打印队列名称。某些打印机根据使用的队列处理数据的方式不同。例如,raw队列原封不动地打印数据,而文本队列则将回车符添加为纯文本。
许多网络打印机还可以打印直接发送到端口9100的数据。
有线网络连接通常最容易设置,打印速度也最快。为了直接连接到计算机,USB是速度和简单性的首选。并行连接可以工作,但对电缆长度和速度有限制。串行连接更难配置。电缆布线因型号而异,波特率和奇偶校验位等通信参数必须增加复杂性。幸运的是,串行打印机很少见。
发送到打印机的数据必须使用打印机可以理解的语言。这些语言被称为页面描述语言(Page Description Languages),简称PDLs。
ASCII
纯ASCII文本是将数据发送到打印机的最简单方法。字符与要打印的内容一一对应:数据中的A在页面上打印A。可用的格式很少。无法选择字体或比例间距。纯ASCII的强制简单性意味着文本可以直接从计算机打印,几乎不需要编码或翻译。打印输出与发送的内容直接对应。
一些廉价的打印机无法打印纯ASCII文本。这使得它们更难设置,但通常仍然是可能的。
PostScript®
PostScript®几乎与ASCII相反。PostScript®程序不是简单的文本,而是绘制最终文档的一组指令。可以使用不同的字体和图形。
然而,这种力量是有代价的。必须编写绘制页面的程序。通常这个程序是由应用软件生成的,因此用户看不到这个过程。
廉价的打印机有时会忽略PostScript®兼容性作为节省成本的措施。
PCL(Printer Command Language,打印机命令语言)
PCL是ASCII的扩展,为格式化、字体选择和打印图形添加了转义序列。许多打印机提供PCL5支持。有些支持较新的PCL6或PCLXL。这些较新版本是PCL5的超集,可以提供更快的打印速度。
基于主机
制造商可以通过提供简单的处理器和很少的内存来降低打印机的成本。这些打印机无法打印纯文本。相反,文本和图形的位图由主机上的驱动程序绘制,然后发送到打印机。这些被称为基于主机(host-based)的打印机。
驱动程序和基于主机的打印机之间的通信通常是通过专有或未记录的协议进行的,这使得它们只能在最常见的操作系统上运行。
Ports Collection和FreeBSD实用程序中的许多应用程序都会生成PostScript®输出。此表显示了可用于将其转换为其他常见PDL的实用程序:
表23. 输出PDLs
| 输出PDL | 产生于 | 备注 |
|---|---|---|
| PCL 或 PCL5 | print/ghostscript9-base | -sDEVICE=ljet4 用于单色-sDVICE=cljet5 用于彩色 |
| PCLXL 或 PCL6 | print/ghostscript9-base | -sDEVICE=pxlmono 用于单色-sDEVICE=pxlcolory 用于彩色 |
| ESC/P2 | print/ghostscript9-base | -sDEVICE=uniprint |
| XQX | print/foo2zjs |
为了实现最简单的打印,请选择支持PostScript®的打印机。支持PCL的打印机是下一个首选。使用 print/ghostscript9-base ,这些打印机可以像本机理解PostScript®一样使用。直接支持PostScript®或PCL的打印机几乎总是支持直接打印纯ASCII文本文件。
像典型喷墨打印机这样的行式打印机(line-base printers)通常不支持PostScript®或PCL。它们通常可以打印纯ASCII文本文件。print/grescript9-base 支持其中一些打印机使用的PDL。然而,由于需要传输和打印大量数据,在这些打印机上打印整个基于图形的页面通常非常缓慢。
基于主机的打印机通常更难设置。由于专有的PDL,有些根本无法使用。尽可能避免使用这些打印机。各种型号打印机使用的特定PDL可以在以下网址找到:
http://www.openprinting.org/printers
对于偶尔打印,文件可以直接发送到打印机设备,无需任何设置。例如,可以将名为 sample.txt 的文件发送到USB打印机:
xxxxxxxxxx# cp sample.txt /dev/unlpt0直接打印到网络打印机取决于打印机的能力,但大多数打印机都接受端口9100上的打印作业, nc(1) 可以与它们一起使用。要将同一文件打印到DNS主机名为 netlaser 的打印机上:
xxxxxxxxxx# nc netlaser 9100 < sample.txtLine Printer Daemon,行式打印机后台程序
在后台打印文件称为后台打印(spooling)。后台处理程序(spooler)允许用户继续执行计算机上的其他程序,而无需等待打印机缓慢完成打印作业。
FreeBSD包含一个名为 lpd(8) 的后台处理程序。打印作业使用 lpr(1) 提交。
创建用于存储打印作业的目录,设置所有权,并设置权限以防止其他用户查看这些文件的内容:
xxxxxxxxxx# mkdir -p /var/spool/lpd/lp# chown daemon:daemon /var/spool/lpd/lp# chmod 770 /var/spool/lpd/lp打印机在 /etc/printcap 中定义。每台打印机的条目包括名称、连接端口和各种其他设置等详细信息。使用以下内容创建 /etc/printcap :
xxxxxxxxxxlp:\ ① :lp=/dev/unlpt0:\ ② :sh:\ ③ :mx#0:\ ④ :sd=/var/spool/lpd/lp:\ ⑤ :lf=/var/log/lpd-errs: ⑥lpr(1) 将打印作业发送到 lp 打印机,除非使用 -P 指定了另一台打印机,因此默认打印机应命名为 lp 。创建 /etc/printcap 后,使用 chkprintcap(8) 测试它是否有错误:
xxxxxxxxxx# chkprintcap在继续之前,请先解决所有报告的问题。
在 /etc/rc.conf 中启用 lpd(8) :
xxxxxxxxxxlpd_enable="YES"启动服务:
xxxxxxxxxx# service lpd startlpr(1) 打印文档通过 lpr 发送到打印机。要打印的文件可以在命令行上命名,也可以通过管道传输到 lpr 。这两个命令是等效的,将doc.txt的内容发送到默认打印机:
xxxxxxxxxx% lpr doc.txt% cat doc.txt | lpr可以使用 -P 选择打印机。要打印到称为激光的打印机:
xxxxxxxxxx% lpr -Plaser doc.txt到目前为止,所示的示例已将文本文件的内容直接发送到打印机。只要打印机理解这些文件的内容,输出就会正确打印。
有些打印机无法打印纯文本,输入文件甚至可能不是纯文本。
过滤器(filter)允许翻译或处理文件。典型的用途是将一种类型的输入(如纯文本)转换为打印机可以理解的形式,如PostScript®或PCL。过滤器还可以用于提供其他功能,例如添加页码或突出显示源代码以使其更易于阅读。
这里讨论的过滤器是输入过滤器或文本过滤器。这些过滤器将传入文件转换为不同的形式。在创建文件之前,使用 su(1) 成为 root 。
过滤器在 /etc/printcap 中用 if= 标识符指定。要使用 /usr/local/libexec/lf2crlf 作为过滤器,请按如下方式修改 /etc/printcap :
xxxxxxxxxxlp:\ :lp=/dev/unlpt0:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/lp:\ :if=/usr/local/libexec/lf2crlf:\ ① :lf=/var/log/lpd-errs:if= 标识将用于传入文本的输入过滤器。xxxxxxxxxxprintcap 条目的行末尾的【反斜杠行连续字符】表明,打印机的条目实际上只是一个由冒号字符分隔的长行。前面的一个例子可以重写为一行可读性较差的行:lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs:典型的FreeBSD文本文件在每行末尾只包含一个换行符。这些行将在标准打印机上“阶梯式”打印:
xxxxxxxxxxA printed file looks like the steps of a staircase scattered by the wind过滤器可以将换行符转换为回车符和换行符。滑架返回使打印机在每行后返回左侧。使用以下内容创建 /usr/local/libexec/lf2crlf :
xxxxxxxxxxCR=$'\r'/usr/bin/sed -e "s/$/${CR}/g"设置权限并使其可执行:
xxxxxxxxxx# chmod 555 /usr/local/libexec/lf2crlf修改 /etc/printcap 以使用新过滤器:
xxxxxxxxxx:if=/usr/local/libexec/lf2crlf:\通过打印相同的纯文本文件来测试过滤器。回车(carriage returns)将导致每行从页面左侧开始。
print/enscript 的花式纯文本GNUEnscript将纯文本文件转换为格式良好的PostScript®,以便在PostScript®打印机上打印。它添加页码,换行,并提供许多其他功能,使打印的文本文件更容易阅读。根据当地纸张尺寸,从Ports Collection安装 print/enscript-letter 或 print/enscript-a4 。
使用以下内容创建 /usr/local/libexec/enscript :
xxxxxxxxxx/usr/local/bin/enscript -o -设置权限并使其可执行:
xxxxxxxxxx# chmod 555 /usr/local/libexec/enscript修改 /etc/printcap 以使用新过滤器:
xxxxxxxxxx:if=/usr/local/libexec/enscript:\通过打印纯文本文件来测试过滤器。
许多程序生成PostScript®文档。然而,廉价的打印机通常只能理解纯文本或PCL。此过滤器在将PostScript®文件发送到打印机之前将其转换为PCL。
从Ports Collection安装Ghostscript PostScript®解释器, print/gestscript9-base 。
使用以下内容创建 /usr/local/libexec/ps2pcl :
xxxxxxxxxx/usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- -设置权限并使其可执行:
xxxxxxxxxx# chmod 555 /usr/local/libexec/ps2pcl发送到此脚本的PostScript®输入在发送到打印机之前将被渲染并转换为PCL。
修改 /etc/printcap 以使用此新的输入过滤器:
xxxxxxxxxx:if=/usr/local/libexec/ps2pcl:\通过向过滤器发送一个小型PostScript®程序来测试过滤器:
xxxxxxxxxx% printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \72 432 moveto (PostScript printing successful.) show showpage \004" | lpr检测输入类型并自动将其转换为打印机正确格式的过滤器非常方便。PostScript®文件的前两个字符通常是 %! 。过滤器可以检测这两个字符。PostScript®文件可以原封不动地发送到PostScript®打印机。如前所示,文本文件可以使用Enscript转换为PostScript®。使用以下内容创建 /usr/local/libexec/psif :
x## psif - Print PostScript or plain text on a PostScript printer#IFS="" read -r first_linefirst_two_chars=`expr "$first_line" : '\(..\)'`case "$first_two_chars" in%!) # %! : PostScript job, print it. echo "$first_line" && cat && exit 0 exit 2 ;;*) # otherwise, format with enscript ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - && exit 0 exit 2 ;;esac设置权限并使其可执行:
xxxxxxxxxx# chmod 555 /usr/local/libexec/psif修改 /etc/printcap 以使用此新的输入过滤器:
xxxxxxxxxx:if=/usr/local/libexec/psif:\通过打印PostScript®和纯文本文件来测试过滤器。
/etc/printcap 中的条目实际上是队列的定义。单个打印机可以有多个队列。当与过滤器结合使用时,多个队列为用户提供了对其作业打印方式的更多控制。
例如,考虑办公室中的联网PostScript®激光打印机。大多数用户希望打印纯文本,但少数高级用户希望能够直接打印PostScript®文件。可以在 /etc/printcap 中为同一台打印机创建两个条目:
xxxxxxxxxxtextprinter:\ :lp=9100@officelaser:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/textprinter:\ :if=/usr/local/libexec/enscript:\ :lf=/var/log/lpd-errs:psprinter:\ :lp=9100@officelaser:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/psprinter:\ :lf=/var/log/lpd-errs:发送到 textprinter 的文档将由前面示例中显示的 /usr/local/libexec/enscript 过滤器进行格式化。高级用户可以在 psprinter 上打印PostScript®文件,而无需进行过滤。
这种多队列技术可用于提供对各种打印机功能的直接访问。带有双面打印机的打印机可以使用两个队列,一个用于普通单面打印,另一个带有过滤器,该过滤器发送命令序列以启用双面打印,然后发送传入文件。
有几个实用程序可用于监视打印作业以及检查和控制打印机操作。
lpq(1) lpq(1) 显示用户打印作业的状态。不显示其他用户的打印作业。
在单个打印机上显示当前用户的待处理作业:
xxxxxxxxxx% lpq -PlpRank Owner Job Files Total Size1st jsmith 0 (standard input) 12792 bytes在所有打印机上显示当前用户的待处理作业:
xxxxxxxxxx% lpq -alp:Rank Owner Job Files Total Size1st jsmith 1 (standard input) 27320 byteslaser:Rank Owner Job Files Total Size1st jsmith 287 (standard input) 22443 byteslprm(1)lprm(1) 用于删除打印作业。普通用户只允许删除自己的作业。root可以删除任何或所有作业。
从打印机中删除所有挂起的作业:
xxxxxxxxxx# lprm -Plp -dfA002smithy dequeuedcfA002smithy dequeueddfA003smithy dequeuedcfA003smithy dequeueddfA004smithy dequeuedcfA004smithy dequeued从打印机中删除单个作业。 lpq(1) 用于查找作业编号。
xxxxxxxxxx% lpqRank Owner Job Files Total Size1st jsmith 5 (standard input) 12188 bytes% lprm -Plp 5dfA005smithy dequeuedcfA005smithy dequeuedlpc(8)lpc(8) 用于检查和修改打印机状态。 lpc 后面是一个命令和一个可选的打印机名称。可以使用 all 代替特定的打印机名称,该命令将应用于所有打印机。普通用户可以使用 lpc(8) 查看状态。只有root用户可以使用修改打印机状态的命令。
显示所有打印机的状态:
xxxxxxxxxx% lpc status alllp: queuing is enabled printing is enabled 1 entry in spool area printer idlelaser: queuing is enabled printing is enabled 1 entry in spool area waiting for laser to come up阻止打印机接受新作业,然后重新开始接受新作业:
xxxxxxxxxx# lpc disable lplp: queuing disabled# lpc enable lplp: queuing enabled停止打印,但继续接受新作业。然后重新开始打印:
xxxxxxxxxx# lpc stop lplp: printing disabled# lpc start lplp: printing enabled daemon started出现某些错误情况后重新启动打印机:
xxxxxxxxxx# lpc restart lplp: no daemon to abort printing enabled daemon restarted关闭打印队列并禁用打印,并显示一条消息向用户解释问题:
xxxxxxxxxx# lpc down lp Repair parts will arrive on Mondaylp: printer and queuing disabled status message is now: Repair parts will arrive on Monday重新启用已关闭的打印机:
xxxxxxxxxx# lpc up lplp: printing enabled daemon started有关更多命令和选项,请参阅 lpc(8) 。
打印机通常由企业和学校的多个用户共享。提供了其他功能,使共享打印机更加方便。
打印机名称设置在 /etc/printcap 中条目的第一行。可以在该名称后添加其他名称或别名。别名与名称和彼此之间用竖线分隔:
xxxxxxxxxxlp|repairsprinter|salesprinter:\别名可以用来代替打印机名称。例如,销售部门的用户使用以下命令打印到他们的打印机
xxxxxxxxxx% lpr -Psalesprinter sales-report.txt维修部门的用户使用
xxxxxxxxxx% lpr -Prepairsprinter repairs-report.txt所有文件都在那台打印机上打印。当销售部门发展到需要自己的打印机时,可以从共享打印机条目中删除别名,并将其用作新打印机的名称。两个部门的用户继续使用相同的命令,但销售文档将发送到新打印机。
用户可能很难在繁忙的共享打印机生成的页面堆栈中找到他们的文档。创建标题页是为了解决此问题。在每次打印作业之前,都会打印一个包含用户名和文档名的标题页。这些页面有时也被称为横幅或分隔页。
启用页眉页面取决于打印机是通过USB、并行还是串行电缆直接连接到计算机,还是通过网络远程连接。
通过从 /etc/printcap 中的条目中删除 :sh:\(抑制页眉)行,可以启用直接连接打印机上的页眉页。这些标题页仅对新行使用换行符。一些打印机将需要 /usr/share/example/printing/hpif 过滤器来防止打印文本。过滤器将PCL打印机配置为在收到换行时打印回车和换行。
网络打印机的标题页必须在打印机本身上配置。/etc/printcap 中的页眉条目将被忽略。设置通常可以从打印机前面板或可通过web浏览器访问的配置网页中获得。
示例文件:/usr/share/Example/printing/ 。
4.3BSD行式打印机后台程序手册,/usr/share/doc/smm/07.lpd/paper.ascii.gz 。
手册页:printcap(5) ,lpd(8),lpr(1) ,lpc(8) 、lprm(1) 、lpq(1) 。
除了内置的 lpd(8) 之外,还有其他几种打印系统可供选择。这些系统支持其他协议或附加功能。
CUPS是一种流行的打印系统,可在许多操作系统上使用。在FreeBSD上使用CUPS有一篇单独的文章:CUPS。
惠普提供了一种打印系统,支持他们的许多喷墨和激光打印机。port为 print/hplip 。主网页位于 https://developers.hp.com/hp-linux-imaging-andprinting 。该port处理FreeBSD上的所有安装细节。配置信息显示在 https://developers.hp.com/hp-linux-imaging-and-printing/install 。
LPRng是作为 lpd(8) 的增强替代品开发的。port为 sysutils/LPRng 。有关详细信息和文档,请参阅 https://lprng.sourceforge.net/ 。
/etc/printcap文件内容如下:
xxxxxxxxxx//www.apsfilter.org///docs.freebsd.org/en/books/handbook/printing/一篇关于在FreeBSD上配置CUPS的文章。
CUPS是通用UNIX打印系统(Common UNIX Printing System),为基于UNIX®的操作系统提供了一个可移植的打印层。它由Easy Software Products开发,旨在为所有UNIX®供应商和用户推广标准打印解决方案。
CUPS使用互联网打印协议(Internet Printing Protocol,IPP)作为管理打印作业和队列的基础。行式打印机守护程序(Line Printer Daemon,LPD)、服务器消息块(Server Message Block,SMB)和AppSocket(又名JetDirect)协议也支持减少的功能。CUPS添加了网络打印机浏览和基于PostScript打印机描述(PostScript Printer Description,PPD)的打印选项,以支持UNIX®下的真实打印。因此,CUPS非常适合在FreeBSD、Linux®、Mac OS®X或Windows®的混合环境中共享和访问打印机。
CUPS的主要站点是http://www.cups.org/.
要使用预编译的二进制文件安装CUPS,请从根终端发出以下命令:
xxxxxxxxxx# pkg install cups其他可选但推荐的软件包是 print/guteprint 和 print/hplip ,这两个软件包都为各种打印机添加了驱动程序和实用程序。安装后,CUPS配置文件可以在 /usr/local/etc/cups 目录中找到。
安装后,必须编辑一些文件来配置CUPS服务器。首先,根据具体情况创建或修改 /etc/devfs.rules 文件,并添加以下信息,以设置所有潜在打印机设备的适当权限,并将打印机与 cups 用户组相关联:
xxxxxxxxxx[system=10]add path 'unlpt*' mode 0660 group cupsadd path 'ulpt*' mode 0660 group cupsadd path 'lpt*' mode 0660 group cupsadd path 'usb/X.Y.Z' mode 0660 group cupsxxxxxxxxxx请注意,X、Y和Z应替换为与打印机对应的/dev/usb目录中列出的目标USB设备。要找到正确的设备,请检查dmesg(8)的输出,其中为ugenX.Y列出了打印机设备,它是/dev/usb中USB设备的符号链接。接下来,在/etc/rc.conf中添加两行,如下所示:
xxxxxxxxxxcupsd_enable="YES"devfs_system_ruleset="system"这两个条目将在引导时启动CUPS打印服务器,并分别调用上面创建的本地devfs规则。
要在某些Microsoft®Windows®客户端下启用CUPS打印,应在 /usr/local/etc/cups/mime.types 和 /usr/local/ec/cups/mime.convs 中取消注释以下行:
xxxxxxxxxxapplication/octet-stream一旦进行了这些更改,devfs(8) 和CUPS系统都必须重新启动,可以通过重新启动计算机或在根终端中发出以下两个命令:
xxxxxxxxxx# service devfs restart# service cupsd restart安装和配置CUPS系统后,管理员可以开始配置连接到CUPS打印服务器的本地打印机。这部分过程与在其他基于UNIX®的操作系统(如Linux®发行版)上配置CUPS打印机非常相似,如果不是完全相同的话。
管理CUPS服务器的主要方式是通过基于web的界面,可以通过启动web浏览器并在浏览器的URL栏中输入 http://localhost:631 【需要修改 /usr/local/etc/cups/supsd.conf 】。如果CUPS服务器位于网络上的另一台机器上,请将服务器的本地IP地址替换掉 localhost 。CUPS web界面相当直观,因为其中有管理打印机和打印作业、授权用户等部分。此外,在管理屏幕的右侧有几个复选框,可以轻松访问通常更改的设置,例如是否共享连接到系统的已发布打印机,是否允许远程管理CUPS服务器,以及是否允许用户对打印机和打印作业进行额外访问和特权。
添加打印机通常很容易,只需在CUPS web界面的管理屏幕上单击“Add Printer”,或在管理屏幕上也单击“New Printers Found”按钮之一即可。当出现“Device”下拉框时,只需选择所需的本地连接打印 机,然后继续整个过程。如果如上所述添加了 print/gutenprint-cups 或 print/hplip ports或包,则后续屏幕中将提供额外的打印驱动程序,这些驱动程序可能会提供更多的稳定性或功能。
配置CUPS服务器并将打印机添加并发布到网络后,下一步是配置客户端或将访问CUPS服务器的机器。如果一个人有一台同时充当服务器和客户端的台式机,那么可能不需要这些信息中的大部分。
CUPS还需要安装在UNIX®客户端上。一旦CUPS安装在客户端上,跨网络共享的CUPS打印机通常会被GNOME或KDE等各种桌面环境的打印机管理器自动发现。或者,可以在以下位置访问客户端计算机上的本地CUPS接口 http://localhost:631 然后单击“管理”部分中的“Add Printer”。当出现“Device”下拉框时,如果自动发现,只需选择联网的CUPS打印机,或者选择 ipp 或 http 并输入联网CUPS打印机的IPP或HTTP URI,通常使用以下两种语法之一:
xxxxxxxxxxipp://server-name-or-ip/printers/printernamexxxxxxxxxxhttp://server-name-or-ip:631/printers/printername如果CUPS客户端难以在网络上找到其他共享的CUPS打印机,有时添加或创建一个文件 /usr/local/etc/cups/client.conf 并添加一个条目会有所帮助,如下所示:
xxxxxxxxxxServerName server-ip在这种情况下, server-ip 将被网络上CUPS服务器的本地IP地址替换。
XP之前的Windows®版本无法与基于IPP的打印机进行本地网络连接。但是,Windows®XP和更高版本确实具有此功能。因此,在这些版本的Windows®中添加CUPS打印机非常容易。通常,Windows®管理员将运行Windows®添加打印机向导,选择网络打印机,然后按以下语法输入URI:
xxxxxxxxxxhttp://server-name-or-ip:631/printers/printername如果有一个旧版本的Windows®没有原生IPP打印支持,那么连接到CUPS打印机的一般方法是同时使用 net/samba416 和CUPS,这是本章范围之外的主题。
CUPS的困难通常在于权限。首先,仔细检查上述 devfs(8) 权限。接下来,检查在文件系统中创建的设备的实际权限。确保您的用户是 cups 组的成员也是有帮助的。如果CUPS web界面“管理”部分中的权限复选框似乎不起作用,另一种修复方法可能是手动备份位于 /usr/local/etc/cups/cupsd.conf 的主CUPS配置文件,编辑各种配置选项,并尝试不同的配置选项组合。下面列出了一个要测试的示例 /usr/local/etc/cups/cupsd.conf 。请注意,此示例 cupsd.conf 牺牲了安全性以便于配置;管理员成功连接到CUPS服务器并配置客户端后,建议重新访问此配置文件并开始锁定访问。
xxxxxxxxxxLogLevel infoSystemGroup wheelPort 631Listen /var/run/cups.sockBrowsing OnBrowseOrder allow,denyBrowseAllow 192.168.1.* # change to local LAN settingsBrowseAddress 192.168.1.* # change to local LAN settingsDefaultAuthType BasicDefaultEncryption Never # comment this line to allow encryption<Location /> Order allow,deny Allow 192.168.1.* # change to local LAN settings</Location><Location /admin> Order allow,deny Allow 192.168.1.* # change to local LAN settings</Location><Location /admin/conf> AuthType Basic Require user @SYSTEM Order allow,deny Allow 192.168.1.* # change to local LAN settings</Location><Policy default> <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \CUPS-Move-Job> Require user @OWNER @SYSTEM Order deny,allow </Limit> <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default> AuthType Basic Require user @SYSTEM Order deny,allow </Limit> <Limit Cancel-Job CUPS-Authenticate-Job> Require user @OWNER @SYSTEM Order deny,allow </Limit> <Limit All> Order deny,allow </Limit></Policy>最后修改日期:2024年11月11日作者:Ed Maste