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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1