标签 打印 下的文章

使用 lpr 命令在终端中打印文件。

 title=

在 Linux 上打印很容易,但有时感觉要做很多工作,比如启动应用程序、打开文件、在菜单中找到打印选项,单击确认按钮等等。当你是一个终端用户时,通常希望使用简单的触发器执行复杂的操作。打印很复杂,但没有什么比 lpr 命令更简单了。

使用 lpr 命令打印

使用 lpr 命令在终端打印文件:

$ lpr myfile.odt

如果失败的话,你需要设置默认打印机或手动指定打印机。

设置默认打印机

根据我在 1984 年印刷的 Berkeley 4.2 手册的旧版本中找到的资料,lpr 命令会分页并将文件发送到打印机池,后者将数据传输到称为 行式打印机 line printer 的东西。

显示 LPR 命令信息的页面

现在,最初的 lpr 命令已经无法满足,因为现代计算机可以访问多台打印机,而且是那些比点阵行式打印机复杂得多的打印机。现在有一个称为 通用 Unix 打印系统 Common Unix Printing System (CUPS)子系统,可以跟踪你的计算机可以访问的所有打印机,计算机应该使用哪个驱动程序与每台打印机通信,默认使用哪台打印机等等。 CUPS 捆绑提供的 lpr.cupslpr-cups 命令通常以符号链接到 lpr,允许你首先借助 CUPS 配置从终端打印。

使用 lpr 打印文件,你应该首先设置默认打印机。你可以在系统的打印机设置中设置:

设置默认打印机对话框

或者,你也可以使用 lpadmin 命令设置:

$ sudo lpadmin -d HP_LaserJet_P2015_Series
$ lpstat -v
device for HP_LaserJet_P2015_Series: ipp://10.0.1.222:631/printers/HP_LaserJet_P2015_Series

使用环境变量设置

你不能在没有管理员账户的系统上设置默认打印机,因为更改打印机默认设置是一项特权任务。在 lpr 借助 CUPS 找到目标打印机前,它会在系统中查询 PRINTER 环境变量

在本例中,HP_LaserJet_P2015_Series 是打印机的名称。将 PRINTER 设置为该值:

$ PRINTER=HP_LaserJet_P2015_Series
$ export PRINTER

一旦设置了 PRINTER 变量,你就可以打印了:

$ lpr myfile.pdf

获取连接的打印机列表

你可以使用 lpstat 命令查看所有连接到系统接受打印任务的打印机:

$ lpstat -a
HP_LaserJet_P2015_Series accepting requests since Sun 1 Aug 2021 10:11:02 PM NZST
r1060 accepting requests since Wed 18 Aug 2021 04:43:57 PM NZST

打印到任意一台打印机

将打印机添加到系统后,并且现在你知道如何识别它们了,你可以打印到其中任何一台,无论你是否设置了默认打印机:

$ lpr -P HP_LaserJet_P2015_Series myfile.txt

如何定义打印机

CUPS 有一个友好的前端页面,可通过 Web 浏览器如 Firefox 访问。虽然它使用 Web 浏览器作为用户界面,但它实际上是在本机(一个称为 localhost 的位置)的 631 端口上提供服务。CUPS 管理连接到计算机的打印机,并将其配置存储在 /etc/cups/priters.conf 中。

printers.conf 文件包含详细描述计算机可以访问的打印设备的定义。不要直接编辑它,但如果你想这样做,你必须先停止 cupsd 守护进程。

一个典型的文件定义如下所示:

<Printer r1060>
  Info Ricoh 1060
  Location Downstairs
  MakeModel Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.6
  DeviceURI lpd://192.168.4.8
  State Idle
  StateTime 1316011347
  Type 12308
  Filter application/vnd.cups-raw 0 -
  Filter application/vnd.cups-raster 100 rastertogutenprint.5.2
  Accepting Yes
  Shared No
  JobSheets none none
  QuotaPeriod 0
  PageLimit 0
  KLimit 0
  OpPolicy default
  ErrorPolicy stop-printer
</Printer>

在本例中,打印机的名称是 r1060,即 “Ricoh Aficio 1060”。

MakeModel 属性是从 lpinfo 命令中提取的,该命令列出了系统上所有可用的打印机驱动程序。假设你知道要打印到 Ricoh Aficio 1060,那么你会发出以下命令:

$ lpinfo -m | grep 1060
gutenprint.5.2://brother-hl-1060/expert Brother HL-1060 - CUPS+Gutenprint v5.2.11
gutenprint.5.2://ricoh-afc_1060/expert Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11

它会列出已安装的相关驱动程序。

MakeModel 属性是结果的后半部分。在本例中为 Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11

DeviceURI 属性标识打印机在网络上的位置(或物理位置,例如 USB 端口)。在本例中,它是 lpd://192.168.4.8,因为我使用 lpd 协议将数据发送到一台网络打印机。在我的另一个系统上,我有一个通过 USB 连接的 HP LaserJect 打印机,因此 DeviceURIhp:/usb/HP_LaserJet_P2015_Series?serial=00CNCJM26429

在终端中打印

将作业发送到打印机是一个简单的过程,只要你了解连接到系统的设备以及如何识别它们。在终端打印非常快速、高效,并且易于编写脚本或作为批处理作业完成。试试看!


via: https://opensource.com/article/21/9/print-files-linux

作者:Seth Kenlon 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在 Linux 命令行进行打印的内容比单单一个 lp 命令多得多,让我们来看一些可用选项。

Sherry

Linux 命令行打印很容易。你可以使用 lp 命令来请求打印,并使用 lpq 命令来查看队列中有哪些打印作业,但是当你要双面打印或使用纵向模式时,这些会变得有些复杂。你可能还需要做很多其他事情,例如打印多份文档副本或取消打印作业。让我们来看看一些选项,当你从命令行打印时,如何让你的打印输出看起来如你所愿。

显示打印机配置

要从命令行查看打印机设置,请使用 lpoptions 命令。 输出应如下所示:

$ lpoptions
copies=1 device-uri=dnssd://HP%20Color%20LaserJet%20CP2025dn%20(F47468)._pdl-datastream._tcp.local/ finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=1553023232 marker-colors=#000000,#00FFFF,#FF00FF,#FFFF00 marker-levels=18,62,62,63 marker-names='Black\ Cartridge\ HP\ CC530A,Cyan\ Cartridge\ HP\ CC531A,Magenta\ Cartridge\ HP\ CC533A,Yellow\ Cartridge\ HP\ CC532A' marker-types=toner,toner,toner,toner number-up=1 printer-commands=none printer-info='HP Color LaserJet CP2025dn (F47468)' printer-is-accepting-jobs=true printer-is-shared=true printer-is-temporary=false printer-location printer-make-and-model='HP Color LaserJet cp2025dn pcl3, hpcups 3.18.7' printer-state=3 printer-state-change-time=1553023232 printer-state-reasons=none printer-type=167964 printer-uri-supported=ipp://localhost/printers/Color-LaserJet-CP2025dn sides=one-sided

如果将其空格转换为回车符,输出可能会更人性化,请注意列出了多少设置选项。

注意:在下面的输出中,一些行被重新链接,以使输出更具可读性。

$ lpoptions | tr " " '\n'
copies=1
device-uri=dnssd://HP%20Color%20LaserJet%20CP2025dn%20(F47468)._pdl-datastream._tcp.local/
finishings=3
job-cancel-after=10800
job-hold-until=no-hold
job-priority=50
job-sheets=none,none
marker-change-time=1553023232
marker-colors=#000000,#00FFFF,#FF00FF,#FFFF00
marker-levels=18,62,62,63
marker-names='Black\ Cartridge\ HP\ CC530A,
Cyan\ Cartridge\ HP\ CC531A,
Magenta\ Cartridge\ HP\ CC533A,
Yellow\ Cartridge\ HP\ CC532A'
marker-types=toner,toner,toner,toner
number-up=1
printer-commands=none
printer-info='HP Color LaserJet CP2025dn (F47468)'
printer-is-accepting-jobs=true
printer-is-shared=true
printer-is-temporary=false
printer-location
printer-make-and-model='HP Color LaserJet cp2025dn pcl3, hpcups 3.18.7'
printer-state=3
printer-state-change-time=1553023232
printer-state-reasons=none
printer-type=167964
printer-uri-supported=ipp://localhost/printers/Color-LaserJet-CP2025dn
sides=one-sided

使用 -v 选项时,lpinfo 命令将列出驱动程序和相关信息:

$ lpinfo -v
network ipp
network https
network socket
network beh
direct hp
network lpd
file cups-brf:/
network ipps
network http
direct hpfax
network dnssd://HP%20Color%20LaserJet%20CP2025dn%20(F47468)._pdl-datastream._tcp.local/ <== printer
network socket://192.168.0.23 <== printer IP

lpoptions 命令将显示默认打印机的设置。使用 -p 选项指定其中一个可用打印机代号:

$ lpoptions -p LaserJet

lpstat -p 命令显示打印机的状态,而 lpstat -p -d 列出可用打印机列表。

$ lpstat -p -d
printer Color-LaserJet-CP2025dn is idle. enabled since Tue 19 Mar 2019 05:07:45 PM EDT
system default destination: Color-LaserJet-CP2025dn

非常有用的命令

要在默认打印机上打印文档,只需使用 lp 命令,后跟要打印的文件名即可。 如果文件名包含空格(在 Linux 系统上很少见),请将该名称放在引号中或开始输入文件名并按 Tab 键调用空格的转义标志(如下面的第二个示例所示)。

$ lp "never leave home angry"
$ lp never\ leave\ home\ angry

lpq 命令显示打印队列:

$ lpq
Color-LaserJet-CP2025dn is ready and printing
Rank Owner Job File(s) Total Size
active shs 234 agenda 2048 bytes

使用 -n 选项时,lp 命令可用来指定所需打印输出的份数:

$ lp -n 11 agenda

要取消打印作业,可以使用 cancellprm 命令。如果没来得及执行,则可能会看到以下信息:

$ cancel 229
cancel: cancel-job failed: Job #229 is already completed - can't cancel.

双面打印

要以双面模式打印,你可以在 lp 命令中使用 sides 选项,该选项不但表示了在纸张的正反面进行打印,还表示了从纸张的哪个边开始打印。这个设置代表了你期望以双面纵向文档的正常方式打印。

$ lp -o sides=two-sided-long-edge Notes.pdf

如果要所有文档以双面模式打印,则可以使用 lpoptions 命令更改 sides 设置以修改 lp 的设置。

$ lpoptions -o sides=two-sided-short-edge

要恢复为单面打印,可以使用如下命令:

$ lpoptions -o sides=one-sided

横向打印

要以横向模式打印,可以在 lp 命令中使用 landscape 选项。

$ lp -o landscape penguin.jpg

CUPS(Unix 通用打印系统)

Linux 系统上使用的打印系统是基于标准的开源打印系统,称为 CUPS,原意是 Unix 通用打印系统 Common Unix Printing System 。 它允许计算机充当打印服务器。


via: https://www.networkworld.com/article/3373502/printing-from-the-linux-command-line.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:stevenzdg988 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 中的打印

虽然现在大量的沟通都是电子化和无纸化的,但是在我们的公司中还有大量的材料需要打印。银行结算单、公用事业帐单、财务和其它报告、以及收益结算单等一些东西还是需要打印的。本教程将介绍在 Linux 中如何使用 CUPS 去打印。

CUPS,是 通用 Unix 打印系统 Common UNIX Printing System 的首字母缩写,它是 Linux 中的打印机和打印任务的管理者。早期计算机上的打印机一般是在特定的字符集和字体大小下打印文本文件行。现在的图形打印机可以打印各种字体和大小的文本和图形。尽管如此,现在你所使用的一些命令,在古老的行式打印守护进程(LPD)技术的历史中仍能找到它们。

本教程将帮你了解 Linux 服务器专业考试(LPIC-1)的第 108 号主题的 108.4 目标。这个目标的权重为 2。

前提条件

为了更好地学习本系列教程,你需要具备基本的 Linux 知识,和使用 Linux 系统实践本教程中的命令的能力,你应该熟悉 GNU 和 UNIX® 命令的使用。有时不同版本的程序输出可能会不同,因此,你的结果可能与本教程中的示例有所不同。

本教程中的示例使用的是 Fedora 27 的系统。

有关打印的一些历史

这一小部分历史并不是 LPI 目标的,但它有助于你理解这个目标的相关环境。

早期的计算机大都使用行式打印机。这些都是击打式打印机,那时,它们使用固定间距的字符和单一的字体来打印文本行。为提升整个系统性能,早期的主机要与慢速的外围设备(如读卡器、卡片穿孔机、和运行其它工作的行式打印机)交叉进行工作。因此就产生了在线的或者假脱机的同步外围操作,这一术语目前在谈到计算机打印时仍然在使用。

在 UNIX 和 Linux 系统上,打印初始化使用的是 BSD( 伯克利软件分发版 Berkeley Software Distribution )打印子系统,它是由一个作为服务器运行的行式打印守护程序(LPD)组成,而客户端命令如 lpr 是用于提交打印作业。这个协议后来被 IETF 标准化为 RFC 1179 —— 行式打印机守护进程协议

System V 也有一个打印守护程序。它的功能与BSD 的 LPD 守护程序类似,但是它们的命令集不一样。你在后面会经常看到完成相同的任务使用不同选项的两个命令。例如,对于打印文件的命令,伯克利实现版本是 lpr,而 System V 实现版本是 lp

随着打印机技术的进步,在一个页面上混合出现不同字体成为可能,并且可以将图片像文字一样打印。可变间距字体,以及更多先进的打印技术,比如间距和连字符,现在都已经标准化。出现了几种对基本的 lpd/lpr 方法等改进设计,比如 LPRng,下一代的 LPR,以及 CUPS。

许多可以打印图形的打印机,使用 Adobe PostScript 语言进行初始化。一个 PostScript 打印机有一个解释器引擎,它可以解释打印任务中的命令并从这些命令中生成最终的页面。PostScript 经常被用做原始文件(比如一个文本文件或者一个图像文件)和最终格式没有适合的 PostScript 功能的特定打印机之间的中间层。转换这些特定的打印任务,比如将一个 ASCII 文本文件或者一个 JPEG 图像转换为 PostScript,然后再使用过滤器转换 PostScript 到非 PostScript 打印机所需要的最终光栅格式。

现在的 便携式文档格式 Portable Document Format (PDF),它就是基于 PostScript 的,已经替换了传统的原始 PostScript。PDF 设计为与硬件和软件无关,它封装了要打印的页面的完整描述。你可以查看 以及打印 PDF 文件。

管理打印队列

用户直接打印作业到一个名为 打印队列 print queue 的逻辑实体。在单用户系统中,打印队列和打印机通常是几乎相同的意思。但是,CUPS 允许系统不用连接到一个打印机上,而最终在一个远程系统上的排队打印作业,并且通过使用分类,允许将定向到一个分类的打印作业在该分类第一个可用的打印机上打印。

你可以检查和管理打印队列。对于 CUPS 来说,其中一些命令实现了一些新操作。另外的一些是源于 LPD 的兼容命令,不过现在的一些选项通常是最初的 LPD 打印系统选项的有限子集。

你可以使用 CUPS 的 lpstat 命令去检查队列,以了解打印系统。一些常见选项如下表 1。

选项作用
-a显示打印机状态
-c显示打印分类
-p显示打印状态:enabled 或者 disabled
-s显示默认打印机、打印机和类。相当于 -d -c -v注意:要指定多个选项,这些选项必须像值一样分隔开。
-v显示打印机和它们的设备。

表 1. lpstat 命令的选项

你也可以使用 LPD 的 lpc 命令(它可以在 /usr/sbin 中找到)使用它的 status 选项。如果你不想指定打印机名字,将列出所有的队列。列表 1 展示了命令的一些示例。

[ian@atticf27 ~]$ lpstat -d
system default destination: HL-2280DW
[ian@atticf27 ~]$ lpstat -v HL-2280DW
device for HL-2280DW: dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/
[ian@atticf27 ~]$ lpstat -s
system default destination: HL-2280DW
members of class anyprint:
    HL-2280DW
    XP-610
device for anyprint: ///dev/null
device for HL-2280DW: dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/
device for XP-610: dnssd://EPSON%20XP-610%20Series._ipp._tcp.local/?uuid=cfe92100-67c4-11d4-a45f-ac18266c48aa
[ian@atticf27 ~]$ lpstat -a XP-610
XP-610 accepting requests since Thu 27 Apr 2017 05:53:59 PM EDT
[ian@atticf27 ~]$ /usr/sbin/lpc status HL-2280DW
HL-2280DW:
    printer is on device 'dnssd' speed -1
    queuing is disabled
    printing is enabled
    no entries
    daemon present

列表 1. 显示可用打印队列

这个示例展示了两台打印机 —— HL-2280DW 和 XP-610,和一个分类 anyprint,它允许打印作业定向到这两台打印机中的第一个可用打印机。

在这个示例中,已经禁用了打印到 HL-2280DW 队列,但是打印功能是启用的,这样便于将打印机脱机维护之前可以完成打印队列中的任务。启用还是禁用队列,可以使用 cupsacceptcupsreject 命令来管理。以前它们叫做 acceptreject,你或许可能在 /usr/sbin 中找到这些命令,但它们现在都是符号链接到新的命令上了。同样,启用还是禁用打印,你可以使用 cupsenablecupsdisable 命令来管理。在早期版本的 CUPS 中,这些被称为 enabledisable,它也许会与 bash shell 内置的 enable 混淆。列表 2 展示了如何去启用打印机 HL-2280DW 上的队列,而禁止它的打印。CUPS 的几个命令支持使用 -r 选项去提供一个该操作的理由。这个理由会在你使用 lpstat 时显示,但是如果你使用的是 lpc 命令则不会显示它。

[ian@atticf27 ~]$ lpstat -a -p HL-2280DW
anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST
HL-2280DW not accepting requests since Thu 27 Apr 2017 05:52:27 PM EDT -
    Maintenance scheduled
XP-610 accepting requests since Thu 27 Apr 2017 05:53:59 PM EDT
printer HL-2280DW is idle. enabled since Thu 27 Apr 2017 05:52:27 PM EDT
    Maintenance scheduled
[ian@atticf27 ~]$ accept HL-2280DW
[ian@atticf27 ~]$ cupsdisable -r "waiting for toner delivery" HL-2280DW
[ian@atticf27 ~]$ lpstat -p -a
printer anyprint is idle. enabled since Mon 29 Jan 2018 01:17:09 PM EST
printer HL-2280DW disabled since Mon 29 Jan 2018 04:03:50 PM EST -
    waiting for toner delivery
printer XP-610 is idle. enabled since Thu 27 Apr 2017 05:53:59 PM EDT
anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST
HL-2280DW accepting requests since Mon 29 Jan 2018 04:03:50 PM EST
XP-610 accepting requests since Thu 27 Apr 2017 05:53:59 PM EDT

列表 2. 启用队列和禁用打印

注意:用户执行这些任务必须经过授权。它可能要求是 root 用户或者其它的授权用户。在 /etc/cups/cups-files.conf 中可以看到 SystemGroup 的条目,cups-files.conf 的 man 页面有更多授权用户组的信息。

管理用户打印作业

现在,你已经知道了一些如何去检查打印队列和类的方法,我将给你展示如何管理打印队列上的作业。你要做的第一件事是,如何找到一个特定打印机或者全部打印机上排队的任意作业。完成上述工作要使用 lpq 命令。如果没有指定任何选项,lpq 将显示默认打印机上的队列。使用 -P 选项和一个打印机名字将指定打印机,或者使用 -a 选项去指定所有的打印机,如下面的列表 3 所示。

[pat@atticf27 ~]$ # As user pat (non-administrator)
[pat@atticf27 ~]$ lpq
HL-2280DW is not ready
Rank Owner Job File(s) Total Size
1st unknown 4 unknown 6144 bytes
2nd pat 6 bitlib.h 6144 bytes
3rd pat 7 bitlib.C 6144 bytes
4th unknown 8 unknown 1024 bytes
5th unknown 9 unknown 1024 bytes

[ian@atticf27 ~]$ # As user ian (administrator)
[ian@atticf27 ~]$ lpq -P xp-610
xp-610 is ready
no entries
[ian@atticf27 ~]$ lpq -a
Rank Owner Job File(s) Total Size
1st ian 4 permutation.C 6144 bytes
2nd pat 6 bitlib.h 6144 bytes
3rd pat 7 bitlib.C 6144 bytes
4th ian 8 .bashrc 1024 bytes
5th ian 9 .bashrc 1024 bytes

列表 3. 使用 lpq 检查打印队列

在这个示例中,共有五个作业,它们是 4、6、7、8、和 9,并且它是名为 HL-2280DW 的打印机的队列,而不是 XP-610 的。在这个示例中使用 -P 选项,可简单地显示哪个打印机已经准备好,但是没有队列任务。注意,CUPS 的打印机命名,是大小写不敏感的。还要注意的是,用户 ian 提交了同样的作业两次,当一个作业没有第一时间打印时,经常能看到用户的这种动作。

一般情况下,你可能会查看或者维护你自己的打印作业,但是,root 用户或者其它授权的用户通常会去管理其它打印作业。大多数 CUPS 命令都可以使用一个 -E 选项,对 CUPS 服务器与客户端之间的通讯进行加密。

使用 lprm 命令从队列中去删除一个 .bashrc 作业。如果不使用选项,将删除当前的作业。使用 - 选项,将删除全部的作业。要么就如列表 4 那样,指定一个要删除的作业列表。

[[pat@atticf27 ~]$ # As user pat (non-administrator)
[pat@atticf27 ~]$ lprm
lprm: Forbidden

[ian@atticf27 ~]$ # As user ian (administrator)
[ian@atticf27 ~]$ lprm 8
[ian@atticf27 ~]$ lpq
HL-2280DW is not ready
Rank Owner Job File(s) Total Size
1st ian 4 permutation.C 6144 bytes
2nd pat 6 bitlib.h 6144 bytes
3rd pat 7 bitlib.C 6144 bytes
4th ian 9 .bashrc 1024 bytes

列表 4. 使用 lprm 删除打印作业

注意,用户 pat 不能删除队列中的第一个作业,因为它是用户 ian 的。但是,ian 可以删除他自己的 8 号作业。

另外的可以帮你操作打印队列中的作业的命令是 lp。使用它可以去修改作业属性,比如打印数量或者优先级。我们假设用户 ian 希望他的作业 9 在用户 pat 的作业之前打印,并且希望打印两份。作业优先级的默认值是 50,它的优先级范围从最低的 1 到最高的 100 之间。用户 ian 可以使用 -i-n、以及 -q 选项去指定一个要修改的作业,而新的打印数量和优先级可以如下面的列表 5 所示的那样去修改。注意,使用 -l 选项的 lpq 命令可以提供更详细的输出。

[ian@atticf27 ~]$ lpq
HL-2280DW is not ready
Rank Owner Job File(s) Total Size
1st ian 4 permutation.C 6144 bytes
2nd pat 6 bitlib.h 6144 bytes
3rd pat 7 bitlib.C 6144 bytes
4th ian 9 .bashrc 1024 bytes
[ian@atticf27 ~]$ lp -i 9 -q 60 -n 2
[ian@atticf27 ~]$ lpq
HL-2280DW is not ready
Rank Owner Job File(s) Total Size
1st ian 9 .bashrc 1024 bytes
2nd ian 4 permutation.C 6144 bytes
3rd pat 6 bitlib.h 6144 bytes
4th pat 7 bitlib.C 6144 bytes

列表 5. 使用 lp 去改变打印数量和优先级

最后,lpmove 命令可以允许一个作业从一个队列移动到另一个队列。例如,我们可能因为打印机 HL-2280DW 现在不能使用,而想去移动一个作业到另外的队列上。你可以指定一个作业编号,比如 9,或者你可以用一个队列名加一个连字符去限定它,比如,HL-2280DW-0。lpmove 命令的操作要求是授权用户。列表 6 展示了如何去从一个队列移动作业到另外的队列,先是指定打印机和作业 ID 移动,然后是移动指定打印机的所有作业。稍后我们可以去再次检查队列,其中一个作业已经在打印中了。

[ian@atticf27 ~]$ lpmove HL-2280DW-9 anyprint
[ian@atticf27 ~]$ lpmove HL-2280DW xp-610
[ian@atticf27 ~]$ lpq -a
Rank Owner Job File(s) Total Size
active ian 9 .bashrc 1024 bytes
1st ian 4 permutation.C 6144 bytes
2nd pat 6 bitlib.h 6144 bytes
3rd pat 7 bitlib.C 6144 bytes
[ian@atticf27 ~]$ # A few minutes later
[ian@atticf27 ~]$ lpq -a
Rank Owner Job File(s) Total Size
active pat 6 bitlib.h 6144 bytes
1st pat 7 bitlib.C 6144 bytes

列表 6. 使用 lpmove 移动作业到另外一个打印队列

如果你使用的是 CUPS 之外的打印服务器,比如 LPD 或者 LPRng,大多数的队列管理功能是由 lpc 命令的子命令来处理的。例如,你可以使用 lpc topq 去移动一个作业到队列的顶端。其它的 lpc 子命令包括 disabledownenableholdmoveredirectrelease、和 start。这些子命令在 CUPS 的兼容命令中没有实现。

打印文件

如何去打印创建的作业?大多数图形界面程序都提供了一个打印方法,通常是 文件 菜单下面的选项。这些程序为选择打印机、设置页边距、彩色或者黑白打印、打印数量、选择每张纸打印的页面数(每张纸打印两个页面,通常用于讲义)等等,都提供了图形化的工具。现在,我将为你展示如何使用命令行工具去管理这些功能,然后和图形化实现进行比较。

打印文件最简单的方法是使用 lpr 命令,然后提供一个文件名字。这将在默认打印机上打印这个文件。而 lp 命令不仅可以打印文件,也可以修改打印作业。列表 7 展示了使用这个命令的一个简单示例。注意,lpr 会静默处理这个作业,但是 lp 会显示处理后的作业的 ID。

[ian@atticf27 ~]$ echo "Print this text" > printexample.txt
[ian@atticf27 ~]$ lpr printexample.txt
[ian@atticf27 ~]$ lp printexample.txt
request id is HL-2280DW-12 (1 file(s))

列表 7. 使用 lpr 和 lp 打印

表 2 展示了 lpr 上你可以使用的一些选项。注意, lp 的选项和 lpr 的很类似,但是名字可能不一样;例如,-#lpr 上是相当于 lp-n 选项。查看 man 页面了解更多的信息。

选项作用
-C-J-T设置一个作业名字。
-P选择一个指定的打印机。
-#指定打印数量。注意这不同于 lp 命令的 -n 选项。
-m在作业完成时发送电子邮件。
-l表示打印文件已经为打印做好格式准备。相当于 -o raw
-o设置一个作业选项。
-p格式化一个带有阴影标题的文本文件。相关于 -o prettyprint
-q暂缓(或排队)后面的打印作业。
-r在文件进入打印池之后,删除文件。

表 2. lpr 的选项

列表 8 展示了一些选项。我要求打印之后给我发确认电子邮件,那个作业被暂缓执行,并且在打印之后删除文件。

[ian@atticf27 ~]$ lpr -P HL-2280DW -J "Ian's text file" -#2 -m -p -q -r printexample.txt
[[ian@atticf27 ~]$ lpq -l
HL-2280DW is ready


ian: 1st [job 13 localhost]
 2 copies of Ian's text file 1024 bytes
[ian@atticf27 ~]$ ls printexample.txt
ls: cannot access 'printexample.txt': No such file or directory

列表 8. 使用 lpr 打印

我现在有一个在 HL-2280DW 打印队列上暂缓执行的作业。然后怎么做?lp 命令可以通过使用 -H 的各种选项来暂缓或者投放作业。列表 9 展示了如何投放被暂缓的作业。查看 lp 命令的 man 页面了解其它选项的信息。

[ian@atticf27 ~]$ lp -i 13 -H resume

列表 9. 重启一个暂缓的打印作业

并不是所有的可用打印机都支持相同的选项集。使用 lpoptions 命令去查看一个打印机的常用选项。添加 -l 选项去显示打印机专用的选项。列表 10 展示了两个示例。许多常见的选项涉及到人像/风景打印、页面大小和输出在纸张上的布局。详细信息查看 man 页面。

[ian@atticf27 ~]$ lpoptions -p HL-2280DW
copies=1 device-uri=dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/
finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50
job-sheets=none,none marker-change-time=1517325288 marker-colors=#000000,#000000
marker-levels=-1,92 marker-names='Black\ Toner\ Cartridge,Drum\ Unit'
marker-types=toner,opc number-up=1 printer-commands=none
printer-info='Brother HL-2280DW' printer-is-accepting-jobs=true
printer-is-shared=true printer-is-temporary=false printer-location
printer-make-and-model='Brother HL-2250DN - CUPS+Gutenprint v5.2.13 Simplified'
printer-state=3 printer-state-change-time=1517325288 printer-state-reasons=none
printer-type=135188 printer-uri-supported=ipp://localhost/printers/HL-2280DW
sides=one-sided

[ian@atticf27 ~]$ lpoptions -l -p xp-610
PageSize/Media Size: *Letter Legal Executive Statement A4
ColorModel/Color Model: *Gray Black
InputSlot/Media Source: *Standard ManualAdj Manual MultiPurposeAdj MultiPurpose
UpperAdj Upper LowerAdj Lower LargeCapacityAdj LargeCapacity
StpQuality/Print Quality: None Draft *Standard High
Resolution/Resolution: *301x300dpi 150dpi 300dpi 600dpi
Duplex/2-Sided Printing: *None DuplexNoTumble DuplexTumble
StpiShrinkOutput/Shrink Page If Necessary to Fit Borders: *Shrink Crop Expand
StpColorCorrection/Color Correction: *None Accurate Bright Hue Uncorrected
Desaturated Threshold Density Raw Predithered
StpBrightness/Brightness: 0 100 200 300 400 500 600 700 800 900 *None 1100
1200 1300 1400 1500 1600 1700 1800 1900 2000 Custom.REAL
StpContrast/Contrast: 0 100 200 300 400 500 600 700 800 900 *None 1100 1200
1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700
2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 Custom.REAL
StpImageType/Image Type: None Text Graphics *TextGraphics Photo LineArt

列表 10. 检查打印机选项

大多数的 GUI 应用程序有一个打印对话框,通常你可以使用 文件 >打印 菜单去选择它。图 1 展示了在 GIMP 中的一个示例,GIMP 是一个图像处理程序。

Printing from the GIMP

图 1. 在 GIMP 中打印

到目前为止,我们所有的命令都是隐式指向到本地的 CUPS 打印服务器上。你也可以通过指定 -h 选项和一个端口号(如果不是 CUPS 的默认端口号 631 的话)将打印转向到另外一个系统上的服务器。

CUPS 和 CUPS 服务器

CUPS 打印系统的核心是 cupsd 打印服务器,它是一个运行的守护进程。CUPS 配置文件一般位于 /etc/cups/cupsd.conf/etc/cups 目录也有与 CUPS 相关的其它的配置文件。CUPS 一般在系统初始化期间启动,根据你的发行版不同,它也可能通过位于 /etc/rc.d/init.d 或者 /etc/init.d 目录中的 CUPS 脚本来控制。对于 最新使用 systemd 来初始化的系统,CUPS 服务脚本可能在 /usr/lib/systemd/system/cups.service 中。和大多数使用脚本的服务一样,你可以停止、启动、或者重启守护程序。查看我们的教程:学习 Linux,101:运行级别、引导目标、关闭、和重启动,了解使用初始化脚本的更多信息。

配置文件 /etc/cups/cupsd.conf 包含一些管理参数,比如访问打印系统、是否允许远程打印、本地打印池文件等等。在一些系统上,第二部分单独描述了打印队列,它一般是由配置工具自动生成的。列表 11 展示了一个默认的 cupsd.conf 文件中的一些条目。注意,注释是以 # 字符开头的。默认值通常以注释的方式显示,并且可以通过删除前面的 # 字符去改变默认值。

# Only listen for connections from the local machine.
Listen localhost:631
Listen /var/run/cups/cups.sock

# Show shared printers on the local network.
Browsing On
BrowseLocalProtocols dnssd

# Default authentication type, when authentication is required...
DefaultAuthType Basic

# Web interface setting...
WebInterface Yes

# Set the default printer/job policies...
<Policy default>
 # Job/subscription privacy...
 JobPrivateAccess default
 JobPrivateValues default
 SubscriptionPrivateAccess default
 SubscriptionPrivateValues default

 # Job-related operations must be done by the owner or an administrator...
 <Limit Create-Job Print-Job Print-URI Validate-Job>
 Order deny,allow
 </Limit>

列表 11. 默认的 /etc/cups/cupsd.conf 文件的部分内容

可以用在 cupsd.conf 中使用的文件、目录、和用户配置命令,现在都存储在作为替代的 cups-files.conf 中。这是为了防范某些类型的提权攻击。列表 12 展示了 cups-files.conf 文件中的一些条目。注意,正如在文件层次结构标准(FHS)中所期望的那样,打印池文件默认保存在文件系统的 /var/spool 目录中。查看 man 页面了解 cupsd.confcups-files.conf 配置文件的更多信息。

# Location of the file listing all of the local printers...
#Printcap /etc/printcap

# Format of the Printcap file...
#PrintcapFormat bsd
#PrintcapFormat plist
#PrintcapFormat solaris

# Location of all spool files...
#RequestRoot /var/spool/cups

# Location of helper programs...
#ServerBin /usr/lib/cups

# SSL/TLS keychain for the scheduler...
#ServerKeychain ssl

# Location of other configuration files...
#ServerRoot /etc/cups

列表 12. 默认的 /etc/cups/cups-files.conf 配置文件的部分内容

列表 12 提及了 /etc/printcap 文件。这是 LPD 打印服务器的配置文件的名字,并且一些应用程序仍然使用它去确定可用的打印机和它们的属性。它通常是在 CUPS 系统上自动生成的,因此,你可能没有必要去修改它。但是,如果你在诊断用户打印问题,你可能需要去检查它。列表 13 展示了一个示例。

# This file was automatically generated by cupsd(8) from the
# /etc/cups/printers.conf file. All changes to this file
# will be lost.
HL-2280DW|Brother HL-2280DW:rm=atticf27:rp=HL-2280DW:
anyprint|Any available printer:rm=atticf27:rp=anyprint:
XP-610|EPSON XP-610 Series:rm=atticf27:rp=XP-610:

列表 13. 自动生成的 /etc/printcap

这个文件中的每一行都有一个打印机名字、打印机描述,远程机器(rm)的名字、以及那个远程机器上的远程打印机(rp)。老的 /etc/printcap 文件也描述了打印机的能力。

文件转换过滤器

你可以使用 CUPS 打印许多类型的文件,包括明文的文本文件、PDF、PostScript、和各种格式的图像文件,你只需要提供要打印的文件名,除此之外你再无需向 lprlp 命令提供更多的信息。这个神奇的壮举是通过使用过滤器来实现的。实际上,这些年来最流行的过滤器就就叫做 magicfilter(神奇的过滤器)。

当打印一个文件时,CUPS 使用多用途因特网邮件扩展(MIME)类型去决定合适的转换过滤器。其它的打印数据包可能使用由 file 命令使用的神奇数字机制。关于 file 或者神奇数的更多信息可以查看它们的 man 页面。

输入文件被过滤器转换成中间层的光栅格式或者 PostScript 格式。一些作业信息,比如打印数量也会被添加进去。数据最终通过一个后端发送到目标打印机。还有一些可以用手动过滤的输入文件的过滤器(如 a2ps 或 dvips)。你可以通过这些过滤器获得特殊格式的结果,或者去处理一些 CUPS 原生并不支持的文件格式。

添加打印机

CUPS 支持多种打印机,包括:

  • 本地连接的并行口和 USB 口打印机
  • 因特网打印协议(IPP)打印机
  • 远程 LPD 打印机
  • 使用 SAMBA 的 Microsoft® Windows® 打印机
  • 使用 NCP 的 Novell 打印机
  • HP Jetdirect 打印机

当系统启动或者设备连接时,现在的大多数系统都会尝试自动检测和自动配置本地硬件。同样,许多网络打印机也可以被自动检测到。使用 CUPS 的 web 管理工具(http://localhost:631或者http://127.0.0.1:631)去搜索或添加打印机。许多发行版都包含它们自己的配置工具,比如,在 SUSE 系统上的 YaST。图 2 展示了使用 localhost:631 的 CUPS 界面,图 3 展示了 Fedora 27 上的 GNOME 打印机设置对话框。

Using the CUPS web interface

图 2. 使用 CUPS 的 web 界面

Using printer settings on Fedora 27

图 3. Fedora 27 上的打印机设置

你也可以从命令行配置打印机。在配置打印机之前,你需要一些关于打印机和它的连接方式的基本信息。如果是一个远程系统,你还需要一个用户 ID 和密码。

你需要去知道你的打印机使用什么样的驱动程序。不是所有的打印机都支持 Linux,有些打印机在 Linux 上压根就不能使用,或者功能受限。你可以去 OpenPrinting.org 去查看是否有你的特定的打印机的驱动程序。lpinfo 命令也可以帮你识别有效的设备类型和驱动程序。使用 -v 选项去列出支持的设备,使用 -m 选项去列出驱动程序,如列表 14 所示。

[ian@atticf27 ~]$ lpinfo -m | grep -i xp-610
lsb/usr/Epson/epson-inkjet-printer-escpr/Epson-XP-610_Series-epson-escpr-en.ppd.gz
EPSON XP-610 Series, Epson Inkjet Printer Driver (ESC/P-R) for Linux
[ian@atticf27 ~]$ locate "Epson-XP-610_Series-epson-escpr-en.ppd.gz"
/usr/share/ppd/Epson/epson-inkjet-printer-escpr/Epson-XP-610_Series-epson-escpr-en.ppd.gz
[ian@atticf27 ~]$ lpinfo -v
network socket
network ipps
network lpd
network beh
network ipp
network http
network https
direct hp
serial serial:/dev/ttyS0?baud=115200
direct parallel:/dev/lp0
network smb
direct hpfax
network dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/
network dnssd://EPSON%20XP-610%20Series._ipp._tcp.local/?uuid=cfe92100-67c4-11d4-a45f-ac18266c48aa
network lpd://BRN001BA98A1891/BINARY_P1
network lpd://192.168.1.38:515/PASSTHRU

列表 14. 可用的打印机驱动程序

这个 Epson-XP-610\_Series-epson-escpr-en.ppd.gz 驱动程序在我的系统上位于 /usr/share/ppd/Epson/epson-inkjet-printer-escpr/ 目录中。

如果你找不到驱动程序,你可以到打印机生产商的网站看看,说不定会有专用的驱动程序。例如,在写这篇文章的时候,Brother 就有一个我的 HL-2280DW 打印机的驱动程序,但是,这个驱动程序在 OpenPrinting.org 上还没有列出来。

如果你收集齐了基本信息,你可以如列表 15 所示的那样,使用 lpadmin 命令去配置打印机。为此,我将为我的 HL-2280DW 打印机创建另外一个实例,以便于双面打印。

[ian@atticf27 ~]$ lpinfo -m | grep -i "hl.*2280"
HL2280DW.ppd Brother HL2280DW for CUPS
lsb/usr/HL2280DW.ppd Brother HL2280DW for CUPS
[ian@atticf27 ~]$ lpadmin -p HL-2280DW-duplex -E -m HL2280DW.ppd \
> -v dnssd://Brother%20HL-2280DW._pdl-datastream._tcp.local/ \
> -D "Brother 1" -o sides=two-sided-long-edge
[ian@atticf27 ~]$ lpstat -a
anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST
HL-2280DW accepting requests since Tue 30 Jan 2018 10:56:10 AM EST
HL-2280DW-duplex accepting requests since Wed 31 Jan 2018 11:41:16 AM EST
HXP-610 accepting requests since Mon 29 Jan 2018 10:34:49 PM EST

列表 15. 配置一台打印机

你可以使用带 -c 选项的 lpadmin 命令去创建一个仅用于双面打印的新分类,而不用为了双面打印去创建一个打印机的副本。

如果你需要删除一台打印机,使用带 -x 选项的 lpadmin 命令。

列表 16 展示了如何去删除打印机和创建一个替代类。

[ian@atticf27 ~]$ lpadmin -x HL-2280DW-duplex
[ian@atticf27 ~]$ lpadmin -p HL-2280DW -c duplex -E -D "Duplex printing" -o sides=two-sided-long-edge
[ian@atticf27 ~]$ cupsenable duplex
[ian@atticf27 ~]$ cupsaccept duplex
[ian@atticf27 ~]$ lpstat -a
anyprint accepting requests since Mon 29 Jan 2018 01:17:09 PM EST
duplex accepting requests since Wed 31 Jan 2018 12:12:05 PM EST
HL-2280DW accepting requests since Wed 31 Jan 2018 11:51:16 AM EST
XP-610 accepting requests since Mon 29 Jan 2018 10:34:49 PM EST

列表 16. 删除一个打印机和创建一个类

你也可以使用 lpadmin 或者 lpoptions 命令去设置各种打印机选项。详细信息请查看 man 页面。

排错

如果你有打印问题,尝试下列的提示:

  • 确保 CUPS 服务器正在运行。你可以使用 lpstat 命令,如果它不能连接到 cupsd 守护程序,它将会报告一个错误。或者,你可以使用 ps -ef 命令在输出中去检查是否有 cupsd。
  • 如果你试着排队一个打印作业而得到一个错误信息,指示打印机不接受这个作业,你可以使用 lpstat -a 或者 lpc status 去检查那个打印机是否接受作业。
  • 如果一个队列中的作业没有打印,使用 lpstat -plpc status 去检查那个打印机是否接受作业。如前面所讨论的那样,你可能需要将这个作业移动到其它的打印机。
  • 如果这个打印机是远程的,检查它在远程系统上是否存在,并且是可操作的。
  • 检查配置文件,确保特定的用户或者远程系统允许在这个打印机上打印。
  • 确保防火墙允许远程打印请求,是否允许从其它系统到你的系统,或者从你的系统到其它系统的数据包通讯。
  • 验证是否有正确的驱动程序。

正如你所见,打印涉及到你的系统中的几个组件,甚至还有网络。在本教程中,基于篇幅的考虑,我们仅能给你的诊断提供了几个着手点。大多数的 CUPS 系统也有实现我们所讨论的命令行功能的图形界面。一般情况下,这个界面是从本地主机使用浏览器指向 631 端口(http://localhost:631或http://127.0.0.1:631)来访问的,如前面的图 2 所示。

你可以通过将 CUPS 运行在前台而不是做为一个守护进程来诊断它的问题。如果有需要,你也可以通过这种方式去测试替代的配置文件。运行 cupsd -h 获得更多信息,或者查看 man 页面。

CUPS 也带有一个访问日志和错误日志。你可以在 cupsd.conf 中使用 LogLevel 语句来改变日志级别。默认情况下,日志是保存在 /var/log/cups 目录。它们可以在浏览器界面(http://localhost:631)下,从 Administration 选项卡中查看。使用不带任何选项的 cupsctl 命令可以显示日志选项。也可以编辑 cupsd.conf 或者使用 cupsctl 去调整各种日志参数。查看 cupsctl 命令的 man 页面了解更多信息。

在 Ubuntu 的 Wiki 页面上的 调试打印问题 页面也是一个非常好的学习的地方。

这就是关于打印和 CUPS 的介绍。


via: https://www.ibm.com/developerworks/library/l-lpic1-108-4/index.html

作者:Ian Shields 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

CUPS 是一个基于标准的、开源打印系统,是由 苹果公司 为 OS X® 和其它的 UNIX® 类的操作系统所开发的。CUPS 使用互联网打印协议 (IPP) 来支持本地和网络打印机。

CUPS 发布于十五年前

CUPS 1.0 发布于 1999/10/1,在十五年后的今天发布了2.0.0,与1.0相比,已经有了很多改变。最初发布的 1.0 支持 IPP/1.0、PostScript 和 CUPS Raster 驱动,支持网络打印机、并口打印机、串口打印机和 SCSI 打印机。它甚至还包括了一份 GNU Ghostscript 的副本,以支持当时的业界标准 PostScript。

十五年后的今天,它支持了 IPP/2.1、 PDF 工作流、Bonjour、 USB 打印机、 持久任务历史、多文件任务、认证、加密、策略、限额、每打印机共享控制,以及 Web 管理界面。甚至连官网 CUPS.org 也大幅度的改版了,您可以从上面的链接查看 Wayback Machine 存储的网站历史归档。

今天我们对打印的关注点和1999年不同了,无线打印和移动计算已经无所不在。我们不再需要到处去找打印机驱动,而是希望打印机可以通过标准的协议和格式以完美的品质输出,这是我们十五年来一直梦想的。现今,我们的打印作品也更加引人注目和独具风格。

感谢每一位让 CUPS 今天这样成功的人,请继续帮助我们做的更好!

Happy Printing!

-- Mike Sweet,CUPS 的创造者

下载

点此下载最新的 2.0.0 正式版驱动: https://www.cups.org/software/2.0.0/cups-2.0.0-source.tar.bz2

FAQ

如果您遇到了问题,可以看看这个: https://www.cups.org/faq.php

对于那些既有Windows电脑又有Ubuntu电脑但却只有一台打印机的用户,这篇博文向你展示如何在Windows中共享一个打印机,并允许Ubuntu使用它来打印。

几乎所有的打印机都默认支持Windows系统。许多打印机生产商都为Windows生产打印机,但为包括Ubuntu在内的Linux系统生产的并不多。所以,假如你有一台支持Windows的打印机,你可以在Windows机器上分享它,然后让其它系统来使用它来打印。

在几年之前,我遇到了这个问题,那时大多数打印机生产商不支持Linux系统。我有一台老式的只支持Windows和Mac OS X但却不支持Linux的打印机。(译注:除非是特别冷门的打印机,现在一般都可以在Linux进行打印操作了。在译者看来,本文的理由不成立,不过做法成立。)

我在我的Windows机器上安装了打印机驱动,然后它就可以很好的工作咯。我的Windows机器使用它来打印非常好,但是我的Ubuntu却无法使用它来打印,因为打印机并不支持LAN接口。

所以,我在Windows上共享该打印机,然后我的Ubuntu机器就可以使用合适的字体和风格进行打印咯。假如你也遇到类似的情景,你可以按照下面的指导来操作。

首先,登入Windows,右击你要共享的打印机,然后点击‘Printer properties(打印机属性)

接着,选择“Sharing(共享)”标签页,勾选‘Share this printer(共享这台打印机)’复选框来共享。记住共享打印机的名字,因为你要使用这个共享名来连接这台打印机。

最后,以管理员权限运行命令行终端,运行以下命令以便于文件和打印机可以通过防火墙实现共享。

netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes

接着,登入Ubuntu中,选择顶部面板右边的齿轮,然后选择系统设置...

系统设置打开后,选择打印机,然后点击添加。当跳出来一个窗口让你选择设备时,选择‘Windows Printer via SAMBA(使用SAMBA的Windows打印机)’。

键入Windows电脑的IP地址或者主机名,后面接着键入共享的打印机名。你可能需要键入你的windows验证信息(用户名和密码)。点击浏览来验证你是否可以看到打印机,当你完成这些后,就可以点击下一步继续。

接着,选择打印机品牌和型号。假如你在列表中看不到特定的型号,选择一个最接近它的然后继续。

以上这些都搞定了之后,你的打印机就已安装好,可以使用喽。

好好享受吧!


via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tips-print-from-shared-windows-printers/

译者:Linux-pdz 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

1938年10月22曰,纽约市皇后区阿斯托里亚的一间公寓内,专利代理人卡尔逊(Chester Carlson)和无所事事的奥地利物理学家柯乃伊(Otto Kornei)利用周六的一个上午制作了世界上第一张干式复印件(卡尔逊经过3年研究,在1938年成功实现世界上第一个静电复印实验——译者注),从此开创了计算机的新时代!这是一个改变世界的时刻,这是一个激动人心的时刻!然后他们就去吃午餐了:D

75年来,复印产业成了美国公司的中流砥柱。即使在平板电脑和PDF大行其道的今天,去年一年时间,“多功能打印机”销量为1900万台,交易额为309亿美元(来自Gartner公司的数据)。你也许忘了上次使用打印机是在什么时候了,但IDC分析师Angèle Boyd指出,去年全球打印了3万亿张纸,其中1万亿张来自美国。在一些公司里,一个员工每个月打印300到400张纸是再平常不过的事了。打印机生意保持令人吃惊的强大,其革命性已经远超当年卡尔逊刚发明模拟式静电复印机的时候了。

静电打印机提升了企业的生产力,增强了商务交流。Gartner 公司负责调查、绘图和打印业务的副总裁Ken Weilerstein指出,大部分白领的工作任务就是以各种各样的形式阅读和创建文档。Web原本是基于超文本,链接计算机上文档的一种方法,后来由Tim Burners-Lee在1991年将其引入到互联网。

Ken Weilerstein说:“打印机改变了人们处理文档的方式,在人类的办公史上,这可是一件大事。”

施乐的崛起

施乐(Xerox)称得上是最有名的打印机公司,在打印机市场持很大的占有率。就像人们谈搜索时会说“上网google一下”,谈到打印时会说“我需要xerox(复印)这份文档”,施乐公司已经渗入人们的日常生活中了。在科技领域,20世纪70年代,施乐由于在帕罗奥多研究中心(PARC)发明的用户图形界面和鼠标而声名远扬,乔帮主当年参观PARC后将很多点子用到了他的苹果机上(其中一个就是PARC研发的图形用户界面——译者注)。另外,激光打印机也借鉴了卡尔逊的发明。

刚开始,施乐并不叫施乐。位于纽约市康涅狄格州罗切斯特市的哈洛伊德(Haloid)公司看中静电打印技术,收购了卡尔逊的这项发明,之后才更名为“施乐”(在这中间,哈洛伊德还曾更名为“哈洛伊德施乐”——译者注)。

我们继续卡尔逊的故事,这位发明家和专利代理人对手工复印法律文件感到无比厌烦,他认为世上肯定有一种复印方法能让他摆脱油墨复写纸,或者那种传统使用湿的感光纸和水的又乱又慢还昂贵的照相法。 施乐公司的历史档案管理员Ray Brewer说卡尔逊的这个涉及锌片锌粉(估计是作为感光材料——译者注)的发明即简单又容易复制。

(Weilerstein解释说,静电复印的处理过程就是这么个回事:一张纸放在光源底下,光源会扫描整张纸,记下复印原件的信息。光线通过一组透镜照到涂有光敏材料的静电成像硒鼓上,硒鼓被曝光部分会改变其静电荷,复印原件的信息被复制到硒鼓上。之后硒像旋转,静电荷所在的地方会吸引墨粉微粒,从而在硒鼓上画出原件图像。然后硒鼓将墨粉转移到一张纸上,并加压加热,就像熨斗一样。最后,硒鼓旋转,多余的墨粉被刮下来,下一页依此循环。)

或许这个过程太简单了点。当卡尔逊在庆祝他们的突破时,柯乃伊并没有看到这一点。当柯乃伊与卡尔逊的合同到期后,他们就失去了联系。“柯乃伊没看到卡尔逊发明的意义”,Brewer说道。柯乃伊将会终身后悔。后来卡尔逊给了柯乃伊100股施乐的股票,而柯乃伊马上就把它们卖了,为此他少嫌了至少100万美元。

多年来,卡尔逊向多家公司推销他的专利,包括IBM和柯达,但是没人理他。Brewer认为,这是因为卡尔逊只是一个研发人员,而不是一个销售人员:“卡尔逊推销他的专利的方式非常枯燥和专业,这种方式对于将他的专利推销到市场没有任何帮助,即使是技术工程师也被卡尔逊的表达搞得迷迷糊糊”。

卡尔逊的大突破发生在1946年,哈洛伊德公司研发主管John Dessauer读到了关于卡尔逊发明的文章。哈洛伊德本来是做照相纸的,“当时的照相领域发展非常迅速”,Brewer说。1948年,哈洛伊德为卡尔逊的发明找了一个比较容易记住的名字:静电复印技术(electrophotography)。公司打印部门定名为施乐(xerography),取希腊词根“xeros(干)”和“graphos(写)”组成的新词。

在20世纪50到60年代之间,施乐打印机成为办公必备用品。这项改革节省了时间和金钱。以前,复印文档的唯一方法就是使用影印机,那是相当杂乱和昂贵的操作,更糟糕的是,那种油墨纸一次最多只能复制两份。假如你想复印更多份,你必须重新打印一份出来,“并且秘书和领导希望所有的复印件都一模一样,”Brewer又出来讲话了。这就是施乐复印术的又一个好处:多份一模一样的复印件。在email和即时通信出来之前,这种复印术为部门间交流提供机会。施乐复印术催生了备忘录、办公简讯以及生日贺卡等新鲜玩意儿。

914型复印机是施乐公司最成功的产品。在60年代到70年代初,施乐共卖掉了超过20万台这个型号的复印机,《财富》杂志将它评为“美国史上最成功的产品”。Weilerstein称施乐为“你后悔没买它的股票”的公司。

这是一部大概在1960年播出的广告:http://www.youtube.com/embed/kNGdqC7QJYI

现代计算机时代

直到80年代PC机开始代替打字机,施乐复印机的疯狂时代才告终结。人们依靠卡尔逊的发明创造了激光打印机,从此淘汰了功能单一的复印机。这个时候,已经没有人会把施乐的机器简单地称为复印机了,它们早已变成多功能打印机。

而这还不是施乐公司生意上所面临的唯一挑战。70年代曰本公司提供了与施乐复印机同性能但更便宜的产品。Weilerstein说:施乐失去了复印机领域的垄断地位,但凭借其在激光打印机产业的发展,施乐依然站在科技的前沿。到90年代,施乐开发Docutech系统,这种技术让你从打印机年代直接进入到印刷机年代。之后施乐又研发了iGen2000,这是种能彩印的激光打印机,能在1分钟内打印100页复印件。“然而在2000年之后的一段时间内,施乐公司再没有突出的作为,”Weilerstein说道,“并且他们还遭遇经济危机。”

施乐没有像它在罗彻斯特的邻居——伊士曼.柯达一样遭遇打击。其时的柯达处于相当阴暗的时期

部分原因是,与胶卷不同,文档打印依然是一个高利润的生意。还是有些部门,包括联邦政府,这些部门的员工每个月需要打印上千份文档。Weilerstein 承认随着时代发展,打印业务将继续下降:“打印业务也许是老一代的产品”,但是他又说,“但它还不会轻易消失。”

鉴于市场对多功能打印机的持续需求,慢慢强大起来的施乐终于有机会将自己转型成数字文档和服务的供应商。在过去的十年里,这家公司为打印管理服务(MPS)生意做了大量基础性工作。企业的所有有关打印的业务都可以外包给MPS来完成,减少了IT部门监控的任务。

然而随着纸打印业务长期的持续下滑,施乐试着预测市场的走向。“现在的问题是他们接下来会怎么做,”Weilerstein说,“他们会取消管理你的打印机的念头,转而为你提供另外一种服务:按你的意愿帮你处理数字形式的文档。”

“我认为IT部门实行无纸办公是一个非常大的需求”,来自IDC(国际数据公司)的Boyd说,“很多公司,包括施乐,都在积极为他们提供解决方案。”

Weilerstein的观点是当所有的交流都是依赖文档时,施乐有机会成为“内容管理服务(MCS)”生意的领导者。这种服务能让企业减少使用打印机。Weilerstein在白皮书上写到:“虽然纸质文档依旧是交流的有效载体,但是当员工将不同来源的信息打印成纸质文档,并想将它们用于不同目的时,太多的文档反而无法形成有效的交流。”

在广播信息都是靠传真接收的时代,MCS应该接受广告订单;或者提供一种方式,将化工厂员工随手记下的笔记传到可供查阅的数码产品中。

卡尔逊的遗产

在推动无纸办公的过程中,施乐不应该只是将它的生意转型,还应该帮助企业内减少不必要的浪费。然而,施乐还面临大量的竞争对手,最大的对手就是Adobe公司,PDF文档格式的发明者。

Adobe过去是做桌面打印(即通过电脑等电子手段进行文档编辑——译者注)而非纸质打印的,似乎比施乐有天然的优势。然后是苹果公司,自己赖以生存的老技术被新技术取代后,能迅速变成新技术的领导者,这在历史上是很罕见的。

即使施乐最终失败了,卡尔逊在科技史上的贡献也是毋庸置疑的。卡尔逊的其他发明:带有流水沟的雨衣、洗鞋器等,但是他最重要的发明是一个证据,证明市场是如何回报人的坚持和开阔的视野。他的去世向我们阐明了我们对公众人物的内在生活了解是如此的少。

1968年,卡尔逊和柯乃伊在阿斯托里亚的公寓内辛辛苦苦地发明静电复印技术的30年之后,卡尔逊从罗彻斯特家里回到纽约,去参加一个商业会议。他发现离开会还有一些时间,于是他走进一家电影院观看《骑虎人(He Who Rides a Tiger)》,主演是Tom Bell和Judi Dench。当电影结束时,一个服务员看见了卡尔逊,看起来似乎正在位子上睡觉,事实并非如此。卡尔逊因心脏病去世——那是他那年第二次心脏病发作。

他死后,人们估计他拥有大约1.5亿美元的遗产,这笔钱使他成为1968年全美最有钱的富翁之一。然而他们发现错了,卡尔逊已将他的绝大部分财产都捐了出去。他曾对妻子说他对那种成为商业巨头的野心表示很不理解,他只想作为一个穷人死去。

图片来源:施乐公司

via: http://mashable.com/2013/10/13/xerox-history-of-copying/

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:chenjintao 校对:jasminepeng