分页: 1 / 1

《NetBSD指南-12.2.配置/etc/printcap》

发表于 : 2010-03-02 15:47
leo
这一小节解释了如何配置示例打印机打印文本文件。

这个打印机必须在 /etc/printcap 文件内有一个选项; 这个选项包含了此打印机的 id (打印机的名称) 和 这台打印机的描述。这个 lp id 是ihenduo程序默认使用的。这里是一个示例选项:

Example 12.1. /etc/printcap

lp|local printer|HP DeskJet 690C:\
:lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:\
:sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter:


文件的格式和选项的细节描述在 printcap(5) 用户手册里。 请注意这里指定了一个 输入过滤器 (用 if 选项) 这个选项用来消除楼梯问题:

if=/usr/local/libexec/lpfilter
打印机驱动以及HP打印机
Example 12.1, “/etc/printcap” 为打印机使用了 lpa0 设备 (修正过的驱动) , 取代了 lpd0 (中断控制的驱动程序)。 与一些打印机使用中断通信存在一个问题, 并且HP Deskjet 690C 就是其中之一: 打印的非常慢而且一个PostScript页可能耗费几个小时。 这个问题使用 lpa 驱动解决. 这也可以通过编译一个定制内核,这个内核里去掉了lpt.

这个printcap选项也打印机指定了一个假脱机目录, 这个是必须创建的; 这个目录将会被 lpd 进程用来积存待打印的数据:

# cd /var/spool/lpd
# mkdir lp
# chown daemon:daemon lp
# chmod 770 lp
唯一遗漏的部分是 lpfilter 输入过滤器, 这是必须写的。 这个过滤器唯一需要执行的任务是配置打印机在将数据传送到打印机前避免“楼梯”问题。 需要下列的初始化字符串: “<ESC>&k2G”.

Example 12.2. /usr/local/libexec/lpfilter

#!/bin/sh
# Treat LF as CR+LF
printf "\033&k2G" && cat && exit 0
exit 2


将这个脚本保存为你在 /etc/printcap 内使用的名称后, 你需要确保它可以运行:

# chmod 755 /usr/local/libexec/lpfilter*
说明
这是可以被使用的另一个过滤器:

if=/usr/libexec/lpr/lpf:
这个过滤器比前面提供的过滤器复杂的多。它被写为加工输出的 nroff 和 处理下划线 和 套印, 扩展tab字符和将LF转换为CR + LF。 这个过滤程序的源码在 /usr/src/usr.sbin/lpr/filters/lpf.c.

一切就位后, 现在可以再一次运行lptest 命令, 现在使用 lpr 命令, 这个命令将首先发送数据到 lpd 假脱机处理程序spooler, 然后运行过滤器并将数据发送到打印机:

# lptest 70 5 | lpr -h
lpr 使用假脱机程序发送数据到打印机来打印文本; 这个 -h 选项关闭了标题页(并非真正需要, 因为在/etc/printcap 内的 sh 选项)。更熟悉System V打印系统的用户也可以使用 lp(1) 命令, 它用来替代 lpr(1)。