⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printing-howto.txt

📁 linux-bible.rar linux-bible.rar
💻 TXT
📖 第 1 页 / 共 4 页
字号:
   这个情况已经开始在改变. SVR4 一派的系统, 包括升阳的 Solaris 在内所附的   是个完全不同的印表机连线作业套件, 这个套件以 lpsched 为中心. 另外还有迹   象显示有些 Linux 厂商会改成提供新得多而且免费的 LPRng. LPRng 的程式码远   比旧有的 lpd 来的有规划, 在大量安装时也较为容易管理□ 它甚至可以真的称   得上安全 - 没有 SUID 的执行档, 还支援透过 PGP 或 Kerberos 做使用者验   证.      虽然有这些新选择, 目前 lpd 对大部份的 Linux 使用者而言应该是足够了. 虽   然它不是最新潮的系统, 但只要设定好就没问题, 而且它广为人们所熟悉, 同时   很多的 Unix 书籍也提供了大量的说明文件.      如果你想知道更多有关 LPRng 的资讯, 请到 [14]LPRng 的网页. 在未来这份   HOWTO 中将会包含使用 LPRng 以及使用普通 lpd 的相关讯息.   6. 基本运作方式   为了让列印功能能够正常运作, 你需要了解 lpd 系统是如何运作的.      Lpd 是 Line Printer Daemon 的缩写, 根据上下文指的可以是监控程式(the   daemon) 本身或是执行印表机连线作业的全套程式. 包括了有:      [15]lpd          印表机连线作业监控程式(The spooling daemon). 有一个负责控制所有          事情, 另外针对每一部列印中的印表机也会执行一份.             [16]lpr          使用者的列印指令. Lpr 会联络 lpd 并将列印工作送进列印暂存器.             [17]lpq          列出伫列中等待列印的工作.             [18]lpc          Lpd 系统控制指令. 你可以用 lpc 来控制伫列, 如停止, 开始, 调整顺          序等等.             [19]lprm          lprm 可以从伫列中移除一件列印工作.             那这一切是如何凑在一起的呢? 当系统开机时会执行 lpd. 它会检查   /etc/printcap 中有那些印表机要设立列印暂存器. 每当有使用者执行 lpr   时, lpr 会透过 /dev/printer 的插座(socket) 找到 lpd, 并将要列印的档案和   一些关於列印的人以及列印方法的资讯传送给 lpd. 然後 lpd 再将档案送到的适   当印表机.      lp 系统设计的时候, 大部份的印表机都是列式印表机(line printer) - 也就是   说, 大部份的使用者是列印纯文字格式(plain ascii). 结果就是我们还得做一些   额外的命令稿处理(scripting) 才能使 lpd 适用於现今的列印工作, 通常是   PostScript, 或是文字格式, 或是 dvi, ...   7. 基本系统设定7.1 传统的 lpd 设定   最基本的 lpd 设定只能让系统伫列档案然後列印, 而不管你的印表机能否认得这   些档案, 可能也无法让你产生吸引人的报表. 但无论如何, 这是跨向理解的第一   步. 所以让我们看下去.      基本上, 要增加一个列印伫列, 你必须在 /etc/printcap 中加一笔记录, 以及在   /var/spool/lpd 之下建立一个列印暂存器的工作目录(spool directory).      /etc/printcap 中的记录看起来像这个样子:   # LOCAL djet500lp|dj|deskjet:\        :sd=/var/spool/lpd/dj:\        :mx#0:\        :lp=/dev/lp0:\        :sh:   这个例子定义了一个名为 lp, dj, 或是 deskjet 的列印暂存器, 暂存器的工作   目录在 /var/spool/lpd/dj, 没有单一工作大小的上限, 列印的装置是   /dev/lp0, 而且不会在每一个工作之前加上标题页 (有著列印人的姓名之类的资   料).      现在就去看看 [20]printcap. 的线上手□.      上面这个例子看起来非常简单, 但是有一个问题 - 除非 DeskJet 500 能看懂我   送出去的档案, 否则便会印出乱码. 举例来说, 假如送一个传统的 Unix 文字档   案给 deskjet 会导致新行字元(newline) 被逐字列印, 而得下面的结果:   This is line one.                 This is line two.                                  This is line three.   同样的, 列印一个 PostScript 档到这个列印暂存器会得到同样阶梯状的   PostScript 命令列表, 而不是我们需要的结果.      很显然我们还需要些什麽, 这就是 filtering 的目的. 看过 printcap 线上手□   的比较细心的读者可能已经注意到 if 及 of 这两个属性. 其中的 if, input   filter 就是我们现在所需要的.      假使我们写个短短的 shell script 叫 filter 使之在新行字元之前加上回车字   元(carriage return), 就可以消除阶梯状. 所以我们必须在前面的 printcap 的   记录中加上 if 这一行:   lp|dj|deskjet:\        :sd=/var/spool/lpd/dj:\        :mx#0:\        :lp=/dev/lp0:\        :if=/var/spool/lpd/dj/filter:\        :sh:   这个短短的 filter script 可以是:   #!perl# The above line should really have the whole path to perl# This script must be executable: chmod 755 filterwhile(<STDIN>){chop $_; print "$_\r\n";};# You might also want to end with a form feed: print "\f";   假如我们照上面的方法, 我们就会得到一个能正常印出普通 Unix 文字档的列印   暂存器. (还有其他四百万种更好的方法来写这个命令稿, 但是这个很适合举例,   你可以自己写一个更有效率的.)      剩下的唯一问题是只能印出纯文字档实在是不够好 - 如果能够印出 PostScript   或是其它格式化的或是图形输出就更棒了. 这可以做的到, 也很容易做到. 方法   就是延伸前面的 filter. 如果你写出一个能接受任意档案格式, 然後针对每种情   况都可以产生 DeskJet 所要的资料的 filter, 那你就有了一个智慧型的列印暂   存器.      这种 filter 称之为 magic filter. 你无需自己写一个, 除非你要印的东西很奇   怪. 网路上已经有很多写好的, APS Filter 就是非常棒的一个. 也说不定你的   Linux 发行版本(distribution) 已经包括了一个印表机设定工具使得这一切都很   容易.   7.2 档案权限   应大众要求, 我把我系统上一些相关档案的权限列出. 还有其它更好的设定方   法, 最好是只将执行档设为 SGID 而不要设为 SUID root, 但这是我系统预设的   设定, 而且运作正常.(老实说, 如果你的厂商连可以运作的 lpd 都无法提供, 你   就有苦头吃了.)   -r-sr-sr-x   1 root     lp    /usr/bin/lpr*-r-sr-sr-x   1 root     lp    /usr/bin/lprm*-rwxr--r--   1 root     root  /usr/sbin/lpd*-r-xr-sr-x   1 root     lp    /usr/sbin/lpc*drwxrwxr-x   4 root     lp    /var/spool/lpd/drwxr-xr-x   2 root     lp    /var/spool/lpd/lp/   Lpd 目前必须以 root 身份执行才能连接到低号(连接埠号低於 1024)的 lp 服务   埠. 可能应该改成在连接後将使用者身份变成 lp 或其他身份, 但是我不认为现   在有这样做. 令人有些失望.   8. 取得列印软体   许多预先写好的 filter 套件 (以及其它与印表有关的软体) 在 [21]SunSite 都   有提供. 像是 psutils, a2ps, mpage, dvitodvi, flpr 等工具都可以在那儿找   得到.      有一阵子, 很多套件都想让设定印表机简单一点. 这些套件可能都还在, 但是其   中最新最好就属 Andreas Klemm 的 APS Filter 套件了. 这个套件提供了一个选   单式的 printcap 设定程式, 而且几乎可以处理任何你所能想到的输入格式. 假   使你的厂商并未提供一组好的印表机设定工具, 选 APS Filter 就对了.   9. 厂商的解决方案   理论上, 这一节是不完整的. 请别客气来告诉我你最喜好的发行版   本(distribution) 的相关细节.   9.1 Red Hat   Red Hat 提供一个 GUI 界面的印表机管理程式 (在 control panel □), 可以让   你加上网路印表机或连接本地装置的印表机. 它让你选择 ghostscript 支援的印   表机种类和所使用的 Unix 装置档案, 然後会在 /etc/printcap 中设定列印伫   列, 再写入一个简短的利用 gs 和 [22]nenscript 以处理 PostScript 和   ascii 的 magic filter. 这个方法还不错, 对一般的情况而言, 也很容易设定.   9.2 其它的发行版本(Other Distributions)   请将其它发行版本的处理方法的讯息寄给我!   10. Ghostscript.   [23]Ghostscript 是个对 Linux 列印有著极大意义的程式. 大部份在 Unix 下列   印的程式都会产生 PostScript, 而印表机的 PostScript 处理能力通常是价值   100 美元的选购配备. 但是 ghostscript 却是免费的, 而且它能将 PostScript   转成你的印表机所用的语言. 当它和你的 lpd input filter 结合之後, 你就有   了一部虚拟的 PostScript 印表机, 而且能够大幅简化你的生活.      Ghostscript 有两个版本. 商业版称为 Aladdin Ghostscript, 个人可以自由使   用, 但是不能随著商业用的 Linux 发行版本散布. Aladdin Ghostscript 通常比   免费的 ghostscript 领先一年左右; 举例来说,它支援 Adobe Acrobat 的   Portable Document Format, 但是免费版的就还没有.      免费版的 ghostscript 为 GNU Ghostscript, 其实就是较旧版的 Aladdin   Ghostscript. (Aladdin 的这种安排值得我们赞赏; 应该有更多的软体厂商以这   种方式支持自由软体 (free software)).      无论你用 [24]gs 做什麽, 记得不要让它能够存取档案 (用 -dSAFER 选项).   PostScript 是个具有完整功能的语言, 而一个恶意的 PostScript 程式可以让你   吃足苦头.      再谈到 PDF, Adobe 的 Portable Document Format 实际上就是把 PostScript   更组织化, 加上一些扩充功能, 经过压缩的档案格式. Ghostscript 可以像处理   PostScript 般地处理 PDF. 所以你可能是你周遭第一个拥有具有处理 PDF 能力   的印表机的人.   10.1 启动 ghostscript   典型的作法是在你的 magic filter 中使用 ghostscript, 但是如果为了除错,   直接执行通常会比较方便些.      gs -help 会简短地列出有用的选项以及所提供的驱动程式. (注意这儿所列出的   仅是编译进去的驱动程式, 而并非所有的驱动程式).      你可以用下面的方式执行 gs 来测试: gs options -q -dSAFER   -sOutputFile=/dev/lp1 test.ps.   10.2 调整 ghostscript 的输出结果   假如 gs 的输出不能让人满意, 还有一些办法.(事实上, 你可以做任何事, 因为   你可以取得原始码).     输出的位置及大小     位置, 大小, 还有影像在页面上的视觉比例是由 ghostscript 中的印表机驱动程   式所控制的. 如果你发现列印出来太短, 太长或是大了两倍, 你可能会想要看一   下驱动程式的原始模组并且调整任何所能想到的参数. 不幸的是每一个驱动程式   都有不同的方式, 所以我也无法告诉你如何调整, 还好大部份的驱动程式都有还   算清楚的注解.     Gamma, dotsizes, 等等     大部份的非雷射印表机因为列印的点比较大, 故会导致印出来的图案太黑. 假使   你遇到这个问题, 你应该使用自己的转换函数. 只要在 ghostscript 的   lib-dir 下建立如下的档案, 并在呼叫 gs 的时候将这个档名加在要列印的档案   之前就可以了. 你可能会需要调整一下实际的值才能适合你的印表机. 较小的值   会导致较亮的列印效果. 特别是当你的印表机使用 Floyd-Steinberg 演算法来混   色 ( rasterize color ) 可能是比较好的选择.   ---8<---- gamma.ps ----8<---%!%transfer functions for cyan magenta yellow black{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer---8<------------------8<---   你也可以调整这些值来补救印表机颜色上的问题. 假如你要这麽做, 建议你可以   用 ghostscript 内附的 colorcir.ps ( 在 examples/ 目录下 ) 做为测试页.   11. 如何列印到网路印表机   Lpd 的一个特性便是可以透过网路将报表列印到实体连接在其它机器上的印表   机. 只要仔细地组合 filter 命令稿和相关的工具程式, 你就可以让 lpr 得以透   通地 (transparently) 列印到各种网路上的印表机.   11.1 列印至 Unix/lpd   要让远端的机器能够使用你的印表机列印, 你必须将远端机器列名在   /etc/hosts.equiv 或是 /etc/hosts.lpd 档案之中. (要注意 hosts.equiv 还   有其它很多作用; 如果你要将一部机器列在这儿, 请确定你知道你在做什麽). 你   也可以利用 rs 属性来限定其它机器上的某些特定使用者才能使用你的印表机.   请看 [25]lpd 的线上手□以取得这方面的讯息.     用 lpd     要列印到另一部机器, 你要在 /etc/printcap 中加上这样的记录,   # REMOTE djet500lp|dj|deskjet:\        :sd=/var/spool/lpd/dj:\        :rm=machine.out.there.com:\        :rp=printername:\        :lp=/dev/null:\        :sh:   请注意在本地的机器还是要有一个由 lpd 管理的列印暂存器目录. 如果远端的机   器离线或是忙不过来, 列印工作会留在本地的暂存区中直到送出去为止.     用 rlpr     你也可以用 rlpr 将列印工作直接送到远端机器的伫列中, 省下设定 lpd 的麻   烦. 假如你偶尔才要列印到其它不同的印表机, 这个方法就最有用. 引一段   rlpr 的声明:      rlpr 利用 TCP/IP 将列印工作送到网路上任何位置的 lpd 伺服器.      与 lpr 不同的是, 你列印来源端的机器 *不需要* 明确地知道远端的印表机, (   例如透过 /etc/printcap) 因此有相当大的弹性, 管理的负担也比较轻.   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -