Linux下搭建samba服务器共享打印机

终于将实验室的打印机安装在了一台安装了archlinux的破电脑上。实验室的其他兄弟姐妹用的都是windows,而我是两边倒,windows和linux都要用的,为了让大家都能够使用打印机,我配置了samba服务器上的打印机和打印机共享,而各个客户端自然就是连接这个共享打印机就行了。作为一个实例,这里不会涉及到linux和windows之间打印共享的所有情况,但我想对于打印机安装在linux下而又需要配置打印共享的读者会有少许帮助。对于我自己而言,最重要的就是写此文留个备忘了。
    配置服务器端的打印机及其共享:
    1. 设置打印机当然是使用cups系统,如果你使用的发行版是ubuntu等比较傻瓜的linux,那么cups应该是已经安装上并默认启动起来了,你所需要做的就是配置它,那么请跳到第二步吧。我只说我使用过的发行版:gentoo和archlinux,这里不会讨论这两个发行版的优劣,只能说都是很优秀的发行版。对于gentoo用户,安装和启动cups很简单:
    #emerge -av cups
    #rc-update -a cupsd default
    如果使用archlinux:
    #pacman -S cups
    #vim (或者其他编辑器)/etc/rc.conf
    在DAEMONS一行中加入cups就行了
    2. 现在可以来配置并测试我们的打印机了,我使用的是一台HPLaserJet1200的usb接口打印机,对于目前较新的内核(使用udev系统的),打印机插上马上就能识别了,除非你的内核不支持usb!,如果想看看是不是真的认出来了,可以用以下命令:
    #lsusb(需要安装pci-utils软件包)
    或者查看dmesg:
    #dmesg |grep usb
    如果是刚插到电脑上,也可以这样:
    #dmesg |tail
    如果你的打印机采用其他接口,而系统内核又不支持的,请先获取内核支持(加载相关模块或直接编译入内核中),这时你可能需要其他的帮助了。
    现在要配置cups了,cups提供了一个基于web的配置界面,对于桌面用户而言简直是太方便了。如果你不能安装桌面系统,对不起,这里暂时不提供帮助。确保cups服务进程已经启动起来了,在浏览器(随便,你喜欢的,我用firefox)中输入localhost:631,cups的配置界面就启动了!对于不熟悉英文的同学我要表示遗憾了,因为这个界面好像还没有被汉化。
    点击“add printer”添加打印机,进入下个页面后要求输入”name”,”location”,”description”三个填空,其实都是可以随便写的,name当然就是打印机的名字了,选个专业又好记的名字就行,location描述打印机在哪里(就在自己身上挂着,我就写localhost啦),discription是打印机描述,可以空着。点击continue之后进入下一个页面。
    这一步选择打印设备,最关键的一步了,如果按照前面的说明你已经找到了你的打印机,那在这里就很好找了,点击下拉菜单,里面肯定有一个是你的打印机,选上,然后continue。
    这一步是选择驱动,一般来说系统已经带有了你的打印机驱动并推荐了几个给你了,按照推荐的选择一个最象的(不行回头改就是了),如果没有提供你的打印机驱动,你需要去这里看看,搜索你的打印机驱动并下载相应的ppd文件, 存放起来,然后点browse…手动添加驱动。添加完驱动后,下一步就是“add printer”
    这里需要输入root用户名和密码,输入之,敲击enter之后,恭喜你,打印机添加成功了!这时候该做的就是赶紧打印一页测试页看看打印机干不干活。

     3. cups配置完成后,还需要启动samba服务来共享这个打印机。首先当然是安装samba并启动samba服务了,方法和安装cups完全类似。不过samba服务启动之前要配置/etc/samba/smb.conf。samba提供了一个默认的配置文件在/etc/samba/smb.conf.default(或许是其他位置,总归一般是有一个的),你可以复制过去作为你的配置文件模板,稍作修改就行了。配置的方法网上五花八门的介绍都有,不过为了让打印机共享不需要那么多花哨,只需要设置如下几行:
    [global]
    workgroup=yourgroupname
    server string=abc
    security=share
    load printers = yes
    [printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    guest ok = no
    writable = no
    printable = yes
    配置完成之后启动samba服务,手动启动的方法如下:
    # /etc/init.d/samba restart
    如果是arch,服务启动脚本放在/etc/rc.d/下面。
    最后将samba加入启动进程中,服务器端配置就算是完成了。
    接下来讲客户端如何配置:
    1. windows客户端的配置是非常的简单了,直接在开始菜单中的“打印机与传真”里面,点击“添加打印机”,选择“网络打印机…”然后浏览打印机,找到一个和先前服务器端设置的server string一样的计算机,点击以下,共享的打印机就下拉下来啦,选中它,安装,这时候系统会提示安装打印驱动,在弹出来的列表窗口中选择打印机生产商,然后侧边打印机型号,然后安装,过一小会就OK了!新安装的打印机可能会显示拒绝访问,无法连接之类的,不用理它,这是因为samba设置了不可浏览的原因,不影响打印。接下来,测试,如果ok了就恭喜了。
    2. linux客户端的配置稍微麻烦那么一点点,那就是同样需要cups和samba(samba或许不需要,没有测试过),在cups中添加打印机的时候,在选择打印设备的时候选择“windows printer via samba”,然后下一个界面要求你输入网络中的位置,由于我们是通过samba服务共享的,当然是以smb://开头啦,但是后面怎么写曾经难了我很长时间,现在我知道一招啦:
    利用smbclient:
    $ smbclient -L (server string)
    server string是先前设置的samba服务器名。
    这时候会列出服务器端共享的所有资源。找到打印机并记下它的名字,比如我的是HPLaserJ,这样我的位置就这样写:smb://(server string)/HPLaserJ。在linux下可能需要用户验证(如果没有guest用户的话),这样的话最好在服务器端为linux用户添加一个用户账号,并将这个账号添加到samba用户中去:
    #smbpasswd -a username
    如果是这样,需要在位置中写下用户名和密码,例如smb://user:passwd @ (server string)/HPLaserJ。
    其他配置和服务器端配置是一样的,在这里不累述。
    如果一切顺利,那是最好最好的事情了!在linux下面很少有很顺利的事情的。
本文转自topsage由网络安全攻防研究室(www.91ri.org)信息安全小组收集整理。