Linux的打印服务CUPS的安装、配置和使用

2023-10-25 07:08

本文主要是介绍Linux的打印服务CUPS的安装、配置和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux的打印服务CUPS的安装、配置和使用

http://blog.chinaunix.net/u2/66402/showart_1830467.html

  CUPS实际上是一个集成的服务。包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。首先来看看CUPS驱动打印机的方式。这里要说明的是所谓驱动,其实是一系列的程序加定义文件的总和,不像我们有时候想像的那样是一个很简单的单一文件。当CUPS接受到打印命令时,首先会进行一个格式的预转换,比如将.jpg等各种文件先转换成PostScript格式(图1桔红方框)。然后进一步将PostScript格式转换成 CUPS内部格式,这个称为PostScript到PostScript转换,这两种PostScript格式还是有差别的,当然大家可以不必深究(我也没好好看,只是知道在MIME中定义了这两种不同的PostScript,哪位知道的请指教下)。
    以上这些都是预处理工作,接下来CUPS的工作围绕PostScript展开(图1,金色部分),CUPS会根据PPD(PostScript Printer Description 文件)文件来选择相应的处理流程。PPD文件其实是驱动的核心,不同的打印机有不同的PPD文件,PPD 包含有关输出设备的信息,CUPS使用 PPD 文件中的信息来确定在打印文档时向打印机发送哪些 PostScript 信息。需要说明的是,CUPS实际上把所有打印机都“看成”PostScript打印机,即便打印机本身不支持PostScript,也可以通过CUPS 自带的PostScript解释程序(pstoraster)或者GhostScript来解释PostScript文件,从而把普通的打印机模拟成 PostScript打印机。图1中金色的线条显示就是CUPS处理PostScript文件的方式,按我的理解,可以分为三种,第一种就是接正在的 PostScript打印机的,而后面两种就是分别用CUPS的pstoraster或GhostScript来解释PostScript,虚拟出一台 PostScript打印机。三种工作方式能够分别支持不同的打印机,所以,这也是CUPS兼容性非常好的原因:
    第一种,直接传输PostScript文件给CUPS的后台,再将打印流传输到PostScript打印机,接下来的事情全部丢给打印机去处理,当然,这种打印机大多价格不菲;
    第二种方式是交给CUPS的内置程序处理,把PostScript转换成其特有的raster格式,这种格式是CUPS特有的,至于为什么要转成这种格式,是为了方便打印机生产商,让他们可以只需开发CUPS的raster格式到其打印机的接口,方便大家统一,但似乎这一方式的驱动还不多。
    第三种方式,也是支持打印机最多的方式,叫做GhostScript格式的驱动模式。它其实和第二种打印驱动比较类似,只把CUPS的解释器换成了外置的 GhostScript来解释PostScript文件,之所以这么周折,是因为目前支持这种方法的打印机比支持CUPS的raster的打印机要多很多。GhostScript程序是独立于CUPS运行的,它的功能也不仅限于打印,但很多情况下通过CUPS来调用GhostScript打印是件很方便的事情。foomatic则是用于连接CUPS和GhostScript的一个脚本程序(用perl写的),用来打包各种不同格式的打印机命令,它非常有用,对于通过CUPS调用GhostScript来说则是必须的。GhostScript格式的驱动程序很多,大家可以到http://www.openprinting.org/去看看,现在大部分打印机在Linux都是用GhostScript驱动的。当然,有些时候,GhostScript还不能包打天下,像HP的1020就比较特殊,它的打印流有点不一样,需要再用特殊的程序进行处理,GhostScript负责讲PostScript格式转换成点阵模式后,还要进过foo2zjs处理,转换成特殊的打印流,再交给后台。这种模式,相当于给GhostScript又装了个插件,附加了一个小模块。
    总之,无论是哪种模式,实际上CUPS都是把打印机“看成”PostScript打印机,或是直接调用,或是用自带的方法虚拟,或者用GhostScript虚拟。

Linux_Printing_Stream
图1

打印驱动的安装
用Ubuntu系统为例,命令行仅供参考,实际安装时可能会因为系统和版本的差别或有差异,可针对不同的系统作些修改。
    万丈高楼平地起,首先,要安装的是CUPS本身,这个相对还是很方便的:
        sudo aptitude install cupsys cupsys-client
安装的cupsys是CUPS服务,cupsys-client则是管理连接CUPS用的。理论上这个时候要是你的打印机是PostScript打印机,或者在CUPS支持的范围内,只需将PPD文件往CUPS相应的目录一放,你就能够用CUPS打印了。但实际上,大多数打印机在Linux下还是需要 GhostScript来驱动的。关于CUPS的服务配置,我们最后一起讨论。所以,下一步:
sudo aptitude install ghostscript
(插一句,在ubuntu下,本人推荐用aptitude替代apt-get,aptitude处理包的依存关系比apt-get要好)
安装上GhostScript后,别忘记装foomatic,否则CUPS还是调用不过来的:
sudo aptitude install foomatic
(再次罗嗦下,foomatic五个部分,用aptitude可以一次搞定安装,apt-get似乎要敲好几次,建议)
到此为止,只要再稍加配置,系统就应该已经能够支持很多种打印机了。GhostScript本身就已经带了很多打印机的驱动,还有很多GhostScript标准写的驱动,可以从http://www.openprinting.org/下载到。
至于像hp 1020这样的机器,我们还得多装一点东西,不用担心,此程序的作者已经想得很周到了,只需稍许几个命令就能解决安装。(参考http://foo2zjs.rkkda.com/)

下载:
wget -O foo2zjs.tar.gz

解压缩:
tar zxf foo2zjs.tar.gz

进入相应的目录:
cd foo2zjs

编译foo2zjs:
make

取得打印机的韧件(firmware):
./getweb 1020

安装:
sudo make install

安装热插拔系统支持:
sudo make install-hotplug

安装到CUPS系统:
sudo make cups

这样,所有的安装工作都完成了。接下来需要配置调试CUPS服务了。

CUPS系统的配置
    CUPS系统装好的时候是只能从本地打开的,就是安装CUPS的那台机器能打开:http://127.0.0.1:631(图2)。如果要支持从其他机器登录,要修改配置文件:/etc/cups/cups.d/ports.conf,在里面添加要监听的地址,例如:

Listen 127.0.0.1:631
#默认的本地监听

Listen /var/run/cups/cups.sock
#默认的监听端口

Listen 192.168.1.2:631
#要添加的监听地址

另外,由于安全的需要,CUPS将很多从网络安装维护打印机的功能作了限制,经过尝试,建议对配置文件再做一些修改,增加几个配置参数,降低一些安全设置,以方便在普通内网条件下使用。当然,如果你对安全性有很大的要求,请参考相CUPS的说明进行修改:

# Authenticate against system accounts by default...

...

DefaultEncryption IfRequested
#添加默认的对密码加密的要求

... ... ...

# Restrict access to the server...

...

Allow 192.168.1.0/24
#添加可以访问服务器的网段

... ... ...

# Restrict access to the admin pages...

...

Allow 192.168.1.0/24
#添加那些机器可以访问管理页面

... ... ...

# Restrict access to the admin pages...

...

Encryption Never
#表示访问管理员页面无需对密码加密

... ... ...

配置完成后,就可以通过web页面来管理你的打印机了(图2)。
CUPS
图2

最后,将PPD文件放到/usr/share/cups/model目录下,CUPS就能识别你的打印机了。
     PPD文件哪里来的呢,这个有很多途径可以获得:CUPS自己本身带了很多PPD已经在/usr/share/cups/model/cups- included/目录下存在;从linuxprinting网站,也能下载到很多的PPD文件;还有,最经典的,可以用foomatic- compiledb编译出来,当然这个编译过程需要相应的数据库支持,默认编译的时候,会把所有foomatic支持的都编译出来,选择你要的就好了。以 HP1020为例,你可以直接从linuxprinting网站下到PPD;也可以在安装好foo2zjs后,用foomatic编译一个PPD文件,编译好后的文件存放在当前目录下的ppd/文件夹里。最后把对应型号的PPD文件拷贝到/usr/share/cups/model就完成了。

CUPS系统的使用
    在使用CUPS,需要添加打印机,打开打印机。然后输入CUPS服务器地址“http://192.168.1.2:631”打开web页面管理,点击 “Administration”页面,可以看到添加打印机的按钮,点击按照提示选择相应的端口和打印机信号就能完成安装(图3)。该过程和在 widnows下安装很类似,完成后可以点“Print Test Page”试下测试页,打印机很快就会打出相应的页面。到此,我们已经完全完成了对CUPS系统的配置,打印服务已经可以直接使用了。在Linux服务器上,可以直接调用CUPS服务打印文件。另外也能通过网络,共享这台打印机,让其他的系统包括Windows系统使用这台打印机。
HP1020
图3

在Window下使用CUPS共享的打印机
在Windows下,安装CUPS共享的打印机。网上有很多解决方案,很多方案提到用samba来共享打印机,那种方法可行,但配置samba也是一项比较复杂的工作。我们完全可以使用CUPS的网络打印功能,来完成这一任务。例如图4,添加一台网络打印机并输入URL:http://192.168.1.2:631/printers/HP_LaserJet_1020_USB_1,就可以完成打印机添加了,之后的步骤和安装普通的本地打印机一样。其中“192.168.1.2:631/printers”是CUPS打印服务所在地址和端口,“HP_Laser_1020_USB_1”是你的打印机名。
win
图4

总结
    通过CUPS的配置,我们能够将普通的打印机安装在Linux服务器上,从而提供网络服务,相比市售的网络打印机,这种方法不但降低了成本,一台带有 64M内存的奔腾就能很好的完成任务,而且该服务器还能同时兼任NAT,Web Server,FTP等服务,为10台以内的机器服务绰绰有余,CPU占用率100%的时间很少;而且相对传统网络打印机CUPS打印服务更加灵活可靠。


这篇关于Linux的打印服务CUPS的安装、配置和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280860

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3