首页 > 代码库 > 在CUPS上实现LPD协议驱动
在CUPS上实现LPD协议驱动
用CUPS作为网络打印服务器,其他计算机作为客户端可以通过CUPS实现对打印机的管理。
客户端常用方法是通过IPP协议安装打印机驱动。。安装步骤如下:
1)在弹出的对话框中选择“添加打印机”
2)选择添加的打印机类型为“网络打印机”
3)在URL下输入地址:http://10.2.2.3:631/printers/ll,其中10.2.2.3为cups打印服务器的IP地址,631为cups服务端口,ll为添加的打印机的名称。
4)点击“下一步”,然后提供Windows下的打印机驱动即可。
以上是客户端通过IPP协议安装驱动。但是IPP协议在Windows 2000下并不能完全兼容(在某些网段上无法搜索到打印机),而且IPP协议有个缺点,就是在打印机关闭的情况下,客户端某些软件启动会搜索打印机。某些软件在调用createNewDocument函数时花费的时间很长。该函数为windows的MFC库函数,为根据文档模板中记录的运行时信息创建文档视图模型对象。根据微软公开的资料,与打印机状态没有关系,但在实际使用中,发现该函数调用底层库时,对默认打印机的状态进行查询。由于默认打印机设为网络打印机,操作系统底层会从网络中搜索该台打印机,由于该打印机状态为关机,无法及时得到它的状态,所以操作系统底层会在网段上搜索打印机,直到超时返回,此过程需要10秒钟到1分钟,视网络环境而定。
以上缺点影响了CUPS在某些系统中的应用。为解决这个问题,可以将打印协议改为LPD协议,从而避免每次使用打印机时进行实时查询。LPD协议为假脱机协议,对Windows而言,安装了LPD协议的打印机始终是出于“就绪”状态。只有在真正进行打印任务时,Windows才会将数据通过LPD协议发送到打印机,此时若打印机出于“不可使用”状态,则会返回给上层应用软件:该打印机不可用。
CUPS本身支持LPD协议。在CUPS服务器端,需要将inetd添加到系统服务中,建立/etc/inetd.conf,添加一行:printer stream tcp nowait root/arm_cups/lib/cups/daemon/cups-lpd cups-lpd。这样CUPS服务器端就支持LPD协议了。
(注意:arm_cups/etc/cups/cupsd.conf 里调试等级不能是debug2。在ipp.c中add_job函数中,一个调试信息cupsdLogMessage(CUPSD_LOG_DEBUG2,"add_job(%p[%d], %p(%s), %p(%s/%s))",
con, con->http.fd, printer, printer->name,
filetype, filetype->super,filetype->type);
会导致程序崩溃。因为filetype 为NULL。
安装步骤如下:
1. 进入控制面板----打印机和传真机,点击“添加打印机”按钮,如下:
2. 点击“下一步”,在弹出的界面上,选择“连接到此计算机的本地打印机”,点击“下一步”。
3. 在弹出的“选择打印机端口”界面上,选择“创建新端口”,端口类型为“Standard TCP/IP Port”,然后点击“下一步”。
4. 在弹出的界面上,点击“下一步”。
5. 在弹出的“添加端口”界面上,打印机名或IP地址栏输入打印机的IP地址,点击“下一步”。
6. 在弹出的“需要额外端口信息”界面上,点击“自定义----设置”;
7. 点击“下一步”,在弹出的界面上选择LPR,队列名称为“打印机名称”,将“启用了LPR字节计数”前的复选框勾上,点击确定。特别注意,本步骤非常重要。.
8 点击确定后回到前一窗口,再点击“下一步”,再点击“完成”。
9. 在弹出的界面上,点击“从磁盘安装…”。
接下来正常安装驱动文件。安装成功后,则在“打印机和传真”窗口中显示出安装的打印机。
在CUPS上实现LPD协议驱动