基于开源软件的嵌入式网络打印服务器
时间:11-05
来源:作者:单片机与嵌入式系统 中国科学院计算技术研究所 江涛
点击:
2.2 CGI程序的编写
嵌入式网络设备通常都提供web管理方式,用以修改配置等。以修改IP地址为例,需要修改源码目录下的cgi-bin子目录下的admin.c文件,参照do_am_printer()函数新增函数do_modify_ip,此函数的功能为读取IP地址所在的配置文件,将IP地址、子网掩码、默认网关等显示在页面文本框中,允许修改,提交修改时该函数将新的参数覆盖原配置文件中旧的参数。为实现这一功能,主要用到了CUPS提供的文件操作函数cupsFileGets、cupsFi-leOpen、cupsFilePrintf,和有关CGI变量的读写函数cgiGetVariable、cgiSetVariable和界面的显示函数cgiStartHTM如IP地址L(title)、cgiCopyTemplateLang("error_ip.tmpl")、cgiEndHTML()。有关文件的读写操作,可参照CUPS目录下的testfile.c文件。
2.3 界面和提示语言汉化
CUPS支持多国语言版本,如果汉化,需要对界面标识、提示、按钮等全面进行汉化,工作量较大,需要修改doc/index.html,需要把templates语言版本挪到最外层,需要在loeale/cups_zh.po修改或增加新的中英文对照信息。更详细的信息可参考CUPS运行后通过浏览器访问http://localhost:631/help下的Translating and Custom-izing CUPS文档。
2.4 OUPS配置与调试
编辑/etc/cups/cupsd.conf在Location选项中添加容许访问的网段。为简单起见,在Order allow,deny后直接输入Allow all即可。
编辑/etc/cups/mime.convs,找到application/octet-stream application/vnd.cups-raw 0-行,将其注释掉,否则pdf、doc等文件格式将不被支持,提示"Print file wasnot accepted(Unsupported format 'application/octet-stream'!)"错误。另外,要将防火墙中对631端口的访问控制去掉,否则将提示打印服务器忙。在CUPS调试过程中,如果将cupsd.conf中的loglev-el info改成。loglevel debug,可以在var/log/cups/error_log中看到更多的输出信息,极大地方便了调试,也可借助网络抓包程序辅助调试。在确认打印机能够工作之前,暂不要通过网络方式驱动打印机,可用命令行的方式添加、使能并测试打印机是否工作正常。由于没有成熟的文档,过程比较艰辛。
CUPS启动后,可通过浏览器方式管理打印机。连接好打印机,进入web管理界面,找到"Add printer"。选择正确的驱动程序,如果所连接打印机的驱动程序不存在,则必须手工添加驱动程序。添加完成后,可以打印测试页看看打印机是否可以正常工作。
3 客户端连接
3.1 Windows客户端
在添加打印机时,选择添加的打印机类型为"网络打印机",在URL中输入http://printer_server_ip:631/printers/printer_name,其中printer_server_ip为CUPS打印服务器的IP地址,631为CUPS服务端口,printer_name为已添加的打印机的名称。如果提示URL错误,请修正后再试,最后提供Windows下相应的打印机驱动即可。如果出现连接异常,建议关闭XP的防火墙服务(尽管理论上不受其影响);也可以使用samba服务来共享打印机,这是最常规的做法,只需配置samba服务,将打印机共享。在客户端通过IP搜索,一般能够找到打印服务器。
3.2 Linux客户端
对于已联网并且安装了CUPS的Linux客户端来讲,能够自动检测到网络中采用CUPS管理的打印机。因此,只需要找到菜单(RedHat Enterprise Server)"系统→首选项→更多首选项→默认打印机"或(fedora)"桌面→首选项→更多首选项→默认打印机",将弹出网络上所有已存在的打印机,选择其中的某一在线打印机作为默认打印机即可。如果Linux客户端没有安装CUPS,则需要手工去添加打印机。
结 语
本文设计并实现的打印服务器完全使用开源软件,扩展性强,只要能够找到Linux下的驱动程序源码,就能够轻松加入到打印服务器的支持列表中。给出的http打印方式相比samba而言有三个方面的优势,配置简单,使用安全,可以跨网段打印。打印服务器调试过程中的主要技术问题都已包含在本文中,经实际反复测试,打印效果良好,完全实用。 (编辑:chiying)
嵌入式网络设备通常都提供web管理方式,用以修改配置等。以修改IP地址为例,需要修改源码目录下的cgi-bin子目录下的admin.c文件,参照do_am_printer()函数新增函数do_modify_ip,此函数的功能为读取IP地址所在的配置文件,将IP地址、子网掩码、默认网关等显示在页面文本框中,允许修改,提交修改时该函数将新的参数覆盖原配置文件中旧的参数。为实现这一功能,主要用到了CUPS提供的文件操作函数cupsFileGets、cupsFi-leOpen、cupsFilePrintf,和有关CGI变量的读写函数cgiGetVariable、cgiSetVariable和界面的显示函数cgiStartHTM如IP地址L(title)、cgiCopyTemplateLang("error_ip.tmpl")、cgiEndHTML()。有关文件的读写操作,可参照CUPS目录下的testfile.c文件。
2.3 界面和提示语言汉化
CUPS支持多国语言版本,如果汉化,需要对界面标识、提示、按钮等全面进行汉化,工作量较大,需要修改doc/index.html,需要把templates语言版本挪到最外层,需要在loeale/cups_zh.po修改或增加新的中英文对照信息。更详细的信息可参考CUPS运行后通过浏览器访问http://localhost:631/help下的Translating and Custom-izing CUPS文档。
2.4 OUPS配置与调试
编辑/etc/cups/cupsd.conf在Location选项中添加容许访问的网段。为简单起见,在Order allow,deny后直接输入Allow all即可。
编辑/etc/cups/mime.convs,找到application/octet-stream application/vnd.cups-raw 0-行,将其注释掉,否则pdf、doc等文件格式将不被支持,提示"Print file wasnot accepted(Unsupported format 'application/octet-stream'!)"错误。另外,要将防火墙中对631端口的访问控制去掉,否则将提示打印服务器忙。在CUPS调试过程中,如果将cupsd.conf中的loglev-el info改成。loglevel debug,可以在var/log/cups/error_log中看到更多的输出信息,极大地方便了调试,也可借助网络抓包程序辅助调试。在确认打印机能够工作之前,暂不要通过网络方式驱动打印机,可用命令行的方式添加、使能并测试打印机是否工作正常。由于没有成熟的文档,过程比较艰辛。
CUPS启动后,可通过浏览器方式管理打印机。连接好打印机,进入web管理界面,找到"Add printer"。选择正确的驱动程序,如果所连接打印机的驱动程序不存在,则必须手工添加驱动程序。添加完成后,可以打印测试页看看打印机是否可以正常工作。
3 客户端连接
3.1 Windows客户端
在添加打印机时,选择添加的打印机类型为"网络打印机",在URL中输入http://printer_server_ip:631/printers/printer_name,其中printer_server_ip为CUPS打印服务器的IP地址,631为CUPS服务端口,printer_name为已添加的打印机的名称。如果提示URL错误,请修正后再试,最后提供Windows下相应的打印机驱动即可。如果出现连接异常,建议关闭XP的防火墙服务(尽管理论上不受其影响);也可以使用samba服务来共享打印机,这是最常规的做法,只需配置samba服务,将打印机共享。在客户端通过IP搜索,一般能够找到打印服务器。
3.2 Linux客户端
对于已联网并且安装了CUPS的Linux客户端来讲,能够自动检测到网络中采用CUPS管理的打印机。因此,只需要找到菜单(RedHat Enterprise Server)"系统→首选项→更多首选项→默认打印机"或(fedora)"桌面→首选项→更多首选项→默认打印机",将弹出网络上所有已存在的打印机,选择其中的某一在线打印机作为默认打印机即可。如果Linux客户端没有安装CUPS,则需要手工去添加打印机。
结 语
本文设计并实现的打印服务器完全使用开源软件,扩展性强,只要能够找到Linux下的驱动程序源码,就能够轻松加入到打印服务器的支持列表中。给出的http打印方式相比samba而言有三个方面的优势,配置简单,使用安全,可以跨网段打印。打印服务器调试过程中的主要技术问题都已包含在本文中,经实际反复测试,打印效果良好,完全实用。 (编辑:chiying)
- 关注自由和开源软件(03-15)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)