从 Linux 终端打印文件
<p><img title="从 Linux 终端打印文件" alt="从 Linux 终端打印文件" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/bc484a6fd6526ca1d7a722f081b7f561.jpg" width="auto"></p>
<p>
使用 lpr 命令在终端中打印文件。</p>
<p>
在 Linux 上打印很容易,但有时感觉要做很多工作,比如启动应用程序、打开文件、在菜单中找到打印选项,单击确认按钮等等。当你是一个终端用户时,通常希望使用简单的触发器执行复杂的操作。打印很复杂,但没有什么比 <code>lpr</code> 命令更简单了。</p>
<h3 class="mume-header" id="%E4%BD%BF%E7%94%A8-lpr-%E5%91%BD%E4%BB%A4%E6%89%93%E5%8D%B0">
使用 lpr 命令打印</h3>
<p>
使用 <code>lpr</code> 命令在终端打印文件:</p>
<ol class="linenums">
<li class="L0">
<code><span class="pln">$ </span><span class="kwd">lpr</span><span class="pln"> myfile</span><span class="pun">.</span><span class="pln">odt</span></code>
</li>
</ol>
<p>
如果失败的话,你需要设置默认打印机或手动指定打印机。</p>
<h3 class="mume-header" id="%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E6%89%93%E5%8D%B0%E6%9C%BA">
设置默认打印机</h3>
<p>
根据我在 1984 年印刷的 Berkeley 4.2 手册的旧版本中找到的资料,<code>lpr</code> 命令会分页并将文件发送到打印机池,后者将数据传输到称为 <ruby>行式打印机<rt>line printer</rt></ruby> 的东西。</p>
<p>
<img title="从 Linux 终端打印文件" alt="从 Linux 终端打印文件" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/ff478e0ff508673520eecdcf78162d21.jpg" width="auto"></p>
<p class="article_img_desc">
<em>显示 LPR 命令信息的页面</em></p>
<p>
现在,最初的 <code>lpr</code> 命令已经无法满足,因为现代计算机可以访问多台打印机,而且是那些比点阵行式打印机复杂得多的打印机。现在有一个称为<ruby>通用 Unix 打印系统<rt>Common Unix Printing System</rt></ruby>(CUPS)子系统,可以跟踪你的计算机可以访问的所有打印机,计算机应该使用哪个驱动程序与每台打印机通信,默认使用哪台打印机等等。 CUPS 捆绑提供的 <code>lpr.cups</code> 或 <code>lpr-cups</code> 命令通常以符号链接到 <code>lpr</code>,允许你首先借助 CUPS 配置从终端打印。</p>
<p>
使用 <code>lpr</code> 打印文件,你应该首先设置默认打印机。你可以在系统的打印机设置中设置:</p>
<p>
<img title="从 Linux 终端打印文件" alt="从 Linux 终端打印文件" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/06ad50c1f2b066c01791f9afd8d45047.jpg" width="auto"></p>
<p class="article_img_desc">
<em>设置默认打印机对话框</em></p>
<p>
或者,你也可以使用 <code>lpadmin</code> 命令设置:</p>
<ol class="linenums">
<li class="L0">
<code><span class="pln">$ </span><span class="kwd">sudo</span><span class="pln"> lpadmin </span><span class="pun">-</span><span class="pln">d HP_LaserJet_P2015_Series</span></code>
</li>
<li class="L1">
<code><span class="pln">$ </span><span class="kwd">lpstat</span><span class="pln"> </span><span class="pun">-</span><span class="pln">v</span></code>
</li>
<li class="L2">
<code><span class="pln">device </span><span class="kwd">for</span><span class="pln"> HP_LaserJet_P2015_Series</span><span class="pun">:</span><span class="pln"> ipp</span><span class="pun">:</span><span class="com">//10.0.1.222:631/printers/HP_LaserJet_P2015_Series</span></code>
</li>
</ol>
<h3 class="mume-header" id="%E4%BD%BF%E7%94%A8%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E8%AE%BE%E7%BD%AE">
使用环境变量设置</h3>
<p>
你不能在没有管理员账户的系统上设置默认打印机,因为更改打印机默认设置是一项特权任务。在 <code>lpr</code> 借助 CUPS 找到目标打印机前,它会在系统中查询 <code>PRINTER</code> 环境变量。</p>
<p>
在本例中,<code>HP_LaserJet_P2015_Series</code> 是打印机的名称。将 <code>PRINTER</code> 设置为该值:</p>
<ol class="linenums">
<li class="L0">
<code><span class="pln">$ PRINTER</span><span class="pun">=</span><span class="pln">HP_LaserJet_P2015_Series</span></code>
</li>
<li class="L1">
<code><span class="pln">$ </span><span class="kwd">export</span><span class="pln"> PRINTER</span></code>
</li>
</ol>
<p>
一旦设置了 <code>PRINTER</code> 变量,你就可以打印了:</p>
<ol class="linenums">
<li class="L0">
<code><span class="pln">$ </span><span class="kwd">lpr</span><span class="pln"> myfile</span><span class="pun">.</span><span class="pln">pdf</span></code>
</li>
</ol>
<h3 class="mume-header" id="%E8%8E%B7%E5%8F%96%E8%BF%9E%E6%8E%A5%E7%9A%84%E6%89%93%E5%8D%B0%E6%9C%BA%E5%88%97%E8%A1%A8">
获取连接的打印机列表</h3>
<p>
你可以使用 <code>lpstat</code> 命令查看所有连接到系统接受打印任务的打印机:</p>
<ol class="linenums">
<li class="L0">
<code><span class="pln">$ </span><span class="kwd">lpstat</span><span class="pln"> </span><span class="pun">-</span><span class="pln">a</span></code>
</li>
<li class="L1">
<code><span class="pln">HP_LaserJet_P2015_Series accepting requests since </span><span class="typ">Sun</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">2021</span><span class="pln"> </span><span class="lit">10</span><span class="pun">:</span><span class="lit">11</span><span class="pun">:</span><span class="lit">02</span><span class="pln"> PM NZST</span></code>
</li>
<li class="L2">
<code><span class="pln">r1060 accepting requests since </span><span class="typ">Wed</span><span class="pln"> </span><span class="lit">18</span><span class="pln"> </span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">2021</span><span class="pln"> </span><span class="lit">04</span><span class="pun">:</span><span class="lit">43</span><span class="pun">:</span><span class="lit">57</span><span class="pln"> PM NZST</span></code>
</li>
</ol>
<h3 class="mume-header" id="%E6%89%93%E5%8D%B0%E5%88%B0%E4%BB%BB%E6%84%8F%E4%B8%80%E5%8F%B0%E6%89%93%E5%8D%B0%E6%9C%BA">
打印到任意一台打印机</h3>
<p>
将打印机添加到系统后,并且现在你知道如何识别它们了,你可以打印到其中任何一台,无论你是否设置了默认打印机:</p>
<ol class="linenums">
<li class="L0">
<code><span class="pln">$ </span><span class="kwd">lpr</span><span class="pln"> </span><span class="pun">-</span><span class="pln">P HP_LaserJet_P2015_Series myfile</span><span class="pun">.</span><span class="pln">txt</span></code>
</li>
</ol>
<h3 class="mume-header" id="%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E6%89%93%E5%8D%B0%E6%9C%BA">
如何定义打印机</h3>
<p>
CUPS 有一个友好的前端页面,可通过 Web 浏览器如 Firefox 访问。虽然它使用 Web 浏览器作为用户界面,但它实际上是在本机(一个称为 <code>localhost</code> 的位置)的 631 端口上提供服务。CUPS 管理连接到计算机的打印机,并将其配置存储在 <code>/etc/cups/priters.conf</code> 中。</p>
<p>
<code>printers.conf</code> 文件包含详细描述计算机可以访问的打印设备的定义。不要直接编辑它,但如果你想这样做,你必须先停止 <code>cupsd</code> 守护进程。</p>
<p>
一个典型的文件定义如下所示:</p>
<ol class="linenums">
<li class="L0">
<code><span class="tag"><Printer</span><span class="pln"> </span><span class="atn">r1060</span><span class="tag">></span></code>
</li>
<li class="L1">
<code><span class="pln">Info Ricoh 1060</span></code>
</li>
<li class="L2">
<code><span class="pln">Location Downstairs</span></code>
</li>
<li class="L3">
<code><span class="pln">MakeModel Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.6</span></code>
</li>
<li class="L4">
<code><span class="pln">DeviceURI lpd://192.168.4.8</span></code>
</li>
<li class="L5">
<code><span class="pln">State Idle</span></code>
</li>
<li class="L6">
<code><span class="pln">StateTime 1316011347</span></code>
</li>
<li class="L7">
<code><span class="pln">Type 12308</span></code>
</li>
<li class="L8">
<code><span class="pln">Filter application/vnd.cups-raw 0 -</span></code>
</li>
<li class="L9">
<code><span class="pln">Filter application/vnd.cups-raster 100 rastertogutenprint.5.2</span></code>
</li>
<li class="L0">
<code><span class="pln">Accepting Yes</span></code>
</li>
<li class="L1">
<code><span class="pln">Shared No</span></code>
</li>
<li class="L2">
<code><span class="pln">JobSheets none none</span></code>
</li>
<li class="L3">
<code><span class="pln">QuotaPeriod 0</span></code>
</li>
<li class="L4">
<code><span class="pln">PageLimit 0</span></code>
</li>
<li class="L5">
<code><span class="pln">KLimit 0</span></code>
</li>
<li class="L6">
<code><span class="pln">OpPolicy default</span></code>
</li>
<li class="L7">
<code><span class="pln">ErrorPolicy stop-printer</span></code>
</li>
<li class="L8">
<code><span class="tag"></Printer></span></code>
</li>
</ol>
<p>
在本例中,打印机的名称是 <code>r1060</code>,即 “Ricoh Aficio 1060”。</p>
<p>
<code>MakeModel</code> 属性是从 <code>lpinfo</code> 命令中提取的,该命令列出了系统上所有可用的打印机驱动程序。假设你知道要打印到 Ricoh Aficio 1060,那么你会发出以下命令:</p>
<ol class="linenums">
<li class="L0">
<code><span class="pln">$ lpinfo </span><span class="pun">-</span><span class="pln">m </span><span class="pun">|</span><span class="pln"> </span><span class="kwd">grep</span><span class="pln"> </span><span class="lit">1060</span></code>
</li>
<li class="L1">
<code><span class="pln">gutenprint</span><span class="pun">.</span><span class="lit">5.2</span><span class="pun">:</span><span class="com">//brother-hl-1060/expert Brother HL-1060 - CUPS+Gutenprint v5.2.11</span></code>
</li>
<li class="L2">
<code><span class="pln">gutenprint</span><span class="pun">.</span><span class="lit">5.2</span><span class="pun">:</span><span class="com">//ricoh-afc_1060/expert Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11</span></code>
</li>
</ol>
<p>
它会列出已安装的相关驱动程序。</p>
<p>
<code>MakeModel</code> 属性是结果的后半部分。在本例中为 <code>Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11</code>。</p>
<p>
<code>DeviceURI</code> 属性标识打印机在网络上的位置(或物理位置,例如 USB 端口)。在本例中,它是 <code>lpd://192.168.4.8</code>,因为我使用 <code>lpd</code> 协议将数据发送到一台网络打印机。在我的另一个系统上,我有一个通过 USB 连接的 HP LaserJect 打印机,因此 <code>DeviceURI</code> 是 <code>hp:/usb/HP_LaserJet_P2015_Series?serial=00CNCJM26429</code>。</p>
<h3 class="mume-header" id="%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E6%89%93%E5%8D%B0">
在终端中打印</h3>
<p>
将作业发送到打印机是一个简单的过程,只要你了解连接到系统的设备以及如何识别它们。在终端打印非常快速、高效,并且易于编写脚本或作为批处理作业完成。试试看!</p>
<p>
原文链接:https://linux.cn/article-14099-1.html</p>
頁:
[1]