在本文中,学习以下概念:
- 创建和配置打印机共享
- 配置 Samba 与 Common UNIX® Print System (CUPS) 之间的集成
- 管理 Windows® 打印驱动程序,并配置打印驱动程序的下载文件
- 配置 [print$] 共享
- 了解打印机共享的安全问题
- 设置和管理打印统计
本文帮助您准备 LPI 的 Mixed Environment 特性考试(302)的主题 312 下的目标 312.3。该目标的权值为 2。
为了最有效地利用本系列中的文章,您应该具有高级 Linux 知识,并需要准备一个 Linux 系统,用于练习本文介绍的命令。另外,您应该能够访问一个用于测试文件和打印访问的 Windows 环境。
配置 Samba 打印机共享与配置文件共享十分类似。 首先定义一个区域,设置一些参数,然后连接到客户端。 但因为涉及到打印,存在一些细微的差别。 清单 1 显示了 smb.conf 中一种十分典型的配置。
清单 1. 典型的打印配置
[global] load printers = yes printing = sysv [printers] comment = Printers path = /var/spool/samba writable = no printable = yes |
清单 1 没有定义任何特定的打印机。相反,它告诉 Samba
加载系统打印机列表,然后定义了一个称为
[printers] 的模板区域。记得 了解 Linux,302(混合环境):文件服务 中将 [homes]
区域用作主目录的模板。
[printers] 区域对打印机也是如此。
在全局层面上,load printers 参数
告诉 Samba 寻找系统打印机并把它们设置为共享。
printing = sysv 的意思是使用老式的 SysV
打印系统。暂时先这样做,稍后您将学会如何
配置更加现代的 CUPS。
[printers] 区域定义每个打印机共享是什么样子的。
除非要为每台打印机提供特殊选项,比如限制用户,通常使用模板便已足够。
path 是针对 Samba 使用的。当您打印到
Samba 打印机时,smbd 在把作业发送给系统打印设备之前,先将文件放到 path 参数
指定的目录中。然后,您必须确保共享不是 writable 而是 printable,这样 Samba 就能把它当做打印机共享正确使用。
现在浏览服务器时,您可以看到打印机列表。如果已经在 Windows 客户端上安装了正确的打印机驱动程序,可以继续安装打印机并通过网络使用它。
在大多数 Linux 发行版中 CUPS 取代了 SysV 打印系统。
CUPS 比 SysV 打印更加灵活和用户友好,而且它提供了
一个与遗留打印系统无缝集成的兼容层。
使用 lp 或
lpq 命令就可以连通 CUPS。
CUPS 通过预处理打印作业改进遗留打印系统。 例如,如果发送一个 PDF 文件给打印机,CUPS 可以 理解文件格式,通过类似于 GhostScript 的软件发送输出,并将文件转换为打印机能够理解的语言。 过去这要通过大量破解工作才能实现,但现在已经全部集成在 CUPS 中。
清单 2 中显示了支持 CUPS 打印必需的最简单的配置。
清单 2. 启用 CUPS 支持
[global] printing = cups printcap = cups |
清单 2 在全局模式下工作。首先,打印通过 CUPS
库而非 lpr 来完成。最后一个命令
告诉 Samba 从 CUPS 守护进程(而非系统 printcap 文件)获取打印机列表。即使使用 CUPS,您可能仍然有一个 printcap 文件,
因为 CUPS 出于与非 CUPS 应用程序兼容的目的保留了这个文件。
即便使用与 CUPS 集成的 Samba,您仍然使用 CUPS 工具来管理打印队列。如果您不知道如何使用 CUPS,可以参考以下对更多重要命令的概述:
lp。 发送输出给打印机。(您通常会把一个命令的输出输送给这个命令, 比如cat /etc/motd | lp。)cupsenable与cupsdisable。 分别用于启动与停止打印机。 (这些也是用于重置打印机的不错命令。)cupsreject。拒绝或接受发送到打印机的作业。 (此命令不会改变打印机的状态;相反,它会告诉 CUPS 拒绝传入的作业。)lpadmin。允许设置打印机上的配置值,比如分配限额。lpq。 显示给定打印机上队列中的项目。lprm。允许取消打印机上的作业。
打印机一般能够理解页面打印语言(Page Description Language,PDL),比如 Adobe® PostScript® 或 Printer Command Language (PCL)。 有些打印机可能使用厂商特定的 PDL。Windows 打印机驱动程序负责将应用程序的打印命令转换为打印机使用的 PDL。如果没有打印机驱动程序,应用程序生成的命令将被直接打印成文本,从而造成纸张浪费。
这种让客户端将文档处理为打印机能够使用的格式的方法称为原始打印。 在这种模式下,Samba 只要将字节从客户端复制到打印机即可。这种方法有两个缺点:
- 客户端必须拥有打印机特定的驱动程序才能打印。
- Samba 很难了解作业正在做什么,比如记录已经打印的页数。
虽然有这两个缺点,原始打印很易于设置。通过另外做一些工作,可以把打印机驱动程序从 Samba 服务器发布出去。
让 Samba 发布您的打印机驱动程序是一项复杂的工作。 最好的方法是安装一个通用的 PostScript 打印机驱动程序,并将其用于您所有的打印机。 CUPS 将会通过其智能打印系统将客户端的 PostScript 转换为打印机能够理解的内容。 通过使用这种方法而非本机驱动程序,您还可以了解已打印的页数。
您将需要下载 CUPS 驱动程序:当前的文件是 cups-windows-6.0-1.i386.rpm(参见 参考资料 中的链接。)这个包将把以下文件安装到 /usr/share/cups/drivers 中:
- cups6.inf
- cups6.ini
- cupsps6.dll
- cupsui6.dll
CUPS 驱动程序只支持 Microsoft® Windows 2000 及更高版本的客户端, 这通常没有问题, 但更高版本中使用的 Samba 实用工具经过硬编码,可查找遗留的 Microsoft 驱动程序,而且如果它们不存在时就会出现故障。 以下文件将位于您的系统上,而且应该将它们复制到 /usr/share/cups/drivers 中:
- ps5ui.dll
- pscript5.dll
- pscript.hlp
- pscript.ntf
这些文件通常位于您的 C:\WINDOWS\ServicePackFiles\i386 目录中。
现在所有八个文件都已经在您的 CUPS 驱动程序目录中,您可以创建 print$ 共享了。这个共享被硬编码到 Windows 客户端中, 而且这也是安装打印机时客户端查找打印机驱动程序的位置。 打印机共享是一种相当标准的共享,如清单 3 所示。
清单 3. print$ 共享
[print$] comment = Printer Driver Export path = /etc/samba/drivers browseable = yes guest ok = no read only = yes write list = root |
清单 3 显示了一个简单的共享,它对于除 root 用户之外的所有用户都是只读的。不要忘记重启 Samba 让这个共享生效。
最后,使用 cupsaddsmb 命令安装打印机驱动程序。对于 Downstairs_Laser 共享,只要运行
cupsaddsmb -v Downstairs_Laser 即可。您将会被提示输入 root 密码,然后您的屏幕就会显示一系列活动。
客户现在可以浏览您的 Samba 服务器并双击打印机。 他们无需任何额外的步骤就能够使用打印机,比如打印机识别与驱动程序安装。
您应该使用通用的 CUPS PostScript 驱动程序,以便 CUPS 能够理解要打印的内容。如果您决定发布 Windows
驱动程序,过程是类似的。首先,不要使用 cupsaddsmb 命令。亲自将驱动程序
复制到 /etc/samba/drivers 目录,但同时还必须把它们放到架构特定的目录中(cupsaddsmb 为您做了这件事情)。
例如,W32X86 用于 32 位的驱动程序。
使用 rpcclient 命令告诉 Samba
驱动程序的相关信息。您必须传递打印机驱动程序文件的名称和打印机的正式名称。请参见 参考资料 中给出的例子。
对于打印机,统计就是跟踪和限制每个用户的页面使用情况。安全性 指的是了解谁在使用您的打印机,并在必要时限制访问权限。 这一权限可以是打印到打印机的能力或取消其他人的作业的能力。
Samba 在打印过程中的角色是获取客户端的打印文件,比如 PostScript,然后把它发送给 CUPS。Samba 所做的一切事情都要通过 CUPS,比如将 打印队列的状态显示给客户端。CUPS 将文件插入队列,并控制打印机。Samba 的任务是在 CUPS 与客户端之间传送内容。
使用互联网打印协议(Internet Printing Protocol)可以让客户端直接打印到 CUPS。然而,千万不能低估从 Microsoft Network Neighborhood 安装打印机的方便性。只要记住,如果客户端直接连接到 CUPS,您在 Samba 上 实施的任何控制都可能在 CUPS 上被重写。
考虑一个已经使用 valid users = alice, bob 进行保护以只允许两个用户进行打印的打印机共享。
如果用户 mallory 尝试通过 Samba 进行打印,请求会被拒绝。如果 CUPS 没有使用类似的权限进行设置,
mallory 可以通过 CUPS 队列打印到打印机。
另一项安全考虑因素是来宾用户的使用。如果您可以对需要打印的所有用户都进行身份验证,确保
guest ok = no 位于您的
[printers] 配置区域中;这样,只有通过身份验证的用户才能够打印。
否则,身份未知的用户都可以打印到您的打印机。
在打印作业中,CUPS(而非 Samba)负责处理统计工作。CUPS 允许使用打印机限额 来限制每个时间段内每个用户打印的页数。清单 4 显示了如何为打印机添加限额。
清单 4. 给打印机添加一个限额
# lpadmin -p Downstairs_Laser -o job-quota-period=604800 -o job-page-limit=100 \ job-k-limit=50000 |
清单 4 在打印机上设置了三个选项。第一个是作业限额期限,其值为 604,800 秒(1 周)。第二个是限额期间的页面限制:这里是 100 个页面。第三个是将打印量限制为 50MB。最后一个选项不是必须的,特别是因为 它的值很难测量,但希望限制打印图形密集型文件的用户的确可以利用这个选项。
要检查或查看打印机上的限额,打开 /etc/cups/printers.conf;
您将看到 QuotaPeriod、
PageLimit 与
KLimit 选项,而且它们带有您在上面添加的值。
要删除限额,将这些值都设为 0。
每个打印作业都会记录在一个名为 page.log 的文件中,此文件通常位于 /var/log/cups 中。清单 5 中显示了该文件中典型的一行。
清单 5. 一行典型的页面统计日志
Downstairs_Laser 755 sean [26/Apr/2011:15:02:27 -0500] 1 1 - localhost smbprn.0019.FWqosE |
这一行的左边部分与打印机统计的关系最大。其中包含的字段依次为:
- 打印机名称
- 分配给打印机作业的作业编号
- 进行打印的用户
- 日期(格林尼治标准时间)与时区偏差
- 打印的页面数量
- 发送的拷贝数量
因此,使用的页面数量就是打印的页面数量乘以发送的拷贝数量。参见 参考资料 中关于余下字段的描述。
注意:CUPS 限额的最大限制就是它们将应用于所有用户。
下一个考试目标 312.4 将深入探究如何将 Samba 用作 Microsoft 主备域控制器。
学习
- Web 版的 smb.conf 手册页 比命令行版本更方便。
- 复习 developerWorks 上关于 107 主题 的学习资料,了解有关命令行打印的新信息。
-
Samba-HOWTO 的 第 21 章 描述了 “经典的” 打印支持,
这在使用 CUPS 之前就已经存在。这个网站还提供了一个添加 Windows 打印机驱动程序的现成例子。
-
Samba-HOWTO 的 第 22 章 提供了关于 CUPS 与
Samba 集成的额外信息。
- CUPS 文档的 page_log 部分列出了
页面日志中的所有字段,方便您报告其他的内容。
- 在 LPIC Program 站点查找 LPI 的 Linux 系统管理认证的三个级别的详细目标、任务列表和样例问题,特别是要查看 LPI-302 详细目标 与 任务和样例问题。
- 复习 developerWorks 上的整个 LPI 考试准备系列,学习 Linux 基础知识,根据 2009 年 4 月以前的 Linux 考试目标准备系统管理员认证考试。
-
适用于修订版 LPIC 考试的考试准备资源 提供了一系列由 LPI 维护的其他认证培训资源。
- 查看 developerWorks 演示中心,包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。
- 在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
- 在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
- 随时关注 developerWorks 技术活动和网络广播。
获得产品和技术
- 下载 Windows
CUPS 驱动程序。
- 获取 Samba 最新版本,了解最新的特性。
-
以最适合您的方式 IBM 产品评估试用版软件:下载产品试用版,在线试用产品,在云环境下试用产品,或者在 IBM SOA 人员沙箱 中花费几个小时来学习如何高效实现面向服务的架构。
讨论
- 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
