打印机的第二个id会被产生在 /etc/printcap: 这个新id将使用一个不同的输入过滤器, 这个过滤器将调用Ghostscript来执行PostScript文件的实际打印。 因此, 文本文件将被打印到 lp 打印机,而PostScript文件将被打印到 ps 打印机: 两者全使用同一台物理打印机,但是有不同的打印过滤器。
不同的配置也可以实现同样的结果。 例如, 某一项只能用一个过滤器。因此, 这个过滤器应该有能力自动确认被打印文档的格式, 并使用适当的打印程序。 这个方法是很简单,但是要求更复杂的过滤器; 如果你喜欢它你应该考虑从package collection安装magicfilter 程序: 它可以自动做这个工作和许多其它。
对我们的方法来说, 新的 /etc/printcap 文件看起来像这样:
Example 12.3. /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:
ps|Ghostscript driver:\
:lp=/dev/lpa0:sd=/var/spool/lpd/ps:lf=/var/log/lpd-errs:\
:mx#0:sh:if=/usr/local/libexec/lpfilter-ps:
选项 mx#0 对打印PostScript文件是很重要的,因为它可以消除对输入文件的尺寸限制;PostScript documents往往非常大。 这个 if 选项指向新的过滤文件。 也有一个新的假脱机目录。
下一个步骤被用来产生新的假脱机目录和过滤程序。假脱机目录的步骤同上:
代码: 全选
# cd /var/spool/lpd
# mkdir ps
# chown daemon:daemon ps
# chmod 770 ps
Example 12.4. /usr/local/libexec/lpfilter-ps
代码: 全选
#!/bin/sh
# Treat LF as CR+LF
printf "\033&k2G" || exit 2
# Print the postscript file
/usr/pkg/bin/gs -dSAFER -dBATCH -dQUIET -dNOPAUSE -q -sDEVICE=cdj550 \
-sOutputFile=- -sPAPERSIZE=a4 - && exit 0
exit 2
总结: 系统上创建了两个不同的打印机名称, 他们指向了同一台物理打印机但是使用不同的选项、不同的过滤器以及不同的假脱机目录。文本文件和PostScript文件全可以打印。要打印PostScript文件必须在系统上安装Ghostscript软件包。