跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

学习 Linux,302(混合环境): 打印服务

在混合环境中创建与管理 Samba 打印共享

Sean A. Walberg, 高级网络工程师
Sean Walberg 的照片
Sean Walberg 是一位网络工程师,撰写了两本关于网络的图书。他的工作经历跨几个行业,其中包括医疗保健和媒体。

简介: 本文旨在帮助系统管理员准备 Linux Professional Institute Certification 考试 LPI-302,学习如何设置打印机并在 Linux 与 Microsoft 客户端之间共享它们。

查看本系列更多内容

发布日期: 2011 年 10 月 21 日
级别: 高级 原创语言: 英文
访问情况 : 3527 次浏览
评论: 


关于本系列

本系列文章帮助您了解 Linux 系统管理任务相关知识。您可以使用本系列文章的资料准备 Linux Professional Institute Certification 级别 3(LPIC-3)考试

参见我们的 学习 Linux, 302(混合环境):LPI-302 路线图,查看本系列中各篇文章的介绍和链接。路线图目前仍在更新中,目前反映的最新内容是 LPIC-3 考试的最新目标(2010 年 11 月)。在我们完成文章后,我们会将其添加到路线图中。

概述

在本文中,学习以下概念:

  • 创建和配置打印机共享
  • 配置 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

关于可选的 LPI-302 考试

与其他许多认证一样,Linux Professional Institute Certification (LPIC) 提供多个不同级别,每个级别都比前一个级别要求更多知识和经验。LPI-302 考试是 LPIC 层级的第三级中的一个可选特性考试,要求具有高级 Linux 系统管理知识。

要通过 LPIC 级别 3(LPIC-3)认证,您必须通过前两个一级考试(101 和 102),两个二级考试(201 和 202),以及 LPIC-3 核心考试(301)。到达这个级别后,才能参加一些可选特性考试,比如 LPI-302。

清单 1 没有定义任何特定的打印机。相反,它告诉 Samba 加载系统打印机列表,然后定义了一个称为 [printers] 的模板区域。记得 了解 Linux,302(混合环境):文件服务 中将 [homes] 区域用作主目录的模板。 [printers] 区域对打印机也是如此。

在全局层面上,load printers 参数 告诉 Samba 寻找系统打印机并把它们设置为共享。 printing = sysv 的意思是使用老式的 SysV 打印系统。暂时先这样做,稍后您将学会如何 配置更加现代的 CUPS。

[printers] 区域定义每个打印机共享是什么样子的。 除非要为每台打印机提供特殊选项,比如限制用户,通常使用模板便已足够。 path 是针对 Samba 使用的。当您打印到 Samba 打印机时,smbd 在把作业发送给系统打印设备之前,先将文件放到 path 参数 指定的目录中。然后,您必须确保共享不是 writable 而是 printable,这样 Samba 就能把它当做打印机共享正确使用。

现在浏览服务器时,您可以看到打印机列表。如果已经在 Windows 客户端上安装了正确的打印机驱动程序,可以继续安装打印机并通过网络使用它。


集成 Samba 与 CUPS

创建您自己的提要

您可以构建一个自定义 RSS、Atom 或 HTML 提要,以便在我们添加新文章或更新内容时收到通知。访问 developerWork RSS 提要。选择 Linux 作为专区,Articles 作为类型,输入 Linux Professional Institute 作为关键字。然后选择您想要的提要类型。

在大多数 Linux 发行版中 CUPS 取代了 SysV 打印系统。 CUPS 比 SysV 打印更加灵活和用户友好,而且它提供了 一个与遗留打印系统无缝集成的兼容层。 使用 lplpq 命令就可以连通 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。)
  • cupsenablecupsdisable 分别用于启动与停止打印机。 (这些也是用于重置打印机的不错命令。)
  • cupsreject拒绝或接受发送到打印机的作业。 (此命令不会改变打印机的状态;相反,它会告诉 CUPS 拒绝传入的作业。)
  • lpadmin允许设置打印机上的配置值,比如分配限额。
  • lpq 显示给定打印机上队列中的项目。
  • lprm允许取消打印机上的作业。

原始与智能配置

打印机一般能够理解页面打印语言(Page Description Language,PDL),比如 Adobe® PostScript® 或 Printer Command Language (PCL)。 有些打印机可能使用厂商特定的 PDL。Windows 打印机驱动程序负责将应用程序的打印命令转换为打印机使用的 PDL。如果没有打印机驱动程序,应用程序生成的命令将被直接打印成文本,从而造成纸张浪费。

这种让客户端将文档处理为打印机能够使用的格式的方法称为原始打印。 在这种模式下,Samba 只要将字节从客户端复制到打印机即可。这种方法有两个缺点:

  • 客户端必须拥有打印机特定的驱动程序才能打印。
  • Samba 很难了解作业正在做什么,比如记录已经打印的页数。

虽然有这两个缺点,原始打印很易于设置。通过另外做一些工作,可以把打印机驱动程序从 Samba 服务器发布出去。


把驱动程序发布到 Windows 客户端

让 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; 您将看到 QuotaPeriodPageLimitKLimit 选项,而且它们带有您在上面添加的值。 要删除限额,将这些值都设为 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 主备域控制器。


参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

关于作者

Sean Walberg 的照片

Sean Walberg 是一位网络工程师,撰写了两本关于网络的图书。他的工作经历跨几个行业,其中包括医疗保健和媒体。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=766958
ArticleTitle=学习 Linux,302(混合环境): 打印服务
publish-date=10212011

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。