2006年9月28日星期四

在Linux下用Windows下的共享打印机

终于可以在我的Ubuntu下面用实验室Windows下的共享打印机了。下面总结一下,供我以后查阅。

首先要安装以下的包:
sudo aptitude update
sudo aptitude-get install cupsys cupsys-bsd cupsys-client samba smbclient
如果共享打印机HPLaserJ位于mea工作组的zheng电脑下,型号是HP LaserJet 1200系列,那么执行如下命令来添加该打印机[1]
lpadmin -p zhengprinter -v smb://mea/guest@zheng/HPLaserJ -P /usr/share/cups/model/hplip/HP_LaserJet_1200.ppd
enable zhengprinter
accept zhengprinter
lpadmin -d zhengprinter
上面的命令首先增加打印机zhengprinter,然后让其可用并可以接收打印任务,最后把它设置为默认打印机。上面的命令在/etc/cups/printers.conf中增加相关内容。

然后要打开cupsys和samba服务:
sudo /etc/init.d/cupsys restart
sudo /etc/init.d/samba restart
这两个服务都是必需的,缺一不可。上面的步骤如果都没有错误,那么就应该可以在Linux下使用Windows下的共享打印机了,可以用
lp testfile
来测试是否成功,用相应的文件替换testfile。

以前曾经试着用gnome-cups-manager配置过这台打印机,但是没成功。下面总结一些问题以及解决方法。

1. 用lpadmin增加打印机时,如果出现lpadmin: add-printer (set model) failed: client-error-not-found这样的错误,看看ppd文件是否存在。如果没有需要的ppd文件,就需要安装相应的包。

2. 开始lpadmin添加打印机时,我用smb://zheng/HPLaserJ指定打印机地址,在打印时总是出现下面的错误:
Unable to connect to SAMBA host, will retry in 60 seconds...ERROR: Connection failed with error NT_STATUS_ACCESS_DENIED
错误消息可以用tail /var/log/cups/error_log查看。在搜索了一些网页后,还是不知道怎么解决,不经意中看到这么一个类似问题的回复[2]
Change the URI format to DeviceURI smb://WKGRP/guest@server/printer
due to a recent security update to CUPS.
我于是把打印机地址改为smb://mea/guest@zheng/HPLaserJ,重新运行了lpadmin,然后打印机马上吱吱响了起来,打出了队列中的测试页。要不是偶然看到这个,我真不知道什么时候才会弄好。

3. 如果仅仅是使用Windows下的打印机,不需要对samba进行任何配置,即不需要改动/etc/samba/smb.conf。

4. Ubuntu里面我的用户在lpadmin这个组里面,所以上面添加打印机的操作无需root权限。

5. 在这里命令行比图像界面好。虽然gnome-cups-manager也可以设置打印机,但是添加打印机时选择Windows打印机后,不停弹出局域网电 脑的认证对话框,而且总是跳 到最前面,很烦人。不同发行版的图形界面配置程序往往有差异,甚至同一发行版不同版本程序的界面都不同,而命令行方法在Linux下都是通用的。用命令 行知道每一步在做什么,而且失败了有更多的出错信息。

6. 如果要多次测试打印机,可执行不带任何参数的lp,lp将从标准输入(stdin)读取内容,输入一个空行后按Ctrl-D,就可以让打印机走一张白纸了。这样可节约纸张。