Samba之打印机共享配置 (CUPS系统)
 
本文摘录自鸟哥的Linux私房菜。
 
Samba可以针对磁盘与目录来进行分享,那么SAMBA有没有可能分享打印机呢?如果说,能够让我们办公室的File Server同时提供打印机的功能,如此一来,藉由Linux这个作业系统可以24小时开机的稳定功能,我们就可以随时进行打印啰!所以,底下我们就以SAMBA进行打印机打印功能的提供者的角度,来介绍这个smb.conf的设定喔!

在Linux底下进行打印的工具很多,不过我们这里要介绍的仅有目前较广为流行的CUPS (Common Unix Printing System)这一个。
详细的CUPS安装设定方法我们已经在基础篇的CUPS章节当中提过,所以这里我们不再详细说明,仅介绍大致的处理流程就是了。
 
如果你需要较早期的LPRng打印系统的话,建议可以参考底下的资料喔:
依玛猫的打印文件:[url]http://www.imacat.idv.tw/tech/lnxprint.html[/url]
鸟哥的LPRng简介:[url]http://linux.vbird.org/linux_server/0370samba/0370samba.php[/url]
 
底下就来谈一谈一般常见的流程说明吧:
-------------------------------------------------- ----------------------------
1. 安装打印机与确定启动
再次说明,并不是所有的打印机都被Linux所支持的,所以当你想要连结一部打印机到Linux系统上时,请务必到[url]http://www.linuxprinting.org/printer_list.[/url] cgi上去看看是否有被支持喔!如果没有被支持,那就换一部打印机吧!不要进行垂死的挣扎了....

如果你的打印机连接埠为USB或者是平行序列埠的话,那么当你连接上打印机后,可以利用底下的方式测试看看是否成功的连接上了:
[root@linux ~]# echo "Hello printer" > /dev/lp0 <==平行序列埠
[root@linux ~]# echo "Hello printer" > /dev/usb/lp0 <==USB埠
如果打印机有回应,这表示OK的啦!你可以进行底下的工作了。如果你的打印机为网络打印机呢?就是说打印机有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行左右,
#找到这些资料并增加一笔记录:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24
</Location>

#底下的项目则在设定谁可以登入CUPS系统的管理界面?
#约在830行左右,找到这些资料并进行一些细部修改:
<Location /admin>
#AuthType Basic
#AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 192.168.1.0/24
</Location>

#在最后一行的地方加上这一句
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主机上头,必须注意到网址喔:
clip_image002
图一、CUPS的管理界面示意图

如上图一所示,先在网址列的地方务必要输入端口才行!然后按下箭头『 2 』所指的地方,亦即是『Manage Printer』之后再按下『Add printer』的按钮,就会出现如下画面,记得要填写正确的资料喔!
clip_image004
图二、CUPS的管理界面示意图

然后如下图所示,选择正确的装置所在处!我们假设使用的是USB的打印机连接埠:
clip_image006
图三、CUPS的管理界面示意图

之后就是选择正确的型号啰,假设这部打印机为HP所出产的:
clip_image008
图四、CUPS的管理界面示意图

选择标准的雷射打印机驱动程式吧!
clip_image010
图五、CUPS的管理界面示意图

最后都成功后,就会找到如下所示的画面了。
clip_image012
图六、CUPS的管理界面示意图

到此为止我们可以假设你的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主要是透过利用Post.的打印语言与打印机沟通的,因此用户端只要取得post.的驱动程式他们就能够使用咱们的Samba服务器所提供的打印机了!如此一来,不论打印机的型号为何,只要他们能够支持Post.的打印格式,OK搞定!而且CUPS官网本身就有提供CUPS的Post.驱动程式啰!
 
可以到底下的连结去下载:
支持多种CUPS版本:[url]http://ftp.easysw.com/pub/cups/windows/[/url]
支持CUPS 1.2以上版本:[url]http://www.cups.org/windows/software.php[/url]
由于CentOS 4.x使用的是1.1.x版本,所以鸟哥下载的是cups-samba-5.0rc3.tar.gz这个档案,接下来我们要将这个档案解压缩,然后将相关的程式给他安装到正确的目录去。
 
不过您得要注意的是,除了这个驱动程式外,要支持Windows 2000/xp的用户端,你还得到Windows XP的底下目录去下载几个档案:
C:\WINDOWS\system32\spool\drivers\w32x86\3
里面的PS开头的档案通通下载下来,应该有四个档案的,请将他复制成为小写的档案,并且放置到你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 p.5.dll
-rw-r--r-- 1 root root 27568 Dec 27 14:18 p..hlp
-rw-r--r-- 1 root root 792644 Dec 27 14:18 p..ntf
 
上述的档案鸟哥将他打包成为一个档案了,你可以在底下的连结下载:
[url]http://linux.vbird.org/linux_server/0370samba/cups-samba-windows.tgz[/url]
 
不过您得注意,这个档案内的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 .ly = 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/p.5.dll as \W32X86/p.5.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主机将该资料移除呢?你最好知道底下的几个指令,关于这些指令的进阶用法则请自行man了:
[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
#移除所有等待中的打印工作!
 
打印工作就是这样进行的啦!赶紧试看看吧!