您所在的位置:读书频道 > 操作系统 > Linux > 20.3.5 设置成为打印机服务器

20.3.5 设置成为打印机服务器

2007-12-07 10:55 鸟哥 机械工业出版社华章公司 字号:T | T
一键收藏,随时查看,分享好友!

《鸟哥的Linux私房菜——服务器架设篇》(第二版)第20章的主要介绍的是在不同的平台上利用同样的协议进行文件传输的操作。本文说的是设置成为打印机服务器。

AD:

20.3.5  设置成为打印机服务器

上面的说明大部分都是针对磁盘与目录的共享来进行SAMBA的设置,那么SAMBA有没有可能共享出装置呢?举个例子来说,办公室都会用到打印机,如果说能够让办公室的File Server同时提供打印机打印的功能,如此一来,通过Linux操作系统可以提供24小时开机的稳定功能,就可以随时进行打印了。所以,下面我们就从SAMBA进行打印机打印功能的提供者的角度,来介绍这个smb.conf的设置。

在Linux下面进行打印的工具很多,不过这里主要介绍的是目前较为流行的CUPS(Common Unix Printing System)。详细的CUPS安装设置方法已经在《鸟哥的私房菜——基础学习篇》的CUPS章节中提过,所以这里不再详细说明,仅介绍大致的处理流程。如果您需要较早期的LPRng打印系统的话,建议参考以下数据:

• 依玛猫的打印文件:http://www.imacat.idv.tw/tech/lnxprint.html
• 鸟哥的LPRng简介:http://linux.vbird.org/linux_Server/0370samba/0370samba.php# Server_printer_lprng。

一般常见的流程如下。

1. 安装打印机与确定启动

并不是所有的打印机都能被Linux所支持,所以当您想要连接一台打印机到Linux系统时,请务必到http://www.linuxprinting.org/printer_list.cgi上看看是否被支持。如果没有被支持,那就换一台打印机。

如果您的打印机连接端口为使用USB或者是平行串行端口的话,那么当您连接上打印机后,可以利用下面的方式测试是否已经成功的连接上:

[root@linux ~]# echo "Hello printer" > /dev/lp0      <==平行串行端口
[root@linux ~]# echo "Hello printer" > /dev/usb/lp0 <==USB端口

如果打印机有响应,这表示连接成功了。您可以进行后面的工作。如果您的打印机为网络打印机呢?即打印机已有IP的情况下,那么该打印机就不需要加入SAMBA。因为该打印机本身就可以直接提供客户端连接,根本不必通过SAMBA来提供网络联机。当然,如果您有特殊需求,将网络打印机加入SAMBA Server来提供给网上邻居中的其他用户,这样也是可以的。下面直接来看看如何使用CUPS吧。

2. 设置CUPS的打印机

请先确认CUPS已经安装完毕了,原则上,需要有下面两个软件存在才行:

• cups-libs。
• cups。

接下来可以开始设置CUPS了。设置的原则如下:

•需要让192.168.1.0/24这个网段可以使用打印机。
•需要让192.168.1.0/24及127.0.0.0/8可以管理CUPS系统。

然后开始进行如下操作:

[root@linux ~]# vi /etc/cups/cupsd.conf
# 下面这个项目在控制哪些用户可以使用CUPS系统,约在772行左右
# 找到这些数据并增加一个记录

Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24


# 下面的项目则在设置哪些用户可以登录CUPS系统的管理接口
# 在830行左右,找到这些数据并进行一些细节修改

#AuthType Basic
#AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24


# 在最后一行的地方加上这一句
Listen 0.0.0.0:631
# 上面在设置一个不需要密码即可登录的管理环境,是个很粗糙的接口
# 建议您自行处理一下认证问题,请参考《鸟哥的私房菜——基础学习篇》的说明

另外,为了操作Windows相关软件所传来的打印数据,还需要对CUPS作一些额外的设置,过程也很简单:

[root@linux ~]# vi /etc/cups/mime.convs
# 大概在最后几行的地方,找到这一行,将批注删除
application/octet-stream   application/vnd.cups-raw   0   -

[root@linux ~]# vi /etc/cups/mime.types
# 同样也是在最后面几行的地方,也是将批注删除
application/octet-stream

设置完毕后就可以开始启动cups系统了,操作如下:

[root@linux~]# /etc/init.d/cups start
[root@linux~]# netstat -tunlp | grep '631'
tcp 0  0 0.0.0.0:631     0.0.0.0:*    LISTEN   18271/cupsd
udp 0  0 0.0.0.0:631     0.0.0.0:*              18271/cupsd

631的端口就是CUPS所启动的,然后开始设置打印机。由于CUPS支持很多不同的打印机连接端口,每种连接端口都不一样,常见的有如下几种:

• USB连接端口:usb:/dev/usb/lp0。
• 平行串行端口:parallel:/dev/lp0。
• 网络打印机:ipp://ip/打印机型号。
• 网络打印机:smb://user:password@host/printer。

假设SAMBA接了一台USB连接的打印机,这台打印机取名为hplaser2300时,可以使用浏览器连接到SAMBA主机上,必须注意如图20-3所示的网址。

图20-3 CUPS的管理接口示意图1

如图20-3所示,先在地址栏中输入端口,然后按下箭头2所指的地方,即Manage Printers之后,将会弹出如图20-4所示界面。
图20-4 CUPS的管理接口示意图2

单击Continue按钮后弹出如图20-5所示界面,选择正确的装置,假设使用的是USB的打印机连接端口。

图20-5 CUPS的管理接口示意图3

单击Continue按钮后弹出如图20-6所示界面,选择正确的型号,假设这台打印机的型号为HP。

图20-6 CUPS的管理接口示意图4

单击Continue按钮后弹出如图20-7所示界面,选择标准的激光打印机驱动程序。

图20-7 CUPS的管理接口示意图5

单击Continue按钮后弹出如图20-8所示界面。
图20-8 CUPS的管理接口示意图6

到此为止我们可以假设您的CUPS已经有一台打印机存在了。接下来看看如何将它连接到SAMBA服务器上。

3. 在smb.conf中加入打印机的支持

开始告诉SAMBA将这台打印机共享。您需要这样处理:

[root@linux ~]# vi /etc/samba/smb.conf
[global]
     …
     # 这里列出的是打印机相关的数据
     printcap name=cups
     load printers=yes
     printing=cups
[printers]                        <==这个分享的资源名称一定是printers
     comment=All Printers
     printable=yes               <==可以进行打印的功能
     browsable=yes               <==可以让其他人浏览
     public=yes
     valid users=@users dmtsai <==可使用的人员有这些
     path=/var/spool/samba      <==打印队列的地方,暂存数据
     printer admin=dmtsai       <==这是打印机管理员。需要可使用SAMBA
     …

基本上通过这样的设置SAMBA就能够顺利的提供打印机的服务了。不过可惜的是,Windows客户端依旧要安装打印机的驱动程序才能够使用SAMBA所提供的打印机。有没有可能让SAMBA主动提供驱动程序给用户,这样一来客户端就不需要额外去找驱动程序了。这样是可以的,通过SAMBA 3.x即可处理。

或许您会想,打印机的型号这么多,Linux该如何提供这些打印机的驱动程序呢?CUPS主要是通过Postscript的打印语言与打印机沟通的,因此客户端只要取得Postscript的驱动程序就能够使用SAMBA服务器所提供的打印机了。如此一来,不论打印机的型号为何,只要能够支持Postscript的打印格式即可。而且CUPS官方网站本身就有提供CUPS的Postscript驱动程序。可以到下面的链接去下载。

• 支持多种CUPS版本:http://FTP.easysw.com/pub/cups/Windows/
• 支持CUPS 1.2以上版本:http://www.cups.org/Windows/software.php

由于CentOS 4.x使用的是1.1.x版本,所以鸟哥下载的是cups-samba-5.0rc3. tar.gz文件,接下来要将这个文件解压缩,然后将相关的程序安装到正确的目录中去。不过值得注意的是,除了驱动程序外,欲支持Windows 2000/XP的客户端,还需要到Windows XP的目录去下载几个文件:C:\WINDOWS\system32\spool\drivers\w32x86,将里面以PS开头的文件全部下载下来,应该有4个文件,请将它们另存为小写的文件,并且放置到SAMBA主机上的/usr/share/cups/drivers/目录下,然后将cups-samba-5.0rc3.tar.gz解压缩,并执行./cups-samba.install文件,即可将驱动程序全部安装到/usr/share/cups/drivers/目录下。这就是“基本的驱动程序说”。在鸟哥的目录中至少含有以下几个文件:

[root@linux ~]# ll /usr/share/cups/drivers
-r--r--r--  1 root root  14234 Sep 24  2002 cups5.hlp
-r--r--r--  1 root root 280268 Jan  4  2004 cupsdrv5.dll
-r--r--r--  1 root root 219540 Jan  4  2004 cupsui5.dll
-rw-r--r--  1 root root 129024 Dec 27 14:18 ps5ui.dll
-rw-r--r--  1 root root 455168 Dec 27 14:18 pscript5.dll
-rw-r--r--  1 root root  27568 Dec 27 14:18 pscript.hlp
-rw-r--r--  1 root root 792644 Dec 27 14:18 pscript.ntf

鸟哥已经将上述的多个文件打包成一个文件,可利用http://linux.vbird.org/linux_Server
/0370samba/cups-samba-Windows.tgz链接下载。

需要注意的是,这个文件内的Windows数据是仅适用于Windows XP,对于Windows 98/ME是没有作用的。您需要自行上网查阅相关的数据下载方式。接下来需要在smb.conf中增加一份新的共享数据,这份共享数据的名称必须为“[print$]”。

[root@linux ~]# vi /etc/samba/smb.conf
…
[print$]
     comment=Printer drivers
     path=/etc/samba/drivers       <==存放打印机驱动程序的目录
     browseable=yes
     read only=yes
     write list=dmtsai              <==这个驱动程序的管理员
     …
[root@linux ~]# mkdir /etc/samba/drivers
[root@linux ~]# chown dmtsai /etc/samba/drivers
# 因为将打印机管理员以及驱动程序管理员的身份设置为dmtsai这个用户
# 因此存放的目录也要改变一下权限才行

[root@linux ~]# testparm                    <==测试语句
[root@linux ~]# /etc/init.d/smb restart  <==重新启动

[root@linux ~]# smbClient -L //127.0.0.1 -U dmtsai
Password:                                      <==输入密码
Domain=[VBIRDSERVER] OS=[Unix] Server=[samba 3.0.10-1.4E.9]

    Sharename    Type      Comment
    ---------    ----      -------
    print$       Disk      Printer drivers
    hplaser2300  Printer   HP Laser Jet 2300 printer
# 一台打印机以及驱动程序所在的共享数据

现在需要告知SAMBA,CUPS可提供Windows 2000/XP客户端的驱动程序,所以用户不需要自行设置驱动程序。要由CUPS告知SAMBA是由cupsaddsmb这个指令来完成的,整个指令的执行很简单:

[root@linux ~]# cupsaddsmb -H [SAMBA 主机名] -h [CUPS 主机名] \
>   -a -v -U [用户账号]
参数
-H,后续接的是SAMBA主机名,本机的话可以直接用localhost即可
-h,后续接的为CUPS的主机名,使用localhost即可
-a,搜索所有可用的打印机
-v,列出更多的信息
-U,打印机管理员

范例:利用前面的说明将打印机驱动程序挂上SAMBA
[root@linux ~]# cupsaddsmb -H localhost -U dmtsai -a -v
Password for dmtsai required to access localhost via SAMBA:
<==输入dmtsai密码
# 这里会闪过很多的信息,说明已经安装了某些信息,下面鸟哥仅列出简单的信息
putting file /usr/share/cups/drivers/pscript5.dll as 
\W32X86/pscript5.dll (1438.5 kb/s) (average 1342.5 kb/s)

Printer Driver hplaser2300 successfully installed.

Succesfully set hplaser2300 to driver hplaser2300.

[root@linux ~]# ll /etc/samba/drivers
drwxr-xr-x  3 dmtsai dmtsai 4096 Dec 27 14:40 W32X86

最后在驱动程序的存放目录中会多出一个W32X86的目录,可以查询一下该目录的内容,那就是预计要给客户端使用的驱动程序。不过,为了将所有的数据全部驱动,建议将CUPS及SAMBA重新启动。

[root@linux ~]# /etc/init.d/cups restart
[root@linux ~]# /etc/init.d/smb restart

4. 一些问题的克服

如果一切顺利的话,在Windows客户端应该可以顺利的连接到打印机了。不过,如果您曾经印错数据,那么该如何进入Linux的SAMBA主机将该数据删除呢?最好掌握下面的几个指令,关于这些指令的进阶用法请自行做出处理:

[root@linux ~]# lpstat -a
hplaser2300 accepting requests since Jan 01 00:00
# 列出所有可用的打印机状态

[root@linux ~]# lpq
hplaser2300 is ready
no entries
# 列出打印机的工作
hplaser2300 is ready and printing
Rank    Owner   Job  File(s)                 Total Size
active  dmtsai   5   smbprn.00000003 测试页  42954752 bytes

[root@linux ~]# lprm all
# 删除所有等待的打印工作

打印工作就是这样操作的,赶紧试试看吧。


【责任编辑:董书 TEL:(010)68476606】
【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

大师品软件——软件之痛与应对之道
这并不是一本传统的技术专著,因为它并没有包含一行代码,而更像是一部技术评论。作者通过幽默诙谐而又不失辛辣的语言,从程序员

最新热帖

更多>>

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院