创建打印机接口脚本

如果您的打印机不能通过在 terminfo 数据库中添加一个条目来支持,或者如果 /etc/lp/model 文件中提供的 standard 或其他接口脚本不支持您的打印需求,您可以创建自己的打印机接口脚本。

要创建一个定制接口脚本,请执行下列操作:

  1. 修改 standard 接口脚本 (或 /etc/lp/model中的其他某个脚本)。 例如:
    	
    	cd /etc/lp/model
    	
    	cp standard okidatanew
    	
  2. 确保定制接口脚本设置了正确的 斯特蒂 方式 (诸如波特率或输出选项之类的终端特征)。 查找以下列行开头的段:
      ## Initialize the printer port
  3. 修改 standard 接口脚本中的代码。 它用类似于以下的一行同时设置由打印服务或用户指定的缺省模式和调整模式:
    stty mode options 0<&1

    此命令行从打印机端口接受 stty 命令的标准输入。 例如,以下 stty 命令示例将波特率设为 1200bps,并设置了一些选项模式:

    stty -parenb -parodd 1200 cs8 cread clocal ixon 0<&1
  4. 设置硬件流量控制打印机端口特性。 standard 接口脚本不设置硬件流量控制;这是根据您的计算机硬件来设置的。 standard 接口脚本的代码建议在何处设置此打印机端口特征和其他打印机端口特征。 查找以下列行开头的段:
      # Here you may want to add other port initialization code.
  5. 因为不同的打印机有不同的列数,请确保您的接口脚本的标题和尾部与您的打印机对应。 standard 接口脚本打印的标题适合 80 列的页面(除了用户标题以外,它可能较长)。 在代码中查找以以下行开头的 standard 接口脚本的部分:
      ## Print the banner page
  6. 一些应用程序在对某些打印机运行时,可能需要您关闭换页功能。 如果必须关闭分页,那么可以在以下行修改标准接口程序 (/usr/lib/lp/model/standard):
      if [ -n "${FF}" -a "no" = "${nofilebreak}" ]

    no 改为 yes 可关闭换页功能。

  7. 指示定制接口脚本将所有与用户相关的错误消息打印到标准输出或标准错误输出。 打印服务在页面上打印标准输出错误,并将标准错误邮寄给用户。
  8. 指定当打印完成时接口脚本退出,并带有告知打印作业状态的代码。 "退出代码表" 打印服务退出代码描述了打印服务如何解释退出代码。
向管理员提醒打印机故障的一种方法是以代码 129 退出。 不幸的是,如果接口脚本退出,当错误清除以后,打印服务会从头开始重新打印该打印作业。 要在不重新打印整个作业的情况下向管理员发出警告,请指定接口脚本向打印服务发送一个故障消息,但是它要等待直到故障清除。 当故障清除以后,接口脚本将继续打印该作业。 当作业打印完毕以后,接口脚本可以以零退出,就像从未发生故障一样。 另一个优点是接口脚本可以自动检测故障何时清除,这样管理员就不必重新启动打印机。

要指定将故障消息发送到打印服务,请使用 lp.tell 命令。 standard 打印机接口代码使用 LPTELL shell 变量调用 lp.tell 命令。 lp.tell 程序将它的标准输入发送到打印服务。 打印服务将该该消息作为警告转发给管理员。 如果它的标准输入为空,那么 lp.tell 不会初始化警告。 检查紧跟在 standard 接口脚本中的这些注释后面的代码,以获取如何使用 lp.tellLPTELL)程序的示例:

# Here's where we set up the $LPTELL program to capture
        # fault messages.
        #
        # Here's where we print the file.

对于特殊退出代码 129 或 lp.tell,接口脚本不需要禁用打印机本身。 您的接口脚本可以直接禁用打印机,但是这样做会覆盖故障报警机制。 只有当打印服务检测到打印机故障时才发送警告, 而特殊退出代码和 lp.tell 程序是它的主要检测工具。

如果打印服务必须随时中断文件的打印,那么它将使用信号 15 来终止接口脚本 (请参阅 signal 命令和 kill 命令以获取更多信息)。

如果接口脚本因为收到任何其他信号而停止,那么打印服务会假设以后的打印作业不受影响并继续使用打印机。 打印服务会通知提交打印作业的人,作业未成功完成。

当调用接口时,信号 SIGHUP SIGINTSIGQUISIGPIP(陷阱编号 1、2、3 和 13)被忽略。 standard 接口脚本更改它以在适当的时间捕获这些信号、解释这些信号来说明打印机有问题,并发出故障消息。