Linux中cups打印服务实战设置

这两天花了些时间研究了一下cups的打印设置,发现网上的资料说得不清不楚,于是决定把我的设置记录下来供大家将来参考。
我的LINUX是 redhat enterprise 3
在这篇文章中,假设CUPS打印服务器的主机名为: server, 打印机的主机名为: HP, 客户端主机名为: client。

首先,要启动CUPS打印服务,用下面这个命令:
/etc/init.d/cups start

然后在CUPS服务器主机server中,我们要做好2个文件的设置,这两个文件分别是:
/etc/cups/cupsd.conf
/etc/cups/printers.conf

其中,cupsd.conf是控制cups服务的设置,而printers.conf则是对打印机进行设置的。

设置这两个文件并不复杂,这里不建议手工修改,因为可以用web方式来设置,然后自动生成。
只要在本机的网页浏览器输入这个网址,就可以进入CUPS的web设置界面:

http://服务器主机名:631 例如: http://server:631

不过在这里,觉得需要介绍一下这两个文件里面的内容,这样对大家的理解会有好处。
而且,我发现如果要限制用户的话,好像还是需要手动修改printers.conf文件的。

cupsd.conf文件中的内容:
#================================
<Location /admin>
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
#上面这个部分是设定对CUPS服务管理的权限,一般只准许从本机进行对CUPS服务的修改控制。
#所以可以看到 allow地址是 127.0.0.1

<Location />
Order Deny,Allow
Deny From All
Allow From All
</Location>
#上面这个部分是对CUPS服务的功能权限默认设置,一般如此,没有什么特别的。

#
# End of "$Id: cupsd.conf.in,v 1.16 2004/08/18 17:53:47 mike Exp $".
#

# Lines below are automatically generated - DO NOT EDIT
#下面这部分是设置打印机在CUPS中的使用。因为服务器毕竟只是电脑,真正要打印还是通过打印机
#从设置看基本上也是全部使用权限开放,如果要限制IP地址区域的话,需要在Allow 后面进行设置。
<Location /printers/HP>
#注意上面这一行,其中HP是打印机的名字,要和printers.cups中设置的一样才可以其作用。
Order Deny,Allow
Deny From All
AuthType None
Allow from All
</Location>

#================================

printers.conf文件中的内容:
#================================
#下面这一行中的HP是打印机的名字,为方便设置,建议和打印机的网络主机名一致
<DefaultPrinter HP>
Info Created by redhat-config-printer 0.6.x
DeviceURI lpd://HP/PORT1
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
AllowUser root
AllowUser PETER
AllowUser SUSAN
</Printer>
#================================
这里,要重点说一下上面这部分中的黑体字那一行
DeviceURI lpd://HP/PORT1
这一行是定义打印机与CUPS服务器之间通过什么协议来连接,还有一些其它的候选协议如下:
file:/path/to/filename.prn
http://hostname:631/ipp/
http://hostname:631/ipp/port1
ipp://hostname/ipp/
ipp://hostname/ipp/port1
lpd://hostname/queue
socket://hostname
socket://hostname:9100

以上这些打印协议中,hostname指的是打印机的网络主机名,也可以用打印机的IP地址代替,631则是CUPS服务的端口号
这其中,port1一般是惠普打印机的默认queue,如果是多queue打印机,你可以通过ftp协议登陆到打印机上,然后看看打印机系统上根目录下有哪些目录,从中可以判断出queue的名字

这里要注意一个问题,因为我在实际操作中,发现 redhat-config-printer-gui 图形界面的打印机设置只支持 LPD 协议的打印机设置。也就是说,如果你采用 IPP, HTTP, 或者 socket,即使配置成功,测试页也可以打印,但是就是不可以使用 redhat-config-printer-gui 图形界面来对打印机进行进异步设置。为了方便起见,我建议大家还是选用 LPD 来设置CUPS服务器和打印机之间的连接。

还有 AllowUser 语句,通过这条语句,可以允许或限制特定用户的打印权限,假如没有这条语句,就是所有用户可以打印。
这条语句是需要手动添加的。
*注意每次通过redhat-config-printer-gui 图形界面进行设置后,AllowUser 语句都会被自动删掉,需要重新添加
另外有关于 cupsd.conf 文件的补充内容:
在做好上面的设置后,发现如果要限制IP网段的话,手工配置很麻烦,于是通过redhat-config-printer-gui图形界面来配置。
下面这一部分是采用redhat-config-printer-gui图形界面设置后自动在cupsd.conf文件产生的,不建议手动添加。
不过要注意的是,如果想要采用redhat-printer-config-gui图形界面来修改设置,在printers.conf文件中,网络打印协议要采用LPD协议:
#============================
Browsing On
BrowseProtocols cups
BrowseOrder Deny,Allow
BrowseAllow from @LOCAL
BrowseAddress 255.255.255.255
Listen *:631
#============================

这其中 Listen 语句是设定允许使用CUPS服务的网络限制的。"*"代表所有的网络
我在一些资料中看到,说是如果要设置网络区域,是要写成如下格式:
Listen 0.0.0.0:631
但实际上是错误的,如果写成象上面那样,会导致CUPS服务启动出错。
会给出如下的出错信息:Child exited with status: 98!
所以,正确方法还是用 *号代替所有网络。
至于其它区域段IP网络设置,大家可以通过 redhat-printer-config-gui图形界面中的 share 选项进行控制,非常方便,在此就不一一列举。

做完以上这些,重新启动一下CUPS服务就可以.
用 lpq.cups 命令看一下打印机的状态, 如果有 "HP is ready" 字样,就说明CUPS服务器设置成功了。

客户端设置:
前提是CUPS服务器的防火墙要打开,至少631端口号不能屏蔽。
客户端的设置非常简单,只需要配置一个文件:
/etc/cups/client.conf

client.conf文件内容:
#======================
#ServerName CUPS服务器地址或服务器名,例如:

ServerName server

#======================
的确是很简单吧,设置好后重启一下CUPS服务就可以了。