home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk1.iso / answers / linux / howto / printing < prev    next >
Internet Message Format  |  1993-12-15  |  94KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!gatech!concert!samba.oit.unc.edu!sunSITE!mdw
  2. From: gtaylor@cs.tufts.edu (Grant Taylor)
  3. Newsgroups: comp.os.linux.announce,comp.os.linux.admin,comp.answers,news.answers
  4. Subject: Linux Printing HOWTO
  5. Followup-To: poster
  6. Date: 15 Dec 1993 22:10:06 GMT
  7. Organization: The University of North Carolina at Chapel Hill
  8. Lines: 1973
  9. Approved: linux-announce@tc.cornell.edu (Matt Welsh)
  10. Message-ID: <2eo1vu$659@samba.oit.unc.edu>
  11. NNTP-Posting-Host: calypso.oit.unc.edu
  12. Summary: HOWTO on printing under Linux
  13. Keywords: Linux, printing, lpr
  14. Originator: mdw@sunSITE
  15. Xref: senator-bedfellow.mit.edu comp.os.linux.announce:1574 comp.os.linux.admin:2507 comp.answers:3047 news.answers:15871
  16.  
  17. Archive-name: linux/howto/printing
  18. Last-Modified: 1 Dec 93
  19.  
  20.                             The Linux Printing HOWTO 
  21.  
  22.                        by Grant Taylor and Brian McCauley 
  23.  
  24.  
  25.                                    Contents: 
  26.  
  27.                                     1 Intro 
  28.  
  29.                          2 Printing and Faxing Software 
  30.  
  31.                                      3 LPR 
  32.  
  33.                                   4 Previewing 
  34.  
  35.                               5 Ascii Translation 
  36.  
  37.  
  38.  
  39.  
  40.         0.1 Intro 
  41.  
  42.         This is the Printing  HOWTO for Linux. This  is a member of the 
  43.         second  generation  of  Linux  FAQS.  The  original  Linux  FAQ 
  44.         gradually   became  a  monolithic   beast,  and  has  now  been 
  45.         re-written in a new syle,  refering to HOWTOs for details. This 
  46.         HOWTO details  how to properly  set up most  types of printers, 
  47.         how to  configure the  software to  make them  print well, what 
  48.         types of  fax software are  available, and how  to preview many 
  49.         types  of  printable output.  Other  HOWTOs  detail networking, 
  50.         kernel hacking,  etc. All HOWTOs  are found  in several places, 
  51.         the                   official          location          being 
  52.         sunsite.unc.edu:/pub/Linux/docs/HOWTO,    and   another   being 
  53.         rtfm.mit.edu. 
  54.  
  55.           Please      send    comments,    bug    reports,    etc,   to 
  56.         printing@god.ext.tufts.edu.  This address  goes to  both Brian 
  57.         and Grant. 
  58.  
  59.           If  you know  anything  or can  point  us towards  any useful 
  60.         programs not  in this  document that  should be,  please let us 
  61.         know! 
  62.  
  63.           Grant has  a mail  server set  up on  his machine.  It stores 
  64.         documents and other  things related to  printing and previewing 
  65.         with Linux, including  the latest and  greatest version of this 
  66.         document.  Mail to  listserv@god.ext.tufts.edu  with a  body of 
  67.         ``info'' will have you  sent a list of  available files. A body 
  68.         of ``get  file1 [  file2 file3... ]  '' will  send you specific 
  69.         files. 
  70.  
  71.  
  72.         0.1.1 Summary of changes 
  73.  
  74.  
  75.         * Now in La [ me ] TeX! 
  76.  
  77.  
  78.         * New mailserver info. 
  79.  
  80.  
  81.         * Assorted little changes 
  82.  
  83.  
  84.         0.2 Printing Software 
  85.  
  86.         These sections describe printing software known to be available 
  87.         for Linux. Note that most  Un*x printing software can be easily 
  88.         compiled under Linux. 
  89.  
  90.  
  91.         0.2.1 text 
  92.  
  93.         Under  Linux,  or under  most  any Un*x  operating  system, the 
  94.         easiest thing to  print with most printers  is plain ASCII. Any 
  95.         way  you  can  arrange  to send  the  text  to  the  printer is 
  96.         perfectly valid. If you have a serial printer, then try devices 
  97.         /dev/ttys?, /dev/ttyS?,  /dev/cua?, etc,  and if  you have a 
  98.         regular  parallel  hookup, use  /dev/lp?.  Typing  ``cat file 
  99.         >/dev/????'' should  do it. You  may need  root privileges, or 
  100.         you may wish  to chmod your  printer device if  this is all you 
  101.         ever print. (Note  the security hole there  if you've more than 
  102.         one user) Some printers (ie,  HP DeskJet) want dos-style end of 
  103.         lines: newline+carriage  return. These  printers will  show the 
  104.         'staircase effect'; further information on  how to deal with it 
  105.         is in ``How do I prevent the staircase effect,'' 
  106.  
  107.  
  108.         0.2.2 pr 
  109.  
  110.         Most plain ascii files in the  un*x world have a tendency to be 
  111.         just that  - plain,  unformatted ascii  with no  page breaks or 
  112.         anything else  to make  a printed copy  look nice  and not have 
  113.         lines printed over perferations. The  answer to this problem is 
  114.         to  run your  text  through a  formatter such  as  pr. Pr  is a 
  115.         standard  un*x  utility  designed  to  format  plain  text  for 
  116.         printing  on  a  line  printer.  The  usual  appearance  of the 
  117.         resulting  formatted  text  has a  header  and/or  footer, page 
  118.         numbers, the date, possibly margins, double spacing, etc. As is 
  119.         common with  un*x utils, pr  has a bazillion  options. They are 
  120.         detailed in the man page. 
  121.  
  122.  
  123.         0.2.3 Postscript 
  124.  
  125.         Printing  almost  anything  other than  plain  text  under Un*x 
  126.         usually involves the ability to print Postscript. If you have a 
  127.         Postscript printer, you're  all set. But for  most, this is not 
  128.         so easy. 
  129.  
  130.           The established way to interpret Postscript under Linux is to 
  131.         use ghostscript, which, like nearly everything else, comes from 
  132.         the GNU project. Ghostscript  is a Postscript interpreter which 
  133.         accepts Postscript input and generates output appropriate for X 
  134.         displays, most printers, some specialized display hardware, and 
  135.         fax software. 
  136.  
  137.           The   following  devices  are  available  as  of  ghostscript 
  138.         2.6.1pl4: 
  139.  
  140.  
  141.           
  142.                   linux   PC vga using linux vgalib
  143.           #       x11     X Windows version 11, release >=4   [Unix and VMS only]
  144.           # Printers:
  145.           # *     appledmp  Apple Dot Matrix Printer (Imagewriter)
  146.           #       bj10e   Canon BubbleJet BJ10e
  147.           # *     bj200   Canon BubbleJet BJ200
  148.           # *     cdeskjet  H-P DeskJet 500C with 1 bit/pixel color
  149.           # *     cdjcolor  H-P DeskJet 500C with 24 bit/pixel color and
  150.           #               high-quality color (Floyd-Steinberg) dithering
  151.           # *     cdjmono  H-P DeskJet 500C printing black only
  152.           # *     cdj500  H-P DeskJet 500C (same as cdjcolor)
  153.           # *     cdj550  H-P DeskJet 550C
  154.           # *     declj250  alternate DEC LJ250 driver
  155.           # +     deskjet  H-P DeskJet and DeskJet Plus
  156.           # *     dfaxhigh  DigiBoard, Inc.'s DigiFAX software format
  157.           # *     dfaxlow  DigiFAX low (normal) resolution
  158.           #       djet500  H-P DeskJet 500
  159.           # *     djet500c  H-P DeskJet 500C
  160.           #       epson   Epson-compatible dot matrix printers (9- or 24-pin)
  161.           # +     eps9high  Epson-compatible 9-pin, interleaved lines
  162.           #               (triple resolution)
  163.           # *     epsonc  Epson LQ-2550 and Fujitsu 3400/2400/1200 color printers
  164.           # *     escp2   Epson ESC/P 2 language printers, including Stylus 800
  165.           # +     ibmpro  IBM 9-pin Proprinter
  166.           # *     jetp3852  IBM Jetprinter ink-jet color printer (Model #3852)
  167.           # +     laserjet  H-P LaserJet
  168.           # *     la50    DEC LA50 printer
  169.           # *     la75    DEC LA75 printer
  170.           # *     lbp8    Canon LBP-8II laser printer
  171.           # *     ln03    DEC LN03 printer
  172.           # *     lj250   DEC LJ250 Companion color printer
  173.           # +     ljet2p  H-P LaserJet IId/IIp/III* with TIFF compression
  174.           # +     ljet3   H-P LaserJet III* with Delta Row compression
  175.           # +     ljet4   H-P LaserJet 4 (defaults to 600 dpi)
  176.           # +     ljetplus  H-P LaserJet Plus
  177.           # *     m8510   C.Itoh M8510 printer
  178.           # *     necp6   NEC P6/P6+/P60 printers at 360 x 360 DPI resolution
  179.           # *     nwp533  Sony Microsystems NWP533 laser printer   [Sony only]
  180.           # *     oki182  Okidata MicroLine 182
  181.           #       paintjet  H-P PaintJet color printer
  182.           # *     pj      alternate PaintJet XL driver 
  183.           # *     pjxl    H-P PaintJet XL color printer
  184.           # *     pjxl300  H-P PaintJet XL300 color printer
  185.           # *     r4081   Ricoh 4081 laser printer
  186.           # *     sparc   SPARCprinter
  187.           # *     t4693d2  Tektronix 4693d color printer, 2 bits per R/G/B component
  188.           # *     t4693d4  Tektronix 4693d color printer, 4 bits per R/G/B component
  189.           # *     t4693d8  Tektronix 4693d color printer, 8 bits per R/G/B component
  190.           # *     tek4696  Tektronix 4695/4696 inkjet plotter
  191.           #%*     trufax  TruFax facsimile driver  [Unix only]
  192.           # File formats and others:
  193.           #       bit     A plain "bit bucket" device
  194.           #       bmpmono Monochrome MS Windows .BMP file format
  195.           #       bmp16   4-bit (EGA/VGA) .BMP file format
  196.           #       bmp256  8-bit (256-color) .BMP file format
  197.           #       bmp16m  24-bit .BMP file format
  198.           #       gifmono Monochrome GIF file format
  199.           #       gif8    8-bit color GIF file format
  200.           #       pcxmono Monochrome PCX file format
  201.           #       pcxgray 8-bit gray scale PCX file format
  202.           #       pcx16   Older color PCX file format (EGA/VGA, 16-color)
  203.           #       pcx256  Newer color PCX file format (256-color)
  204.           #       pbm     Portable Bitmap (plain format)
  205.           #       pbmraw  Portable Bitmap (raw format)
  206.           #       pgm     Portable Graymap (plain format)
  207.           #       pgmraw  Portable Graymap (raw format)
  208.           #       ppm     Portable Pixmap (plain format)
  209.           #       ppmraw  Portable Pixmap (raw format)
  210.           # *     tiffg3  TIFF/F (G3 fax)
  211.           
  212.           
  213.         Lines beginning  with a  ` #  ' are  drivers included  with the 
  214.         gs261 source distribution. 
  215.  
  216.           Drivers marked with % require commercial software to work 
  217.  
  218.           Installations  of  ghostscript  are  available  from  several 
  219.         places: 
  220.  
  221.           A full, and presumably  correct, installation is available in 
  222.         the  SLS; note  that this  binary  requires libX.so.???,  as it 
  223.         includes the X11 display driver. 
  224.  
  225.           The  `official' installation  is  to obtain  the  sources and 
  226.         build it yourself: 
  227.  
  228.         
  229.         prep.ai.mit.edu:/pub/gnu/ghostscript-xxxx.tar.gz
  230.         and                      ghostscript-fonts-xxxx.tar.gz
  231.         
  232.  
  233.           This  is probably  best, as  you can  get the  latest version 
  234.         (currently 2.6.1pl4  (the four  patches are  separate, they are 
  235.         available from my mail-server as gs261-patches)). 
  236.  
  237.           A  patch which  uses the  Linux svgalib,  and hence  does not 
  238.         require       X    for    previewing    is    available    from 
  239.         ws105.zfn.uni-bremen.de:/pub/gs261-linuxdriver.sh. 
  240.  
  241.           A  minimal  binary installation  of  ghostscript  and several 
  242.         other packages needed  for printing the  Linux documentation is 
  243.         available                                                    as 
  244.         sunsite.unc.edu:/pub/linux/apps/tex/texmin/texmin-0.1.tar.z. 
  245.         Note that this  does not contain any  postscript fonts. (Nor do 
  246.         you need them to print dvi (aka [ La ] TeX).) 
  247.  
  248.           The main Ghostscript  documentation is contained  in the file 
  249.         use.doc,      either    in    the    source    directory,    or 
  250.         .../lib/ghostscript/doc/use.doc if you haven't the sources. 
  251.  
  252.           To print ps, first determine your driver name with: 
  253.  
  254.         gs -help 
  255.  
  256.         which lists  installed drivers. If  the device you  need is not 
  257.         listed,   you  must   compile  gs  yourself   from  the  source 
  258.         distribution  (do  not  panic. do  follow  the  instructions in 
  259.         make.doc. you will need  5 or 6 megs of  space to build it in.) 
  260.         Then type 
  261.  
  262.         gs -dNOPAUSE -sDEVICE=?????? -sOutputFile=/dev/???? file.ps 
  263.  
  264.         and  your output  should  (hopefully) appear  at  your printer. 
  265.         Those  of you  with non-US  paper  sizes may  wish to  build gs 
  266.         yourself   with  the   right  default,  or   you  may  use  the 
  267.         -sPAPERSIZE=a4 option. 
  268.  
  269.           Ghostscript may be  used to print at  most of the resolutions 
  270.         your printer supports; -r300,  -r150, -r360x180 are examples of 
  271.         the  option  used  to  control  this.  Dot  matrix  printers in 
  272.         particular need to choose an appropriate resolution, since they 
  273.         do not typically run at the most common 300. Note that versions 
  274.         2.6 and greater of ghostscript have more drivers. 
  275.  
  276.  
  277.         0.2.4 fonts 
  278.  
  279.         (This  section contains  font information  not specific  to any 
  280.         ghostscript  driver (nor  even  specific to  ghostscript). Font 
  281.         information  pertaining  to the  X11  gs drivers  (and  thus to 
  282.         ghostview)   is   included  in  the   ghostview  section  under 
  283.         previewing) 
  284.  
  285.           All versions of ghostscript  come with assorted public-domain 
  286.         fonts,  most  of which  were  generated from  bitmaps,  and are 
  287.         therefore of relatively poor  quality. However, ghostscript can 
  288.         use any PostScript  Type 1 or  3 fonts you  may have handy. For 
  289.         example, the  Adobe Type Manager  (for any  platform other than 
  290.         mac (a conversion util for mac ps fonts was on simtel-20 in the 
  291.         windows3 directory))  comes with fonts  you can  use. Place the 
  292.         fonts (typically  *.pc?) in  .../lib/ghostscript/fonts/ and add 
  293.         to your fontmap lines such as: 
  294.  
  295.         /Courier (com_____.pfb) ; 
  296.  
  297.         A full fontmap file  for the ususal set  of fonts included with 
  298.         the Adobe  Type Manager  is available  as fontmap.atm  from the 
  299.         printing mailserver. 
  300.  
  301.           TimesNewRomanPS  and  ArialMT fonts  are  interchangable with 
  302.         Times Roman and  Helvetica, so you  can alias them  this way if 
  303.         this is what you have. 
  304.  
  305.           Adobe Type 1 fonts may be found on the net in several places: 
  306.         ftp.cica.indiana.edu:/pub/pc/win3/fonts                     and 
  307.         archive.umich.edu:/msdos/mswindows/fonts 
  308.  
  309.           I have  not looked in  these places, but  this information is 
  310.         lifted straight from the comp.fonts  FAQ (which you should read 
  311.         if fonts are a thing for you. I'll be glad to mail you a copy). 
  312.  
  313.           Conversion between various font  types is tricky. Ghostscript 
  314.         comes with the tools needed  to take a bitmap (hopefully large) 
  315.         and make  a scalable  ps font.  Groff comes  with the  tools to 
  316.         allow  use of  tfm/mf (TeX)  and  pfb (Type  1) fonts  in *roff 
  317.         documents.  X11R5 includes  several font  utilities and  Type 1 
  318.         rendering  code contributed  by IBM.  I have  used none  of the 
  319.         above, but  they all  come with  manpages, so  read them. Other 
  320.         font  conversion utilities  are listed  in the  comp.fonts FAQ. 
  321.         Also        look    into     the    package     fontutils    on 
  322.         prep.ai.mit.edu:/pub/gnu 
  323.  
  324.  
  325.         0.2.5 faxing 
  326.  
  327.         If you have a fax modem, you  can arrage to fax things out (and 
  328.         in),  including PostScript,  dvi,  ascii, etc...  Arranging for 
  329.         e-mail to fax itself somewhere is also straightforward. 
  330.  
  331.           Fax modems correspond to  one of two types:  Classes 1 and 2. 
  332.         Class one modems are  fairly common and have  less of what goes 
  333.         on in a fax supported in  firmware (thus the software has to do 
  334.         more  and  do  it  carefully.  supporting  such timing-critical 
  335.         things  under  a preemptive  multitasking  environment  such as 
  336.         Linux is  tricky at  best). The  class 1  standard is  EIA 578. 
  337.         Class 2 modems  tend to be  more expensive and  comply with the 
  338.         standard EIA 592. Mention of  your fax modem's level of support 
  339.         should be in its  manuals. Do not confuse  class and group. You 
  340.         would be hard pressed  to find a non-group  III fax modem these 
  341.         days (but you probably could). 
  342.  
  343.           Fax software  which runs  under linux  must convert  input in 
  344.         whatever format  into a Group  III compatible  image format for 
  345.         transmission. As  usual, Ghostscript  does the  job. The device 
  346.         tiffg3  generates standard  g3/tiff  encoded fax  messages. You 
  347.         must compile them in if they are not there already; this is yet 
  348.         another   reason  to  get  the  source.  Some  fax  sofware  on 
  349.         commercial platforms can use the display PostScript renderer to 
  350.         render the fax image; this is not yet an option under Linux. 
  351.  
  352.           The GNU program  netfax supports Class 2  fax modems only. It 
  353.         builds nearly out  of the box  under linux. I  have patches for 
  354.         version 3.2.1; you  can get them from  the printing mail server 
  355.         as ``netfaxpatch''.  It runs a  server and accepts  jobs into a 
  356.         queue from the local  machine and the net.  netfax is in use at 
  357.         MIT.  It  accepts  postscript,  dvi,  and  ascii,  and  can  be 
  358.         configured  to  work as  an  email gate.  Documentation  in the 
  359.         package  is limited  to  compile notes  and  man pages  for the 
  360.         individual programs; actual  installation tips are  few and far 
  361.         between. prep.ai.mit.edu:/pub/gnu/fax-3.2.1.tar.gz 
  362.  
  363.           FlexFax,                          available              from 
  364.         sgi.com(192.48.153.1):/sgi/fax/?????.src.tar.Z,  is  written in 
  365.         C++, and thus  requires g++ to build.  FlexFax supports class 1 
  366.         and 2 modems,  uses ghostview (or  a display postscript server) 
  367.         for  rendering, and  generally is  more  complete, or  at least 
  368.         general than the somewhat MIT-specific  netfax. It also can run 
  369.         in place of getty and either receive  a fax or spawn a login as 
  370.         appropriate   for  the  type   of  call.  It  includes  precise 
  371.         instructions on configuring  smail3 (and other  mail agents) to 
  372.         send mail  for so-and-so@12345678.fax  to the  fax at 12345678. 
  373.         This is the package I recommend  if you have real faxing needs, 
  374.         as it is properly documented  and full-featured. Version 2.x of 
  375.         FlexFax is in real release now  and fully supports Linux - just 
  376.         type ./configure and make. 
  377.  
  378.           mgetty+sendfax   is  a  Linux   and  SCO-specific  getty  for 
  379.         faxmodems  and a  simple sendfax  program.  This package  is on 
  380.         sunsite. This is  a good package  for those who  need to send a 
  381.         fax every now and then. 
  382.  
  383.           modgetty  (which  uses  tcl,  an  interpreted  language)  can 
  384.         receive faxes. Try harbor.ecu.purdue.edu:/pub/tcl 
  385.  
  386.  
  387.         0.2.6 *roff, man pages 
  388.  
  389.         Man pages can sometimes be  printed straight from the cat pages 
  390.         which come  with the  SLS (in lieu  of the  normal nroff source 
  391.         pages)  as though  they  were a  normal  text file  (which they 
  392.         mostly are). However,  many printers do not  like the VT escape 
  393.         codes  for  highlighting  and  what  not  that  find themselves 
  394.         imbedded in  these. A  filter for  this purpose  comes with the 
  395.         net-2 lpd package. It is called lpf. 
  396.  
  397.           If you  have the  nroff source  to the  page (the  finding of 
  398.         which I highly recommend) you can say 
  399.  
  400.         man -t foobar |lpr 
  401.  
  402.         and your man program will (hopefully) format the man page using 
  403.         groff into PostScript, which will then  be sent to your lpd and 
  404.         on to  the printer.  This form  of man  page output  looks MUCH 
  405.         better  than  the  plain  ASCII  version.  Unfortunately,  this 
  406.         depends  very much  on which  man  program and  what supporting 
  407.         software you have  installed. If your man  doesn't do this, you 
  408.         might    try  the   perl   version  of   man,   available  near 
  409.         sunsite.unc.edu:/pub/Linux/system/Manual-Pagers/ It  is written 
  410.         entirely in perl,  and is thus  easily customizable (perl being 
  411.         an interpreted language reminiscent of C and sh). 
  412.  
  413.           You   can  also  find  the  nroff  source  file  in  the  man 
  414.         directories (most versions  of man have an  option to just spit 
  415.         out the filename) and do it yourself, into any format supported 
  416.         by groff: 
  417.  
  418.         groff -mandoc -T ascii,dvi,ps,X100,X75,latin8 foobar.1 [ |lpr ] 
  419.  
  420.  
  421.         0.2.7 mpage 
  422.  
  423.  
  424.         The package  mpage converts  plain text  into postscript and/or 
  425.         prints  more  than one  page  onto  each peice  of  paper given 
  426.         postscript        or     text.    It     is     available    as 
  427.         wuarchive.wustl.edu:/pub/mirrors/unix-c/postscript/mpage.tar-z 
  428.         or thereabouts. Note that wuarchive  uses the -z suffix to mean 
  429.         .Z,  ie, compress,  not  GNUzip or  freeze.  ``man -t  foobar | 
  430.         mpage'' will send a 2-up (depending on the environment variable 
  431.         MPAGE)  version  of the  man  page  to lpr  and  its postscript 
  432.         interpreter. This saves paper and speeds up printing. 
  433.  
  434.  
  435.         0.2.8 a2ps 
  436.  
  437.         A2ps  will  take  ASCII  and turn  it  into  a  nice postscript 
  438.         document with headers and footers and page numbers, printed two 
  439.         pages on one  (or otherwise, if  you say so).  A2ps does a very 
  440.         nice job at this. It is available at the same place mpage is. 
  441.  
  442.  
  443.         0.2.9 enscript 
  444.  
  445.         Enscript is  a program which  does basically the  same thing as 
  446.         a2ps.  I  do not  know  where to  get  it. It  comes  with most 
  447.         commercial Un * xes. 
  448.  
  449.           A clone version of enscript is called nenscript, available as 
  450.         /pub/Linux/system/Printing/nenscript-1.13++.bin.tar.z        or 
  451.         /pub/Linux/system/Printing/nenscript-1.13++.tar.z on sunsite. 
  452.  
  453.  
  454.         0.2.10 gslp 
  455.  
  456.  
  457.         Gslp is one of the  uilities which comes with ghostscript 2.6.x 
  458.         and purports to do the same ascii --> ps conversion as enscript 
  459.         and a2ps. I have not used it, but the docs say that 
  460.  
  461.         gs -q -sDEVICE=????? -dNOPAUSE -- gslp.ps text.file [ options ] 
  462.  
  463.         should do the  trick. (gslp.ps is the  actual program, which is 
  464.         written  in  postscript.  Here  it  is  run  with  the argument 
  465.         `text.file.'  Postscript  is  in  many  respects  a programming 
  466.         language more  than a  mere printer  command language.) Further 
  467.         documentation is  in the file  gslp.ps. There is  a script file 
  468.         which does the above for you. 
  469.  
  470.  
  471.         0.2.11 psutils 
  472.  
  473.         Those of you who deal with large amounts of postscript may wish 
  474.         for more  utility programs  than come  with the  SLS. There are 
  475.         probably millions  of little programs  which do  things to your 
  476.         Postscript. A  representative package of  them may  be found in 
  477.         achilles.doc.ic.ac.uk:/tex/inter/psutils/                    or 
  478.         guardian.cs.psu.edu:/pub/src/psutil.tar.Z 
  479.  
  480.           These handle  page selection,  double-sided printing, booklet 
  481.         creation, etc.  Most large ftp  sites (eg, wuarchive.wustl.edu, 
  482.         ftp.uu.uunet) will have many such packages to choose from. 
  483.  
  484.  
  485.         0.2.12 tex/dvi 
  486.  
  487.         [ La ] TeX  is the text formatting package  used by many in the 
  488.         academic world  and elsewhere.  TeX works  much like  any other 
  489.         compiler -- source  code is run through  the program ``tex'' to 
  490.         become a .dvi file (analogous to  an .o object file in C) which 
  491.         can  be further  manipulated  to produce  printed  output. This 
  492.         manipulation of a dvi (DeVice Independant) file usually takes a 
  493.         little bit of  doing. It is  well worth it;  TeX's output is of 
  494.         professional quality. 
  495.  
  496.           For  those  in  the  real  world  who  cannot  afford  a  dvi 
  497.         understanding printer,  it is usually  best to  convert the dvi 
  498.         into postscript that you can  pipe into ghostscript or lpr. The 
  499.         SLS  comes  with a  functioning  installation of  both  TeX and 
  500.         dvips. Typing  ``dvips -f1 file.dvi  | lpr'' will  do it. Dvips 
  501.         responds   to   either  command   line  arguments   or  a  file 
  502.         /usr/TeX/lib/tex/ps/config.ps (in the  SLS TeX distribution, at 
  503.         least) in  which you  can arrange  to have  dvips automatically 
  504.         send  its  output  to  lpr.  Thus  ``dvips  file.dvi''  will do 
  505.         everything that needs to be done. 
  506.  
  507.           Note that some .dvi's may  include PostScript graphics in the 
  508.         dvips stage rather than the tex  stage of the game; if they are 
  509.         not  found, you  will get  a  hole instead  of a  picture. This 
  510.         follows naturally from the  object file analogy above. Usually, 
  511.         pre-made documentation in this form has a makefile or script to 
  512.         do everything for you. The  LILO documentation is an example of 
  513.         this. 
  514.  
  515.           Dvips has  several interesting options;  for exemple, ``dvips 
  516.         -r1 file.dvi''  will print it  out backwards.  We deskjet users 
  517.         love this one. 
  518.  
  519.           If all you are given is a file with a .tex ending, try either 
  520.         ``tex file.tex'' or  ``latex file.tex''. One  of these is bound 
  521.         to work. Then you have a dvi. (You may have to run it twice for 
  522.         indexing) 
  523.  
  524.  
  525.         0.2.13 eps 
  526.  
  527.         Eps is  a program  which converts  dvi files  directly into the 
  528.         standard Epson  printer language; thus  it is a  dvi driver for 
  529.         epsons.  I beleive  it supports  MakeTeXPK, the  automatic font 
  530.         rendering system used by many  dvi drivers, and is available as 
  531.         sunsite.unc.edu:/pub/Linux/apps/tex/eps-060.tar.gz      or   in 
  532.         ftp.ctd.comsat.com:/pub/. Note that it is still coming out with 
  533.         new versions fairly often, so there may be a newer version than 
  534.         060. 
  535.  
  536.  
  537.         0.2.14 dvilj 
  538.  
  539.         For  LaserJet  owners,  there is  a  separate  program  which I 
  540.         beleive  is  in the  SLS  that  will take  dvi  and  convert it 
  541.         directly  into  your  printer's language  (PCL).  It  is called 
  542.         dvilj2p or dvilj,  and if not  on tsx or  sunsite, is certainly 
  543.         available on ftp.uu.net. 
  544.  
  545.           (Description by Nils Rennebarth) 
  546.  
  547.           Its a nice driver,  but a little out  of fashion in the sense 
  548.         that configuration (especially of font-paths) font-paths is not 
  549.         very flexible  and that  it doesn't  support virtual  fonts (at 
  550.         least the  version 0.51  not). The  biggest advantage  over the 
  551.         dvips/ghostscript  combo  is that  it  uses  downloadable fonts 
  552.         which: a) reduces data transmission to the printer drastically, 
  553.         which  makes  the printer  usable  even  on a  serial  line. b) 
  554.         reduces  printer-memory-requirements  drastically.  A  standard 
  555.         Laserjet  with  512k  memory  is  able  to  print  almost every 
  556.         TeX-document. 
  557.  
  558.           It has support for double  side printing and most options you 
  559.         expect  a  driver  to  have.  It  compiles  cleanly  and worked 
  560.         flawlessly on our diverse hardware here. 
  561.  
  562.  
  563.         0.2.15 texinfo 
  564.  
  565.         This is  the native  documentation format  of the  GNU project. 
  566.         Emacs can be coerced  into producing an info  file out of this, 
  567.         and TeX  can produce nice  printed documantation  from the same 
  568.         file. It is a bit of a  stretch for both systems, but it works. 
  569.         It  is really  just  TeX source  which  expects the  macro file 
  570.         texinfo.tex  to  be installed  on  your system.  Just  do ``tex 
  571.         <filename>'' twice (for index generation purposes), and you end 
  572.         up with a plain dvi file, to print or preview at your leisure. 
  573.  
  574.           In  emacs,  you  can  also  do  M-x  texinfo-format-buffer to 
  575.         convert the texinfo file into  an info file viewable with emacs 
  576.         M-x info or an info viewer of your choice. 
  577.  
  578.           There are also  separate programs which  read and format info 
  579.         from      a   texinfo    file.    These   are    available   in 
  580.         prep.ai.mit.edu:/pub/gnu/ 
  581.  
  582.  
  583.         0.2.16 hardware and drivers 
  584.  
  585.         There are  two ways the  kernel driver  may be used  to run the 
  586.         parallel ports. One,  the original, is  the polling driver. The 
  587.         other  is the  interrupt  driver. In  principle,  the interrupt 
  588.         driver only deals with  the port when it  gets an interrupt and 
  589.         should therefore  be more  efficient. In  practice, people have 
  590.         found that it depends on  the machine. It probably doesn't make 
  591.         too much difference in most situations. 
  592.  
  593.           For the polling driver, you  may adjust its polling frequency 
  594.         with the  program lptune  without kernel  twiddling. The actual 
  595.         driver is in .../linux/kernel/chr_drv/lp.c. 
  596.  
  597.           To choose  the interrupt driver  rather than  the polled, use 
  598.         the program lptune to set  it. (Lptune is available on sunsite, 
  599.         or from  the printing  mail server.)  Just put  the appropriate 
  600.         line in /etc/rc.local 
  601.  
  602.           Seven is the usual "LPT1:" IRQ,  5 is "LPT2:" for an AT class 
  603.         machine. Note  that if  your printer  is on  lp0, the interrupt 
  604.         driver  will  probably  not work.  The  first  parameter should 
  605.         already contain  the correct i/o  base address.  Many bios boot 
  606.         screens have this information if you need it. 
  607.  
  608.  
  609.         0.2.17 Printer device names 
  610.  
  611.         On an XT bus system  LPT1: becomes /dev/lp0 (major=6, minor=0), 
  612.         on an AT LPT1: becomes  /dev/lp1 (major=6, minor=1). To be more 
  613.         precise: 
  614.  
  615.  
  616.           
  617.           Name Major Minor I/O address
  618.            lp0   6     0       0x3bc
  619.            lp1   6     1       0x378
  620.            lp2   6     2       0x278
  621.           
  622.  
  623.           For a serial printer  use the ttyS? (or  ttys?, if you follow 
  624.         that scheme)  device, not  the cua?  device. The  ttyS? devices 
  625.         have major 4; the cua? devices have major 5. 
  626.  
  627.  
  628.         0.3 LPR 
  629.  
  630.         This section used to  the the lpd-HOWTO then  it became part of 
  631.         the  linux-HOWTO and  now it  is  part of  printing.how-to. Who 
  632.         knows where it will go next? 
  633.  
  634.  
  635.         0.3.1 What lpr and lpd do 
  636.  
  637.         Most un*x  systems use  lpd (or the  System V  variant lp), the 
  638.         line printer  daemon, and friends  to spool print  jobs and run 
  639.         them  through  all  needed  filters.  While  line  printers are 
  640.         certainly on  their way  out, spooling  print jobs  and running 
  641.         them  through filters  is definitely  a convenient  thing. Thus 
  642.         lpr.  (subliminal  note: PLEASE  find  and read  the  lpr, lpd, 
  643.         printcap, lpc, lpq, and lprm man  pages. They are in the source 
  644.         dist of the net-2, if you haven't got them.) 
  645.  
  646.           Lpd and family are available in several places. The new Linux 
  647.         net-2 package contains a  working lpd. I now  use this one with 
  648.         my stock 0.99pl10 kernel after following the directions in Matt 
  649.         Welsh's  net-2  HOWTO to  get  my  NET-2 going  (you  only need 
  650.         loopback). A  binary package which  can be  coaxed into working 
  651.         with the old  net things (pre  0.99pl10 kernel) is  in the SLS. 
  652.         Note a subtle difference between  the two versions: the old one 
  653.         placed  lock  files and  such  in /var/spool,  while  the net-2 
  654.         version requires the directory /var/spool/lpd to exist for it's 
  655.         lock file. 
  656.  
  657.           You will need  to edit /etc/printcap to  configure lpd to use 
  658.         your printer. Setting up lpd  to accept postscript and print it 
  659.         is not very difficult; simply make a shell script fiter (qv). 
  660.  
  661.           Setting up lpr  correctly is definitely  worth the trouble if 
  662.         you are going to do any printing  at all. Of course, if all you 
  663.         ever print is the occasional man page or instruction book, then 
  664.         you can probably get by without it (but even then it's nice). 
  665.  
  666.           Ghostscript 2.6.x  also comes  with a  complicated script and 
  667.         utilities  to  generate printcap  entries  and  manage multiple 
  668.         types of queues for  a printer. I have  not tested these, but I 
  669.         assume they can  be made to  work. If you  are in a large-scale 
  670.         environment with  varied printing needs,  these may  be worth a 
  671.         look. 
  672.  
  673.  
  674.         0.3.2 Where do  the files go and  what should their permissions 
  675.         be? 
  676.  
  677.         There is quite a bit  of variation between the various releases 
  678.         but  I'll  try  where  possible  to  offer  solutions  that are 
  679.         universally   applicable.  Put  /etc/lpd  in  your  /etc/rc  or 
  680.         /etc/rc.local (usually in /etc/rc.local after you start syslogd 
  681.         (if you use syslogd)). 
  682.  
  683.           Set  the group  fields  of the  file  permissons/ownership as 
  684.         follows: 
  685.  
  686.  
  687.           
  688.           -rwxr-s---   1 root     lp          37892 Nov 19 23:32 /etc/lpd
  689.           -rwx--s--x   1 root     lp          21508 Nov 19 23:32 /usr/bin/lpc
  690.           -rws--s--x   1 root     lp          17412 Nov 19 23:32 /usr/bin/lpq
  691.           -rwx--s--x   1 root     lp          17412 Nov 19 23:32 /usr/bin/lpr
  692.           -rwx--s--x   1 root     lp          17412 Nov 19 23:32 /usr/bin/lprm
  693.           -rwxr-xr-x   1 root     lp           2816 May 10 13:37 /usr/bin/lptest
  694.           
  695.           ...and for each of the spool directories listed in the sd fields of
  696.           /etc/printcap... 
  697.           
  698.           /var/spool/lpd:
  699.           total 5
  700.           drwxrwxr-x   2 root     lp           1024 May 18 23:00 .
  701.           drwxr-xr-x  11 root     root         1024 Feb 19 20:56 ..
  702.           -rw-rw-r--   1 root     lp              4 May 18 23:00 .seq
  703.           -rw-rw-r--   1 root     lp             18 May 18 23:00 lock
  704.           -rw-rw-r--   1 root     lp             25 May 18 23:00 status
  705.           
  706.  
  707.           Note these 3  files are created  by lpr and  lpd so if you've 
  708.         never run these they  will be absent and  you should touch them 
  709.         into being. 
  710.  
  711.           In  older  versions  the  group  was  ``daemon''  not ``lp''. 
  712.         There's  also  a named  socket  but lpd  creates/deletes  it as 
  713.         needed. 
  714.  
  715.           Some  of  these  permissions  may  be  overkill  so  don't be 
  716.         surprised if your system  works with different permissions. The 
  717.         fact  that lpq  needs  to be  suid(root)  is inelegant  and may 
  718.         change  in  the  future.  People  tell  me  that  lpr  must  be 
  719.         suid(root) but I've  not seen evidence that  this is really the 
  720.         case as long  as the file  permissions on the  spool queues are 
  721.         right. Still as far as I know lpr is designed to be secure when 
  722.         installed setuid(root). 
  723.  
  724.           Alternative    approach:  just   make   lpc,  lpr   and  lprm 
  725.         setuid(root) then you can almost forget the file permissions on 
  726.         the spool queues! 
  727.  
  728.           You're   free   to  choose  different   directories  for  the 
  729.         executables on your system (notably lpc is usually in /etc even 
  730.         though it has commands that are useful to non-root). 
  731.  
  732.           The  master lpd  lock file  is  fixed at  compile time  to be 
  733.         /var/spool/lpd/lpd.lock  so  you  must  have  a  /var/spool/lpd 
  734.         directory  even if  you  choose not  to  keep your  spool queue 
  735.         there.    In   the   older   binaries   the   lock   file   was 
  736.         /usr/spool/lpd.lock so this was not an issue. 
  737.  
  738.           My advise is keep your  primary spool queue in /usr/spool/lpd 
  739.         and make /var a symlink to usr or keep it in /var/spool/lpd and 
  740.         make  /usr/spool  a  symlink to  ../var/spool.  This  gives the 
  741.         greatest  compatibility with  the  pathnames that  are compiled 
  742.         into the various distributed binaries. 
  743.  
  744.           The main configuration file is /etc/printcap although the old 
  745.         binaries look  for it  in /usr/etc/.  The old  binaries' README 
  746.         says   hosts.equiv  and  hosts.lpd  files  are  looked  for  in 
  747.         /etc/inet but again  the more accepted  convention is to locate 
  748.         them in /etc. 
  749.  
  750.           Since, IMHO,  working out  in which  particular etc directory 
  751.         each file should reside is  tedious, I would advise having only 
  752.         one: 
  753.  
  754.  
  755.           
  756.           mv -i /usr/etc/inet/* /etc/inet/* /usr/etc/* /etc/
  757.           rmdir /usr/etc/inet /etc/inet /usr/etc
  758.           ln -s ../etc /usr/etc
  759.           ln -s . /etc/inet
  760.           
  761.  
  762.           [ But make sure  the files in /usr/etc  and /etc/inet are not 
  763.         already symlinks into /etc or you'll be in deep water. ] 
  764.  
  765.           This makes  your /etc  huge but  I think  it's safe.  All the 
  766.         latest stuff has only /etc paths compiled into it so eventually 
  767.         we can get rid of these links. 
  768.  
  769.  
  770.         0.3.3 What are all these diretories for? 
  771.  
  772.         People  like  to  put  all  things  that  aren't  needed during 
  773.         bootstrap  in /usr  so that  /  is as  small as  possible. They 
  774.         therefore  move unessential  big  files (usually  the binaries) 
  775.         from /etc/ to /usr/etc/. 
  776.  
  777.           Unless you know what you  are doing (or following the example 
  778.         of someone that  does) I'd advise  keeping it all  in /etc with 
  779.         /usr/etc and  /etc/inet being symlinks  back to  /etc. (In fact 
  780.         these links  are probably soon  to be redundant  as most recent 
  781.         binaires now look in /etc/.) 
  782.  
  783.           The Linux/PRO approach  is to have  a real /usr/etc directory 
  784.         containing  all the  non-essential stuff  and make  symlinks to 
  785.         each file therein from its namesake  in /etc. To spread out the 
  786.         configuration  files  for  the  sake  of  tidiness  there  is a 
  787.         directory tree  called /conf  and many  files in  /etc symlinks 
  788.         into this tree. 
  789.  
  790.           Also a few people like  all their internet stuff in /etc/inet 
  791.         but as recent binaries excpect to  find this stuff in /etc they 
  792.         must create links for each file from /etc into /etc/inet. 
  793.  
  794.           To avoid the problem of your  /usr filesystem filling up as a 
  795.         result  of stuff  in spool  queues some  poeple perfer  to keep 
  796.         their  spool  queues and  such  like in  a  separate filesystem 
  797.         called /var.  If you  don't have  a /var  file system  then you 
  798.         should  make /var  a  symlink to  usr. If  you  do have  a /var 
  799.         filesystem  to  may  want  to  make  /usr/spool  a  symlink  to 
  800.         ../var/spool so that any  programs expecting to find /usr/spool 
  801.         will not be dissapointed. 
  802.  
  803.  
  804.         0.3.4 lpd not working 
  805.  
  806.         If ``ps ax'' does not reveal a lpd then you daemon has died (or 
  807.         was never started) - usually a sign that it couldn't create its 
  808.         lockfile (or you tried to  start it before all your filesystems 
  809.         were mounted). 
  810.  
  811.           If  lpr  works  only  for root  then  you've  probably  got a 
  812.         permission problem. 
  813.  
  814.           If you get ``jobs queued, but cannot start daemon'' or ``lpc: 
  815.         connect: No  such file  or directory''  you are  having trouble 
  816.         with the  socket connection to  lpd. "start" in  the context of 
  817.         this error really means "wake".  I don't really understand this 
  818.         but the problem was common in  early days with the old binaries 
  819.         but developments in the TCP/IP code  in the kernel fixed it for 
  820.         most  people. Basically  is stems  from  a network  porblem. If 
  821.         you're  not on  a  network then  try  congifuring youself  as a 
  822.         single node network and the problem should vanish. 
  823.  
  824.  
  825.         0.3.5 Where do I get a printcap for a xxxxx? 
  826.  
  827.         This question is essentially meaningless - see next question. 
  828.  
  829.  
  830.         0.3.6 The semantics of /etc/printcap 
  831.  
  832.         Given    the  similarity   in   appearence  and   name  between 
  833.         /etc/termcap  and  /etc/printcap  one  could  be  forgiven  for 
  834.         assuming that  they contain  analogous infomation.  This is not 
  835.         the case. Whereas termcap  contains informations about terminal 
  836.         *types*    -   (mostly  escape   seqences)   printcap  contains 
  837.         information about *specific* printers  (like the directory that 
  838.         holds the spool queue and the  device name of the printer). The 
  839.         information about a printer model's  escape sequences and so on 
  840.         are held  in the various  filters which are  programs called by 
  841.         lpd  to  drive  the  printer.  /etc/printcap  simply  gives the 
  842.         locations  of  these  filters.  For  details  RTFM(printcap). [ 
  843.         Alternatively the net-HOWTO  has a summary of  some of the more 
  844.         important fields. ] 
  845.  
  846.           One last point you  should always specify ``suppress header'' 
  847.         ``:sh:'' unless  you have  *text* (not  postscript) printer and 
  848.         want banners.  On a  text printer they  are usually  a waste of 
  849.         time and paper. On a  postscript printer they usually stop your 
  850.         printer   working.  (See  the   banners  question  for  further 
  851.         expanation). 
  852.  
  853.  
  854.         0.3.7 The syntax of a /etc/printcap 
  855.  
  856.         Ideally RTFM(termcap)  (yes, I  said *termcap*)  but since most 
  857.         people don't have TFM(termcap) here are the essentials. 
  858.  
  859.           Lines starting # are comments (as you might have guessed). 
  860.  
  861.           For each printer  usable from the lpr  command on your system 
  862.         there  is  one  logical  line in  the  file.  For  the  sake of 
  863.         readability  each  logical  line  may  be  spread  over several 
  864.         physical lines by making the last character on all but the last 
  865.         physical line a backslash. 
  866.  
  867.           Each logical line has the following format: 
  868.  
  869.  
  870.           
  871.           name1|name2|name3:string_capability=string:\
  872.                  :numeric_capability#number:boolean_capability:
  873.           
  874.  
  875.           The  leading spaces  and  colon on  the  second line  are for 
  876.         readability only. 
  877.  
  878.           A   printer  can   have  as  many  names   as  you  like  but 
  879.         conventionally the final name is used as a longhand description 
  880.         of the printer. (Still  people are free to  say `lpr -P "Fred's 
  881.         grotty teletype"' if that's the description you've given.) 
  882.  
  883.           The list  of capabilities  can be as  long as  needed and the 
  884.         order is not  significant. Each ``capability''  is denoted by a 
  885.         two  character code.  (The name  ``capability'' comes  form the 
  886.         file format's termcap  heritage - parameter  or attribute would 
  887.         be a more sensible terms.)  [ Note from Ross Biro: capabilities 
  888.         with 3  character names  don't work  properly which  is why the 
  889.         serial port  stuff in the  old binaries  failed. ] Capabilities 
  890.         having  string  value  and  have  a  =  delimiter  between  the 
  891.         capability  name and  the value  while  those having  a numeric 
  892.         value use  a #  (actually they  can use  either a  # or  an =). 
  893.         Boolean ``capablilties''  are true if  they appear  in the list 
  894.         and false if they do not. 
  895.  
  896.           Special characters in a string value can be expressed using ` 
  897.         \\'-escape sequences as in C;  in addition, `\E' stands for 
  898.         ESC. ` '  is also a kind  of escape character;  ` ' followed by 
  899.         CHAR  stands for  the control-equivalent  of  CHAR. Thus,  ` a' 
  900.         stands for the  character control-a, just  like `\001'. `\' 
  901.         and  ` '  themselves can  be represented  as `\\'  and `\' 
  902.         respectively. `\:' for `:' seems  to work but the source code 
  903.         contains a waring  that it can confuse  the parser and `\072' 
  904.         is a better idea. 
  905.  
  906.  
  907.           
  908.           Example:
  909.           
  910.           lp|bam|BAM's Epson FX-80:lp=/dev/lp1:sd=/usr/spool/lp1:sh:mx#0:\
  911.                   :df=/usr/local/lib/magic-filter/lp.df:\
  912.                   :if=/usr/local/lib/magic-filter/lp.if:
  913.           
  914.  
  915.           Name is lp  (this is the  printer that lpr  uses by default). 
  916.         It's also known as bam or "BAM's Epson FX-80". 
  917.  
  918.           The printer is on /dev/lp1 (aka AT-bus LPT1:). I don't want a 
  919.         burst page. I don't  want a file length  limit. Files queued by 
  920.         `lpr -d'  are passed  through /usr/local/lib/magic-filter/lp.df 
  921.         and           those      queued      by      `lpr'      through 
  922.         /usr/local/lib/magic-filter/lp.lf. 
  923.  
  924.           See also the next section. 
  925.  
  926.  
  927.         0.3.8 An /etc/printcap gotcha 
  928.  
  929.         Two /etc/printcap  files can look  identical and  yet one works 
  930.         and the other doesn't. 
  931.  
  932.           See if ``lpc stat''  reports a printer called  ` :'. The last 
  933.         character  on  a continued  line  must  be a\.  If  there are 
  934.         whitespace characters after the\then  it doesn't register the 
  935.         next line as a continuation. 
  936.  
  937.  
  938.         0.3.9 The minimum /etc/printcap? 
  939.  
  940.         This is a silly question but it is frequently asked. The answer 
  941.         is ``lp:sh''  (that's 6  bytes including  the required linefeed 
  942.         character on the end). To  use this /etc/printcap you must make 
  943.         /dev/lp a symlink  to your printer and  create your spool queue 
  944.         directory  as  /usr/spool/lpd.  (You might  think  that  if you 
  945.         wanted banner pages you could loose the ``:sh'' but the termcap 
  946.         syntax requires at least one capability per entry). 
  947.  
  948.  
  949.         0.3.10 How do I prevent the `staircase effect'? 
  950.  
  951.         Un*x terminates each line  of a file with  a linefeed but not a 
  952.         carriage return so taken literally  a Un*x text file printed on 
  953.         an  ASCII device  will start  each  line below  the end  of the 
  954.         previous line. Some printers can  be set to treat "linefeed" as 
  955.         "carriage return, linefeed", others can't. If yours can then do 
  956.         simply do that. If  the printer cannot be  fixed create a shell 
  957.         script filter that reads: 
  958.  
  959.  
  960.           
  961.           #!/bin/sh
  962.           if [ $1 = -c ]; then
  963.             cat
  964.           else
  965.             sed -e s/$/^M/
  966.           fi
  967.           # the ``echo -ne'' assumes that /bin/sh is realy bash
  968.           echo -ne "f
  969.           
  970.  
  971.           where M is a carriage return character not a followed by a M. 
  972.         To type M in emacs  use the sequence C-q C-m  and in vi use C-v 
  973.         C-m.  Conventionally this  script  is called  /usr/lib/lpf. The 
  974.         test  of $  1 allows  the  isertion of  carriage returns  to be 
  975.         switched off by the `-l' switch on lpr. 
  976.  
  977.           Alternatively your printer  may have an  escape sequence that 
  978.         will  set  the way  it  handles linefeed  characters.  A simple 
  979.         filter that  uses an `echo  -ne' command to  send this sequence 
  980.         may be appropriate. 
  981.  
  982.  
  983.           
  984.           #!/bin/sh
  985.           # Filter for HP printers to treat LF as CRLF  
  986.           # the ``echo -ne'' assumes that /bin/sh is realy bash
  987.           echo -ne "033\&k2G
  988.           cat
  989.           echo -ne "f
  990.           
  991.  
  992.  
  993.         0.3.11 Resetting the printer after each printout 
  994.  
  995.         Either   make   your  filters   do  it   or  define   the  `tr' 
  996.         ``capability'' in /etc/printcap to be your printer's font reset 
  997.         command.  For details  of  the format  of  this string  see the 
  998.         question on  the format  of printcap.  This may  not work  if a 
  999.         printout crashes in the middle  of an escape sequence - putting 
  1000.         a lot  of @ on  the front may  help but this  probably won't be 
  1001.         enough it  you were  printing raster  graphics when  the filter 
  1002.         died. 
  1003.  
  1004.  
  1005.         0.3.12 Preventing formfeed after each printout 
  1006.  
  1007.         If you don't  have an `if' specified  in /etc/printcap then lpd 
  1008.         will automatically put a  formfeed at the end  of each file. If 
  1009.         you're using a filter  then it's up to  the filter to decide if 
  1010.         it wants to  put a formfeed. To  disable formfeed completely if 
  1011.         you don't  have an  `if' put  :ff=: in  your /etc/printcap. But 
  1012.         please note this suppresses the  formfeed that would usually be 
  1013.         printed  if a  filter dies.  If you  want formfeeds  after text 
  1014.         printouts  but  not on  printouts  printed with  `lpr  -l' then 
  1015.         create the following `if' filter: 
  1016.  
  1017.  
  1018.           
  1019.           #!/bin/sh
  1020.           # the ``echo -ne'' assumes that /bin/sh is realy bash
  1021.           cat
  1022.           if [ "$1" != -c ]; then
  1023.             echo -ne "f
  1024.           fi
  1025.           
  1026.  
  1027.           If you want a formfeed after  `lpr -l' to be optional you can 
  1028.         misuse  the  `-i'  switch to  suppress  the  formfeed  with the 
  1029.         following trick  (after all  `lpr -i  -l' would  usually not be 
  1030.         implemented). 
  1031.  
  1032.  
  1033.           
  1034.           #!/bin/sh
  1035.           cat
  1036.           # use lpr -i -l to print raw without trailing formfeed
  1037.           if [ "$1" != -c -o "$4" = -i0 ]; then 
  1038.             # the ``echo -ne'' assumes that /bin/sh is realy bash
  1039.             echo -ne "f
  1040.           fi
  1041.           
  1042.  
  1043.  
  1044.         0.3.13 Printing to a serial port 
  1045.  
  1046.         The   first  section  applies   to  both  net-2  and  pre-net-2 
  1047.         implementations of lpd; then there is a section applicable only 
  1048.         to the older implementation; the rest applies to net-2 only. 
  1049.  
  1050.           First, there is a kernel patch you need to make. This applies 
  1051.         to  pre-net-2 lpd  as well  (actually, the  use of  this should 
  1052.         probably just  be commented  out of  the lpd  source code). The 
  1053.         change is for  at least patchlevel 10,  but probably all others 
  1054.         as well. 
  1055.  
  1056.           in /usr/src/linux/kernel/chr_drv/tty_ioctl.c, around line 
  1057.         390, you will see: 
  1058.  
  1059.  
  1060.           
  1061.                           case TIOCEXCL:
  1062.                                   return -EINVAL; /* not implemented */
  1063.           
  1064.  
  1065.           Change this to return 0,  recompile the kernel, and you'll be 
  1066.         all set. 
  1067.  
  1068.           The following applies only to the "old" lpd, before net-2. 
  1069.  
  1070.           You cannot set any serial port settings (including baud rate) 
  1071.         in your printcap. Leave them all out and use stty to set up the 
  1072.         port (if necessary) in your rc.local, and you should be all set 
  1073.         (to find the correct stty  settings, start with the default and 
  1074.         twiddle until you can correctly cat a file out the port). 
  1075.  
  1076.           The rest of this applies only to net-2 lpd although it may be 
  1077.         helpful to read. I put more  detail into this because it's what 
  1078.         I use. 
  1079.  
  1080.  
  1081.         0.3.14 Serial settings in printcap 
  1082.  
  1083.         There are two  sets of flags  which you will  need to set, plus 
  1084.         the baud  rate (Note: the  "fc" flag setting  seems to override 
  1085.         the br # capability,  so be sure to  set that correctly as well 
  1086.         as the br # !). 
  1087.  
  1088.           Each of the flags can have  bits set and cleared. Clearing is 
  1089.         done first, so specify the clear flags  (fc # and xc # ) before 
  1090.         the set flags (fs and xs). 
  1091.  
  1092.           Setting the br #  capability is self-explanatory. Example: br 
  1093.         # 9600 
  1094.  
  1095.           It is very easy to translate from 'stty' settings to printcap 
  1096.         flag settings. If you need to, see the man page for stty now. 
  1097.  
  1098.           Use stty  to set up  the printer port  so that you  can cat a 
  1099.         file to it and  have it print correctly.  Here's what "stty -a" 
  1100.         looks like for my printer port: 
  1101.  
  1102.  
  1103.           
  1104.           dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
  1105.           speed 9600 baud; rows 0; columns 0; line = 0;
  1106.           intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
  1107.           eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
  1108.           lnext = ^V; min = 1; time = 0;
  1109.           -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
  1110.           -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff
  1111.           -iuclc -ixany -imaxbel
  1112.           -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
  1113.           ff0
  1114.           -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop
  1115.           -echoprt -echoctl -echoke
  1116.           
  1117.  
  1118.           The  only  changes  between  this and  the  way  the  port is 
  1119.         initialized  at bootup  are -clocal,  -crtscts, and  ixon. Your 
  1120.         port may well  be different depending on  how your printer does 
  1121.         flow control. 
  1122.  
  1123.           Once you have  your stty settings  right, so that  cat file > 
  1124.         /dev/ttyS2 (in my case) sends the  file to the printer, look at 
  1125.         the file  /usr/src/linux/include/linux/termios.h. This contains 
  1126.         a lot of # defines and a  few structs (You may wish to cat this 
  1127.         file to the printer (you do  have that working, right?) and use 
  1128.         it as scratch paper  -- I did!). Go  to the section that starts 
  1129.         out 
  1130.  
  1131.  
  1132.           
  1133.           /* c_cflag bit meaning */
  1134.           #define CBAUD   0000017
  1135.           
  1136.  
  1137.           This section lists the meaning of the ``fc # '' and ``fs # '' 
  1138.         bits.  You will  notice that  the names  there (after  the baud 
  1139.         rates) match up with one of  the lines of stty output. Didn't I 
  1140.         say this was going to be easy? 
  1141.  
  1142.           Note which of  those settings are  preceded with a  - in your 
  1143.         stty output.  Sum up all  those numbers (they  are octal). This 
  1144.         represents the bits you want to  *clear*, so the result is your 
  1145.         fc # capability.  Of course, remember that  you will be setting 
  1146.         bits directly after you clear, so you can just use fc # 0177777 
  1147.         (I do). 
  1148.  
  1149.           Now do the  same for those settings  (listed in this section) 
  1150.         which do not  have a - before  them in your  stty output. In my 
  1151.         example the important ones  are CS8 (0000060), HUPCL (0002000), 
  1152.         and CREAD (0000200). Also note the  flags for your baud rate -- 
  1153.         mine is 0000015.  Add those all  up, and in  my example you get 
  1154.         0002275. This goes  in your fs  # capability (fs  # 02275 works 
  1155.         fine in my example). 
  1156.  
  1157.           Do the  same with  set &  clear for  the next  section of the 
  1158.         include file, "c_lflag bits". In my case I didn't have to set 
  1159.         anything, so I just use ``xc # 0157777'' and ``xs # 0''. 
  1160.  
  1161.           Once your  printcap is  set up, try  it out.  If things don't 
  1162.         work, see the next section. 
  1163.  
  1164.  
  1165.         0.3.15 cat works to the serial port, but not lpd (1) 
  1166.  
  1167.         Generally getting  lpd up  and running  is explained elsewhere, 
  1168.         but if you are having trouble with serial port settings you can 
  1169.         prevent lpd from trying to  configure your port by treating you 
  1170.         printer as one that does  not present a normal device interface 
  1171.         (qv). 
  1172.  
  1173.  
  1174.      1. Set  your  printer  (in your  printcap)  to  /dev/null1. Create 
  1175.         /dev/null1 using mknod /dev/null1 c 1 3 (because you don't want 
  1176.         /dev/null to be opened exclusively). 
  1177.  
  1178.         remove the baud rate and flags settings from your printcap. 
  1179.  
  1180.  
  1181.      2. Create a script such as this: 
  1182.  
  1183.  
  1184.       
  1185.       #!/bin/sh
  1186.       echo if: $* >> /var/spool/lpd/results
  1187.       # /dev/lp is linked to /dev/ttyS2 which has the printer
  1188.       exec your-old-input-filter $* > /dev/lp
  1189.       
  1190.          ...or if you didn't have an old if installed...
  1191.       
  1192.       #!/bin/sh
  1193.       echo if: $* >> /var/spool/lpd/results
  1194.       cat > /dev/lp
  1195.       # the ``echo -ne'' assumes that /bin/sh is realy bash
  1196.       echo -en "f > /dev/lp
  1197.       
  1198.         Make sure it's  world-executable and world-readable.  I call my 
  1199.         script  /var/spool/lpd/if, to  make things  easy. Try  out your 
  1200.         script (/var/spool/lpd/if < somefile) and see if it prints. 
  1201.  
  1202.  
  1203.      3. Set the  if= capability in  your printcap to  call this script, 
  1204.         e.g. if=/var/spool/lpd/if 
  1205.  
  1206.  
  1207.      4. Use stty to correctly set your port settings. Try to print now. 
  1208.         You should  be able  to tell if  things are  being spooled, and 
  1209.         things *should*  be printed, if  your manual testing  of the if 
  1210.         script works. But this  is a kludge, so the  idea is not to use 
  1211.         the if script. 
  1212.  
  1213.  
  1214.         0.3.16 cat works to the serial port, but not lpd (2) 
  1215.  
  1216.         Assuming the above method using  the "if" filter works and that 
  1217.         you  belive that  you  have specified  what  you think  are the 
  1218.         correct  flags and  baud rate  in printcap;  check ``stty  -a < 
  1219.         /dev/ttyS2''  (or  whatever  your  printer  port  is).  If  the 
  1220.         settings  are  not  correct,  check  your  flags  against  your 
  1221.         printout from termios.h. If the settings are *way* not correct, 
  1222.         you may need to fix lpd  itself. The patch follows, and you can 
  1223.         probably see why  it's needed :-)  It gets applied  in the lpd/ 
  1224.         subdirectory of the lpd source. 
  1225.  
  1226.           (the patch is coming in just a sec) 
  1227.  
  1228.           When I was setting mine up, I followed a sequence like this: 
  1229.  
  1230.  
  1231.           
  1232.           lprm (whatever -- make sure queue is empty and lpd is running)
  1233.           stty (correct settings) < /dev/ttyS2
  1234.           lpr (something small)
  1235.           stty -a < /dev/ttyS2   (often had to ctrl-c out of this one)
  1236.           (twiddle with flags)
  1237.           lprm (whatever -- make sure queue is empty again...)
  1238.           
  1239.  
  1240.           Here's the patch (I think its reversed so apply it with -R): 
  1241.  
  1242.  
  1243.           
  1244.           -------------------------------Cut Here-------------------------------------
  1245.           *** printjob.c  Thu Jul  8 20:56:59 1993
  1246.           --- printjob.c~ Sat Feb 27 09:07:01 1993
  1247.           ***************
  1248.           *** 1271,1277 ****
  1249.                   }
  1250.             #ifdef LINUX
  1251.                   ttybuf.c_cflag &= ~FC;          /* not quite right! */
  1252.           !       ttybuf.c_cflag |= FS;           /* not quite right! */
  1253.             #else
  1254.                   ttybuf.sg_flags &= ~FC;
  1255.                   ttybuf.sg_flags |= FS;
  1256.           --- 1271,1277 ----
  1257.                   }
  1258.             #ifdef LINUX
  1259.                   ttybuf.c_cflag &= ~FC;          /* not quite right! */
  1260.           !       ttybuf.c_cflag |= ~FS;          /* not quite right! */
  1261.             #else
  1262.                   ttybuf.sg_flags &= ~FC;
  1263.                   ttybuf.sg_flags |= FS;
  1264.           -------------------------------Cut Here-------------------------------------
  1265.           
  1266.  
  1267.  
  1268.         0.3.17 Printers that aren't simple character devices 
  1269.  
  1270.         [ Firstly I'll  explain the subject. ]  The most common example 
  1271.         is a printer  that is connected  via a network  in some strange 
  1272.         way.  For  example  consider a  printer  conneccted  to  a host 
  1273.         running some  esoteric OS with  which you  can only communicate 
  1274.         via E-mail. To  use this printer without  going through lpr you 
  1275.         would say something like: 
  1276.  
  1277.         | uuencode tmp | mail printer-request@eosteric 
  1278.  
  1279.         in place of: 
  1280.  
  1281.         > /dev/lp 
  1282.  
  1283.           To use  such a printer  through lpr the  ``lp'' capability of 
  1284.         the print queue  should be directed to  a /dev/null type device 
  1285.         (e.g. ``mknod /dev/null1  c 1 3'') but  not /dev/null itself as 
  1286.         lpd  opens  the  device  exclusively.  Each  filter  must  must 
  1287.         explicitly uuencode and mail its  output. In more complex cases 
  1288.         if you already have an ``if''  or ``of'' filter for a strangely 
  1289.         connected  printer then  other  filters can  pass  their output 
  1290.         to/through this filter to avoid  duplication of effort. In this 
  1291.         case the ``if'' filter should usually be called with the ``-c'' 
  1292.         switch to minimise the further manipulations if performs. 
  1293.  
  1294.  
  1295.         0.3.18 Getting burst/banner pages 
  1296.  
  1297.         For a simple text printer  (in particular not postscript) and a 
  1298.         simple text banner simply take :sh: out of the printcap record. 
  1299.         If you want to prevent the  banner comming out in whatever font 
  1300.         was   last   used  on   the  printer   then  define   the  `tr' 
  1301.         ``capability'' to be your printer's font reset command. 
  1302.  
  1303.           If you want  a fancy customised banner  (or have a postscript 
  1304.         printer)  leave :sh:  in  the printcap  and  make each  of your 
  1305.         filters print  the banner.  All the  information to  put on the 
  1306.         banner  is  included  in  the  filter's  positional parameters. 
  1307.         RTFM(printcap)      for    details.   [    If    you're   using 
  1308.         <B.A.McCauley@bham.ac.uk>'s magic-filter package  then call the 
  1309.         code to print the banners from the config script. ] 
  1310.  
  1311.  
  1312.         0.3.19 Printing text on a PS printer 
  1313.  
  1314.         You need  a filter  based on a  program that  converts ascii to 
  1315.         postscript. The  most well known  of these  is ``enscript'' but 
  1316.         it's  also  the  hardest  to  find.  Others  include  ``a2ps'', 
  1317.         ``nenscript'', and ``mpage'' (for details of these see sections 
  1318.         0.2 - 0.2 ). 
  1319.  
  1320.  
  1321.         0.3.20 Trunation of graphics files 
  1322.  
  1323.         This is usually because  you've got a limit  set on the maximum 
  1324.         size file that can sit in the spool queue. Put `mx # 0' in your 
  1325.         printcap. 
  1326.  
  1327.  
  1328.         0.3.21 Why doesn't `lpr -i' work? 
  1329.  
  1330.         To get lpr -i  to work you need a  filter istalled as `if' that 
  1331.         implements it. The -i switch is  simply passed on by lpd to the 
  1332.         filter. There is such a filter usually called /usr/lib/lpf that 
  1333.         can  be  obtained from  bsd  source archives  in  the directory 
  1334.         bsd-source/lpr/filters. It's  also part  of Fred's  port but he 
  1335.         put it in /usr/bin/. If you whant to use this program but still 
  1336.         want  your filter  to do  some printer  specific initialisation 
  1337.         then write script thus: 
  1338.  
  1339.  
  1340.           
  1341.           #!/bin/sh
  1342.           # My initialisation stuff goes here
  1343.           exec /usr/lib/lpf $*
  1344.           
  1345.  
  1346.  
  1347.         0.3.22 Why doesn't `lpr -p' work? 
  1348.  
  1349.         Because it's  broken. lpd always  thinks that the  printer is 0 
  1350.         characters  wide  regardless of  what  printcap  says. Previous 
  1351.         versions of the lpd-HOWTO contained a patch but it has now been 
  1352.         applied to the latest distribution of the net-2 stuff. 
  1353.  
  1354.           One other thing: lpd calls pr by full pathname so if you keep 
  1355.         pr  somewhere  different  from  /usr/bin/pr  you  will  need  a 
  1356.         symlink. (Where lpd expects to find pr may vary from version to 
  1357.         version). 
  1358.  
  1359.  
  1360.         0.3.23 lprm says `too many users' 
  1361.  
  1362.         You have an anchient libc.so with a broken scandir(). 
  1363.  
  1364.  
  1365.         0.3.24 lpc complains that it hasn't stopped a daemon 
  1366.  
  1367.         One lpd  process runs  all the time  and it  spawns children to 
  1368.         handle each printer  as needed. Sometimes  these children leave 
  1369.         lock files lying about. This is harless. 
  1370.  
  1371.  
  1372.         0.3.25 lpr over a network 
  1373.  
  1374.         To print on the printer listed as foor "foo" in the printcap on 
  1375.         machine "bar.baz.net"  from the machine  "mine.baz.net" you put 
  1376.         an entry like this in your /etc/printcap (on mine.baz.net): 
  1377.  
  1378.         foo:lp=:rm=bar.baz.net:rp=foo:sd=/usr/lpd/spool/foo: 
  1379.  
  1380.         and, of course, create the spool directory /usr/lpd/spool/foo. 
  1381.  
  1382.           There's   no  point  specifying   filters  and  the  like  in 
  1383.         mine.baz.net:/etc/printcap      as    it's    the    ones    in 
  1384.         bar.baz.net:/etc/printcap that will get used. 
  1385.  
  1386.           On the machine bar.baz.foo, you need to put "mine.baz.net" on 
  1387.         a line by itself  in either /etc/hosts.equiv or /etc/hosts.lpd; 
  1388.         note  that  putting  it  in  /etc/hosts.equiv  will  allow  for 
  1389.         unauthenticated logins  as well as  printing. /etc/hosts.lpd is 
  1390.         printing only. 
  1391.  
  1392.  
  1393.         0.3.26 Writing lpd filters 
  1394.  
  1395.         In normal Un*x terminology, filters  are just programs (so they 
  1396.         must have  execute permission)  that read  a stream  from their 
  1397.         standard input and write to their standard output. 
  1398.  
  1399.           lpd filters are filters in the sense that thay read STDIN and 
  1400.         write to STDOUT, but  are unusual in that  they may assume that 
  1401.         their standard input  is a file  and perform lseek() operations 
  1402.         on it. 
  1403.  
  1404.           All lpd  filters have a  common command line  syntax (or more 
  1405.         often simply  ignore command  line parameters).  For details of 
  1406.         the command line parameters RTFM(printcap). 
  1407.  
  1408.           It's easier to debug filters if you test them in an immediate 
  1409.         shell before you install them. (If your filter makes use of its 
  1410.         command line arguments you'll have to specify them too). 
  1411.  
  1412.         my-new-filter <file >/dev/lp1 
  1413.  
  1414.         If you  want to write  a shell script  filter it must  have a # 
  1415.         !/bin/sh header. Here is the generic form of a filter to accept 
  1416.         postscript. 
  1417.  
  1418.  
  1419.         
  1420.         #!/bin/sh
  1421.         /path.../gs -q -dSAFER -dNOPAUSE -r??? -sDevice=?????? -sOutputFile=- -
  1422.         
  1423.         and place its full pathname as  one of the filter (usually `if' 
  1424.         but not  'of'!) parameter in  the printcap for  your printer. I 
  1425.         suggest  putting such  scripts in  a subdirectory  off /usr/lib 
  1426.         (sat /usr/lib/lpd/).  (-dSAFER attempts  to protect  against ps 
  1427.         interpreter  security holes,  -q  and -dNOPAUSE  make  it churn 
  1428.         right along quietly,  and Device is  the appropriate driver for 
  1429.         your printer). 
  1430.  
  1431.           Here is an Epson FX-80 dvi filter using ghostscript: 
  1432.  
  1433.  
  1434.           
  1435.           #!/bin/sh
  1436.           /usr/TeX/bin/dvips -f | \
  1437.           /usr/bin/gs -q -dSAFER -sDEVICE=eps9high -r120x216 \
  1438.                                                   -dNOPAUSE -sOutputFile=- -
  1439.           
  1440.  
  1441.           More tools useful for makeing filters are described elsewhere 
  1442.         in this document. 
  1443.  
  1444.  
  1445.         0.3.27 A filter tests OK but fails when lpd uses it 
  1446.  
  1447.         You may need a # !/bin/sh header. You may also need to set PATH 
  1448.         within  the  script  since  the  daemon's  PATH  may  not  have 
  1449.         everything you need. 
  1450.  
  1451.  
  1452.         0.3.28 `of' filters 
  1453.  
  1454.         Never    use   these.  (Well   strictly   speaking   there  are 
  1455.         circumstances but you're unlikey to meet them). 
  1456.  
  1457.  
  1458.         0.3.29 Getting filters for given printers 
  1459.  
  1460.         From: B.A.McCauley@bham.ac.uk (Brian McCauley) 
  1461.  
  1462.           >From BSD source archives (I think). [ Editors note: I need a 
  1463.         better answer here ] . 
  1464.  
  1465.           If  you already  have  a program  to  print say  DVI  on your 
  1466.         printer  by some  mechanism  then making  it  into a  filter is 
  1467.         usually a  matter of writting  trivial shell script  - see this 
  1468.         HOWTO. If the program you are  using insists on reading a names 
  1469.         file  as input  see the  next question.  Text mode  filters are 
  1470.         trivial too  (see this  HOWTO) unless  you want  lpr to  have a 
  1471.         choice of  fonts in  which case  they are  slightly harder than 
  1472.         trivial.  You  will  probably want  to  insert  and  `echo -ne' 
  1473.         command at the beginning  and end of your  filter to set up the 
  1474.         font etc to your liking. 
  1475.  
  1476.  
  1477.         0.3.30 Filters from programs that won't read STDIN 
  1478.  
  1479.         For example dvilj2p insists  on a named file  as its input (and 
  1480.         what's more expects one with a .dvi suffix) so do this: 
  1481.  
  1482.  
  1483.           
  1484.           #!/bin/sh
  1485.           ln -s /proc/self/fd/0 /tmp/$$.dvi
  1486.           dvilj2p /tmp/$$
  1487.           rm /tmp/$$.dvi
  1488.           
  1489.  
  1490.           Note: If  it wasn't  for the  fact that  dvilj2p adds  a .dvi 
  1491.         suffix you wouldn't  need the temporary  symlink and could just 
  1492.         specify  /proc/self/fd/0 directly.  People  who use  this trick 
  1493.         often  usually keep  permanant  symlinks to  /proc/self/fd/* in 
  1494.         /dev.  If  you  don't  have  procfs  you'll  need  to  create a 
  1495.         temporary file. 
  1496.  
  1497.  
  1498.         0.3.31 Having many filters 
  1499.  
  1500.         Historically the  lpr command was  created to  support a finite 
  1501.         set of possible  file types. You  can, in fact,  use any of the 
  1502.         filters for  any reason.  If you're  never going  to use Benson 
  1503.         Varian raster files you could use  the -v switch for GIF files. 
  1504.         You could even use -d for low res and -v for high res. Remember 
  1505.         that if you create a filter for a file format that takes a long 
  1506.         time to  process then your  printer may sit  idle between print 
  1507.         jobs even when there are things in the queue. 
  1508.  
  1509.           If you are on a network remember that the filter setups go on 
  1510.         the  print  server. One  way  to  avoid running  out  of filter 
  1511.         options is to define  several logical printers in /etc/printcap 
  1512.         that all point to the same  physical one and put each filter in 
  1513.         the ``if''  field of a  different printcap entry.  This has the 
  1514.         advantage that you  can set the  PRINTER enviroment variable to 
  1515.         choose  your filter  rather than  having to  specify it  on the 
  1516.         command line each time. One small problem with this is that you 
  1517.         have no  control over  the order  in which  files from separate 
  1518.         queues are printed. 
  1519.  
  1520.           Another way to avoid running out  of possible types is to use 
  1521.         magic filters. 
  1522.  
  1523.  
  1524.         0.3.32 What are magic filters? 
  1525.  
  1526.         Magic  filters  deduce  their input  files'  types  from `magic 
  1527.         numbers'  (distictive  byte  patterns  at  particular offsets). 
  1528.         Magic  filters are  usually perl  scripts,  shell scripts  or C 
  1529.         programs  that  simply identify  the  file type  then  call the 
  1530.         appropriate     non-magic   filter.    Blatent   plug   :-)   I 
  1531.         <B.A.McCauley@bham.ac.uk>  have  a  generic  magic  filter bash 
  1532.         script that selects the right filter to use based on the output 
  1533.         of  the `file'  command. With  my magic  ``dvi'' filter  (and 3 
  1534.         associated non-magic filters) I can do things like: 
  1535.  
  1536.         lpr -d file1.dvi file2.div.Z file3.ps file4.texinfo.gz 
  1537.  
  1538.         (BTW confguring  lpr to handle  texinfo files is  getting a bit 
  1539.         silly - see previous question). 
  1540.  
  1541.           This                        is             now            at: 
  1542.         tsx-11.mit.edu:pub/linux/sources/usr.bin/magic-filter-0.3.tar.gz 
  1543.         (Although the release number will possibly change in future). 
  1544.  
  1545.           Magic filters  should never specified  as `of'  as the output 
  1546.         filter only gets called  once if a number  of files are printed 
  1547.         without a gap. 
  1548.  
  1549.           IMHO magic  filters as `if'  can also cause  problems as they 
  1550.         may  prevent  you, say,  listing  a PostScript  or  nroff file. 
  1551.         (Other  people  disagree as,  if  you are  making  your printer 
  1552.         available  on  a  network,  it  can  be  a  pain  having people 
  1553.         accidently listing ps files.) The  following is an example of a 
  1554.         magic shell script which should  take either postscript or text 
  1555.         and deal with it: 
  1556.  
  1557.  
  1558.         0.3.33 Magic filter examples 
  1559.  
  1560.         The  following is  an  example of  a  magic shell  script which 
  1561.         should take either postscript or text and deal with it: 
  1562.  
  1563.  
  1564.           
  1565.           #!/bin/sh
  1566.           # This is based on a script I received from Scott Doty and which was
  1567.           # written by Keith Walker.  Keith's script made use of the fact that
  1568.           # lpd passes options to if:
  1569.           #
  1570.           #  <if> -w<width> -l<length> -i<indent> -n <user> -h <host> <accountingfile>
  1571.           # 
  1572.           # to print text out well at any size.  This one does not.  These options
  1573.           # are also handy if you want to do your own snazzy header page, much
  1574.           # like NeWSPrint from Sun does (although running PostScript through
  1575.           # the display server to get it interpreted is a bit much :) 
  1576.           #
  1577.           # This is untested, but bits of it came from working programs, so it 
  1578.           # should work.
  1579.           #
  1580.           # gs will reset the printer anyway, so the this text setup doesn't matter
  1581.           # setup should include the escape code for \n conversion, if applicable
  1582.           #
  1583.           printf "<printer setup for text printing (escape codes, etc)>"
  1584.           
  1585.           read first_line
  1586.           first_two_chars=`expr $first_line : '(..)'`
  1587.           
  1588.           if [ "$first_two_chars" = "%!" ]; then # it's postscript
  1589.           
  1590.                   /usr/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=??????? -sOutputFile=- -
  1591.           
  1592.           else # it's plain text
  1593.           
  1594.                   echo -n $first_line
  1595.                   cat
  1596.                   printf "\014"
  1597.           
  1598.           fi
  1599.           
  1600.  
  1601.           Note  that for  the paranoid,  shell  scripts run  as someone 
  1602.         other  that  the  user  are  a  security  hole,  but  they  are 
  1603.         illustrative. 
  1604.  
  1605.           An example written in C, which  may be easily adapted to most 
  1606.         installations is available from the printing mail server as lpr 
  1607.         _if.c 
  1608.  
  1609.  
  1610.         0.4 Previewing 
  1611.  
  1612.         These sections  describe various  ways to  preview things under 
  1613.         Linux - that is, how to  view them in a way approximating their 
  1614.         final form without printing them out. 
  1615.  
  1616.  
  1617.         0.4.1 ghostview 
  1618.  
  1619.         Ghostview, a companion  program for gs,  previews postscript on 
  1620.         an X display. It  also lets you select  individual or ranges of 
  1621.         pages from  a postscript document  to print using  lpr. The new 
  1622.         version, 1.5, has fixed a  few glitches which never bothered me 
  1623.         but may  make a difference  to you.  It also calls  gs with the 
  1624.         -dSAFER option  and has  a few  more resource  and command-line 
  1625.         options  relative  to  1.4.1.  The  real  installation  is from 
  1626.         prep.ai.mit.edu:/pub/gnu/ghostview-XXX.tar.gz and builds out of 
  1627.         the box. Ghostview requires gs to  work. The new version of gs, 
  1628.         2.6.x,  will  use  X  display fonts  in  an  effort  to improve 
  1629.         legibility  at  the  low  resolutions  of  a  video  monitor (a 
  1630.         previous   failing   of  this   pair  relative   to  commercial 
  1631.         display-postscript based systems such  as Sun's pageview). This 
  1632.         works  very well  for  me at  least,  at the  expense  of exact 
  1633.         character positioning (x fonts have different widths). In fact, 
  1634.         I thought that  Ghostview looks better  than Sun's pageview the 
  1635.         other  day when  I  looked at  the  same page  in  oth programs 
  1636.         side-by-side. Ghostview/gs also has much more intelligent color 
  1637.         handling than  pageview. You might  wish to let  gs render some 
  1638.         Type 1  fonts you install  instead of using  platform fonts (or 
  1639.         the awful fonts  gs comes with.  To do this  while in ghostview 
  1640.         (or   in  any  situation   involving  the  X11  driver),  place 
  1641.         ``ghostscript.useExternalFonts:   false''  in  your  .Xdefaults 
  1642.         file, and the platform fonts will not be used. 
  1643.  
  1644.           This is  part of a  message posted  to gnu.ghostscript.bug by 
  1645.         Tim Theisen <ghostview@cs.wisc.edu>: 
  1646.  
  1647.           (note  that the  usual Linux  X-server,  XFree, is  simply an 
  1648.         enhanced version of MIT's effort at a i386 X-server (X386), and 
  1649.         does contain  the X11R5 Type  1 rasterizer which  I beleive was 
  1650.         contributed by IBM.) 
  1651.  
  1652.           Ghostscript now  uses the X  Toolkit to pick  up X Resources. 
  1653.         Now  ghostscript  uses the  standard  X rules  that  allow more 
  1654.         specific resources to override  less specific ones giving users 
  1655.         the full  power of  X resources to  control the  X11 driver. It 
  1656.         also allows  system administrators to  establish an application 
  1657.         defaults  file  with resources  specific  to  their ghostscript 
  1658.         installation. 
  1659.  
  1660.           The  customization choices  mentioned  in make.doc  have been 
  1661.         moved  into X  resources  and are  now  configured at  run time 
  1662.         rather than compile  time. Sorry, this  section of make.doc did 
  1663.         not get revised for the 2.6.1 release. 
  1664.  
  1665.           If  useBackingPixmap  is  set,  ghostscript  will  attempt to 
  1666.         allocate   a  backing  pixmap.  If  one  cannot  be  allocated, 
  1667.         ghostscript  will issue  a warning  and  ask for  backing store 
  1668.         instead. (Since there were insufficient resources for a backing 
  1669.         pixmap, the X server may not provide backing store either.) 
  1670.  
  1671.           Color Handling was totally revamped for gs 2.6. 
  1672.  
  1673.           Ghostscript first checks for a suitable standard colormap. If 
  1674.         you have static colormap in your  X server, it would be best to 
  1675.         store   a  standard  colormap   property  on  the  root  window 
  1676.         describing the color  layout. Ghostscript will  then be able to 
  1677.         take  full advantage  of  the device.  If  you have  a standard 
  1678.         colormap  installed,  ghostscript  will  start  slightly faster 
  1679.         since it does not have to allocate colors for a cube or ramp. 
  1680.  
  1681.           If  no  standard  colormap  is  available,  ghostscript  will 
  1682.         allocate  an RGB  cube or  gray ramp.  Ghostscript tries  for a 
  1683.         5x5x5 cube on a color device,  and a 128 gray ramp on grayscale 
  1684.         devices. It will never ask for  more than 1/2 of the colors for 
  1685.         a RGB cube or gray ramp.  It also takes into account the number 
  1686.         of significant bits per pixel. (i.e.  It won't ask for 128 gray 
  1687.         levels if you only have 16 available.) 
  1688.  
  1689.           Ghostscript will attempt to allocate  colors that are off the 
  1690.         color cube/ramp as  the picture is  being rendered. Ghostscript 
  1691.         will  keep track  of 256  dynamic colors.  After all  these are 
  1692.         allocated, ghostscript asks the X server directly. 
  1693.  
  1694.           The foreground  and background  color can  be set explicitly. 
  1695.         This is important for the  visually impaired and when using the 
  1696.         ghostview widget. 
  1697.  
  1698.           Color Resources: 
  1699.  
  1700.  
  1701.       * palette(Palette):   Default  value:  "Color".  Other  allowable 
  1702.         settings:  "Grayscale", "Monochrome".  The palette  resource is 
  1703.         used  to restrict  the palette  used for  display. One  can set 
  1704.         palette to "Grayscale" or "Monochrome"  to see how a file would 
  1705.         be rendered  in grayscale or  monochrome on a  color display. I 
  1706.         use it  to avoid  dithering of gray-  scale figures  on a color 
  1707.         display with 4-bit DACs. 
  1708.  
  1709.  
  1710.       * maxGrayRamp(MaxGrayRamp): Default value: 128. Maximum number of 
  1711.         gray  levels that  ghostscript  will attempt  to  allocate. (It 
  1712.         won't try for more  than this on an  8-bit pseudo color display 
  1713.         even  if you  set  it higher.)  Set this  lower  if you  want a 
  1714.         smaller  ramp  and  would  prefer  ghostscript  to  use dynamic 
  1715.         colors. 
  1716.  
  1717.  
  1718.       * maxRGBCube(MaxRGBCube):  Default  value: 5.  Maximum  number of 
  1719.         colors levels  that ghostscript  will attempt  to allocate. (It 
  1720.         won't try for more  than this on an  8-bit pseudo color display 
  1721.         even  if you  set  it higher.)  Set this  lower  if you  want a 
  1722.         smaller  ramp  and  would  prefer  ghostscript  to  use dynamic 
  1723.         colors. 
  1724.  
  1725.           I  believe  these  values to  be  a  good  compromise between 
  1726.         dynamic allocation and fall back  onto a fairly good color cube 
  1727.         for dithering. 
  1728.  
  1729.           You   can  use  the   foreground  and  background  colors  to 
  1730.         accomplish "reverse  video". However,  if you  have a grayscale 
  1731.         device, it  may be  better to reverse  the gray  ramp using the 
  1732.         following PostScript code fragment: 
  1733.  
  1734.           [  1 exch  sub /exec  load currenttransfer  /exec load  ] cvx 
  1735.         settransfer 
  1736.  
  1737.           The X11  driver now  supports native  X11 fonts.  If you have 
  1738.         installed  the HP  XLFD  font extensions  into  your font  or X 
  1739.         server. Ghostscript will also be  able to use platform fonts at 
  1740.         rotations   of  90  degrees,  with  mirroring,  and  anamorphic 
  1741.         scaling. 
  1742.  
  1743.           The X11 driver does most if its work silently. You can get it 
  1744.         to  report  when  it  is  using  an  X11  font  by  setting the 
  1745.         logExternalFonts boolean in your X resources. 
  1746.  
  1747.           The X11 driver is setup to use the standard fonts distributed 
  1748.         with X11R5. We  purchased the Adobe Type  Manager and the Adobe 
  1749.         Plus  Pack. These  font packages  give  all the  fonts normally 
  1750.         found in the Apple LaserWriter Plus. The X11 driver is setup to 
  1751.         handle these fonts as well. (They  are a superset of the bitmap 
  1752.         fonts distributed with X11.) 
  1753.  
  1754.           You  may set  the  regularFonts, symbolFonts,  or dinbatFonts 
  1755.         resources if you have different fonts available. Each font name 
  1756.         must have 7 dashes  or it will be  ignored. Minimize the use of 
  1757.         wildcards to promote faster matching.  (I once encountered an X 
  1758.         server  that  took  many  seconds  to  do  a  font  lookup when 
  1759.         wildcards were carelessly used.) 
  1760.  
  1761.           There is a different list  of fonts for each common encoding. 
  1762.         Regular  fonts  may be  accessed  in  standard or  ISO  Latin 1 
  1763.         encoding. The  bdf files that  are distributed with  X11 are in 
  1764.         the  ISO  Latin  1 encoding.  This  leaves  out  the ligatures. 
  1765.         Luckily, the  ligatures are present  in the bdf  files, but are 
  1766.         not given an encoding, essentially commenting them out. You can 
  1767.         use   the   fixfont  program   from  the   xproof  distribution 
  1768.         (ftp.cs.wisc.edu:/pub/X/xproof.tar.Z,                        or 
  1769.         ftp.x.org:/contrib/xproof.tar.Z) to reencode  the bdf files and 
  1770.         build  X11  fonts  that  contain  the  ligatures  (i.e standard 
  1771.         encoding). 
  1772.  
  1773.           If  you  have  the  Type1  fonts  mentioned  above,  and  you 
  1774.         installed the Type1  rasterizer into you font  or X server, you 
  1775.         can use  the appended  fonts.scale to  name your  fonts so that 
  1776.         ghostscript can find them. 
  1777.  
  1778.           Font resources: 
  1779.  
  1780.  
  1781.  
  1782.         * useExternalFonts(UseExternalFonts): Default value: true. This 
  1783.           resource controls whether X11 fonts will be used. 
  1784.  
  1785.  
  1786.         * useScalableFonts(UseScalableFonts): Default value: true. This 
  1787.           resource controls whether scalable fonts will be used. If you 
  1788.           have an outline scaler in your X server, you should have this 
  1789.           on. If you  have an X  terminal, you may  get slightly better 
  1790.           performance with this on.  If you have to  use the X11 bitmap 
  1791.           scaler, turn this off. Fonts scaled by the bitmap scaler look 
  1792.           worse than the default ghostscript fonts. 
  1793.  
  1794.  
  1795.         * logExternalFonts(LogExternalFonts):   Default  value:  false. 
  1796.           Controls whether to report when X11 fonts are being used. 
  1797.  
  1798.           The following fonts.scale makes all of the fonts of the Adobe 
  1799.         Type Manager and Adobe Plus  pack available in standard and ISO 
  1800.         Latin  1 encoding.  (We  were able  to  purchase the  above two 
  1801.         packages at an educational discount price of $ 150.) 
  1802.  
  1803.  
  1804.           
  1805.           70
  1806.           agw_____.pfb -Adobe-ITC Avant Garde Gothic-Book-r-normal--0-0-0-0-p-0-iso8859-1
  1807.           agwo____.pfb -Adobe-ITC Avant Garde Gothic-Book-o-normal--0-0-0-0-p-0-iso8859-1
  1808.           agd_____.pfb -Adobe-ITC Avant Garde Gothic-Demi-r-normal--0-0-0-0-p-0-iso8859-1
  1809.           agdo____.pfb -Adobe-ITC Avant Garde Gothic-Demi-o-normal--0-0-0-0-p-0-iso8859-1
  1810.           bkl_____.pfb -Adobe-ITC Bookman-Light-r-normal--0-0-0-0-p-0-iso8859-1
  1811.           bkli____.pfb -Adobe-ITC Bookman-Light-i-normal--0-0-0-0-p-0-iso8859-1
  1812.           bkd_____.pfb -Adobe-ITC Bookman-Demi-r-normal--0-0-0-0-p-0-iso8859-1
  1813.           bkdi____.pfb -Adobe-ITC Bookman-Demi-i-normal--0-0-0-0-p-0-iso8859-1
  1814.           com_____.pfb -Adobe-Courier-Medium-r-normal--0-0-0-0-m-0-iso8859-1
  1815.           coo_____.pfb -Adobe-Courier-Medium-o-normal--0-0-0-0-m-0-iso8859-1
  1816.           cob_____.pfb -Adobe-Courier-Bold-r-normal--0-0-0-0-m-0-iso8859-1
  1817.           cobo____.pfb -Adobe-Courier-Bold-o-normal--0-0-0-0-m-0-iso8859-1
  1818.           hv______.pfb -Adobe-Helvetica-Medium-r-normal--0-0-0-0-p-0-iso8859-1
  1819.           hvo_____.pfb -Adobe-Helvetica-Medium-o-normal--0-0-0-0-p-0-iso8859-1
  1820.           hvb_____.pfb -Adobe-Helvetica-Bold-r-normal--0-0-0-0-p-0-iso8859-1
  1821.           hvbo____.pfb -Adobe-Helvetica-Bold-o-normal--0-0-0-0-p-0-iso8859-1
  1822.           hvn_____.pfb -Adobe-Helvetica-Medium-r-Narrow--0-0-0-0-p-0-iso8859-1
  1823.           hvno____.pfb -Adobe-Helvetica-Medium-o-Narrow--0-0-0-0-p-0-iso8859-1
  1824.           hvnb____.pfb -Adobe-Helvetica-Bold-r-Narrow--0-0-0-0-p-0-iso8859-1
  1825.           hvnbo___.pfb -Adobe-Helvetica-Bold-o-Narrow--0-0-0-0-p-0-iso8859-1
  1826.           ncr_____.pfb -Adobe-New Century Schoolbook-Medium-r-normal--0-0-0-0-p-0-iso8859-1
  1827.           nci_____.pfb -Adobe-New Century Schoolbook-Medium-i-normal--0-0-0-0-p-0-iso8859-1
  1828.           ncb_____.pfb -Adobe-New Century Schoolbook-Bold-r-normal--0-0-0-0-p-0-iso8859-1
  1829.           ncbi____.pfb -Adobe-New Century Schoolbook-Bold-i-normal--0-0-0-0-p-0-iso8859-1
  1830.           por_____.pfb -Adobe-Palatino-Medium-r-normal--0-0-0-0-p-0-iso8859-1
  1831.           poi_____.pfb -Adobe-Palatino-Medium-i-normal--0-0-0-0-p-0-iso8859-1
  1832.           pob_____.pfb -Adobe-Palatino-Bold-r-normal--0-0-0-0-p-0-iso8859-1
  1833.           pobi____.pfb -Adobe-Palatino-Bold-i-normal--0-0-0-0-p-0-iso8859-1
  1834.           sy______.pfb -Adobe-Symbol-Medium-r-normal--0-0-0-0-p-0-iso8859-1
  1835.           tir_____.pfb -Adobe-Times-Medium-r-normal--0-0-0-0-p-0-iso8859-1
  1836.           tii_____.pfb -Adobe-Times-Medium-i-normal--0-0-0-0-p-0-iso8859-1
  1837.           tib_____.pfb -Adobe-Times-Bold-r-normal--0-0-0-0-p-0-iso8859-1
  1838.           tibi____.pfb -Adobe-Times-Bold-i-normal--0-0-0-0-p-0-iso8859-1
  1839.           zcmi____.pfb -Adobe-ITC Zapf Chancery-Medium-i-normal--0-0-0-0-p-0-iso8859-1
  1840.           zd______.pfb -Adobe-ITC Zapf Dingbats-Medium-r-normal--0-0-0-0-p-0-iso8859-1
  1841.           agw_____.pfb -Adobe-ITC Avant Garde Gothic-Book-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1842.           agwo____.pfb -Adobe-ITC Avant Garde Gothic-Book-o-normal--0-0-0-0-p-0-adobe-fontspecific
  1843.           agd_____.pfb -Adobe-ITC Avant Garde Gothic-Demi-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1844.           agdo____.pfb -Adobe-ITC Avant Garde Gothic-Demi-o-normal--0-0-0-0-p-0-adobe-fontspecific
  1845.           bkl_____.pfb -Adobe-ITC Bookman-Light-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1846.           bkli____.pfb -Adobe-ITC Bookman-Light-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1847.           bkd_____.pfb -Adobe-ITC Bookman-Demi-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1848.           bkdi____.pfb -Adobe-ITC Bookman-Demi-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1849.           com_____.pfb -Adobe-Courier-Medium-r-normal--0-0-0-0-m-0-adobe-fontspecific
  1850.           coo_____.pfb -Adobe-Courier-Medium-o-normal--0-0-0-0-m-0-adobe-fontspecific
  1851.           cob_____.pfb -Adobe-Courier-Bold-r-normal--0-0-0-0-m-0-adobe-fontspecific
  1852.           cobo____.pfb -Adobe-Courier-Bold-o-normal--0-0-0-0-m-0-adobe-fontspecific
  1853.           hv______.pfb -Adobe-Helvetica-Medium-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1854.           hvo_____.pfb -Adobe-Helvetica-Medium-o-normal--0-0-0-0-p-0-adobe-fontspecific
  1855.           hvb_____.pfb -Adobe-Helvetica-Bold-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1856.           hvbo____.pfb -Adobe-Helvetica-Bold-o-normal--0-0-0-0-p-0-adobe-fontspecific
  1857.           hvn_____.pfb -Adobe-Helvetica-Medium-r-Narrow--0-0-0-0-p-0-adobe-fontspecific
  1858.           hvno____.pfb -Adobe-Helvetica-Medium-o-Narrow--0-0-0-0-p-0-adobe-fontspecific
  1859.           hvnb____.pfb -Adobe-Helvetica-Bold-r-Narrow--0-0-0-0-p-0-adobe-fontspecific
  1860.           hvnbo___.pfb -Adobe-Helvetica-Bold-o-Narrow--0-0-0-0-p-0-adobe-fontspecific
  1861.           ncr_____.pfb -Adobe-New Century Schoolbook-Medium-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1862.           nci_____.pfb -Adobe-New Century Schoolbook-Medium-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1863.           ncb_____.pfb -Adobe-New Century Schoolbook-Bold-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1864.           ncbi____.pfb -Adobe-New Century Schoolbook-Bold-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1865.           por_____.pfb -Adobe-Palatino-Medium-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1866.           poi_____.pfb -Adobe-Palatino-Medium-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1867.           pob_____.pfb -Adobe-Palatino-Bold-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1868.           pobi____.pfb -Adobe-Palatino-Bold-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1869.           sy______.pfb -Adobe-Symbol-Medium-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1870.           tir_____.pfb -Adobe-Times-Medium-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1871.           tii_____.pfb -Adobe-Times-Medium-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1872.           tib_____.pfb -Adobe-Times-Bold-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1873.           tibi____.pfb -Adobe-Times-Bold-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1874.           zcmi____.pfb -Adobe-ITC Zapf Chancery-Medium-i-normal--0-0-0-0-p-0-adobe-fontspecific
  1875.           zd______.pfb -Adobe-ITC Zapf Dingbats-Medium-r-normal--0-0-0-0-p-0-adobe-fontspecific
  1876.           
  1877.  
  1878.  
  1879.         0.4.2 gspreview 
  1880.  
  1881.         This is  another front-end for  ghostscript. I  have gotten and 
  1882.         built it, and actually preferred the user interface, but it had 
  1883.         a slight glitch which was  probably me doing a careless install 
  1884.         rather than  a program bug.  It didn't seem  as feature-full as 
  1885.         ghostview, though. (Not  that there are  all THAT many features 
  1886.         in      ghostview,    but    it    does    its    job    well). 
  1887.         ftp.x.org:/contrib/GSPreview... 
  1888.  
  1889.  
  1890.         0.4.3 xdvi 
  1891.  
  1892.         A beautifully legible  previewing program for  dvi with a handy 
  1893.         zoom+pan  feature. Will  not interpret  ps specials,  which are 
  1894.         understood only  by dvips (back  to the  compiler, object file, 
  1895.         and now linker analogy :) To view a file, do ``xdvi file.dvi''. 
  1896.         Mine (from  ftp.x.org:/contrib/... )  has the  selfile feature, 
  1897.         where xdvi  puts up  a file  browser... cute  but useless. This 
  1898.         comes with  either TeX  or X  in the  SLS --  I don't remember. 
  1899.         Either way, you've probably got one. 
  1900.  
  1901.  
  1902.         0.4.4 xtex 
  1903.  
  1904.         Xtex is similar  in purpose to  xdvi. I have  tried to build it 
  1905.         under      Linux    and   failed.    It    is    available   as 
  1906.         ftp.x.org:/contrib/xtex-2.18.5.tar.Z 
  1907.  
  1908.  
  1909.         0.4.5 gxditview 
  1910.  
  1911.         Ditview  produces a  preview version  of  troff source  using X 
  1912.         fonts ``groff -TX100 -mandoc  man_page.1'' will run gxditview 
  1913.         to show  you a typeset  version of  the man page.  -TX75 is the 
  1914.         same thing, but tiny. My SLS  didn't have a working one at all. 
  1915.         A good one comes with the source to groff, which you might want 
  1916.         to  get  anyway  for the  additional  drivers  (the  SLS, until 
  1917.         recently,    was   missing   several,   including  postscript). 
  1918.         prep.ai.mit.edu:/pub/gnu/groff-xxxx.tar.z 
  1919.  
  1920.  
  1921.         0.4.6 non-x-previewing 
  1922.  
  1923.         Gs comes with  pc video hardware drivers,  but under un*x these 
  1924.         are not  a good  thing. However,  there are  gs binaries around 
  1925.         which will use the Linux  VGA library (vgalib). The ghostscript 
  1926.         device  for  this  is called  linux,  thus  ``gs -sDEVICE=linux 
  1927.         file.ps''  will  show  you  an  image  of  the  Postscript. The 
  1928.         environment variable GSVGAMODE is important for this. Set it to 
  1929.         the nuber  of the  video mode  you want,  taken from  the vga.h 
  1930.         which comes with vgalib. 
  1931.  
  1932.           At  one point  the SLS  binaries had  this driver,  then they 
  1933.         didn't, and now  they do again  (I saw an  announcement to this 
  1934.         effect Aug 14).  (``gs -help'' will  list the available drivers 
  1935.         in your binary.) 
  1936.  
  1937.           If you need this  driver, a patch to  put in Linux svgalib is 
  1938.         available as ws105.zfn.uni-bremen.de:/pub/gs261-linuxdriver.sh. 
  1939.         The plain vgalib driver is available on Sunsite. 
  1940.  
  1941.           Texmgr is a program which will preview dvi under MGR. I don't 
  1942.         beleive  that it  currently works  under Linux  MGR, but  if it 
  1943.         does,  MGR uses  sufficiently less  memory  and disk  that this 
  1944.         might be an attractive option for some. 
  1945.  
  1946.           dvgt is a program which  will preview dvi with Linux svgalib, 
  1947.         or on one of several  types of graphics terminals including vt, 
  1948.         tek, or a PC with MS-Kermit. It is available on sunsite. 
  1949.  
  1950.  
  1951.         0.5 Ascii translation 
  1952.  
  1953.         These  sections describe  various  programs which  can generate 
  1954.         plain ascii from some file formats. 
  1955.  
  1956.  
  1957.         0.5.1 from TeX 
  1958.  
  1959.         Lametex will generate ascii from tex source. It is available as 
  1960.         sunsite.unc.edu:/pub/Linux/apps/tex/lametex.tar.z 
  1961.  
  1962.  
  1963.         0.5.2 from dvi 
  1964.  
  1965.         Dvi2tty is the  name of a  program which will  process dvi into 
  1966.         text. Aparently,  it will  also make  an effort  at reproducing 
  1967.         graphics as well. 
  1968.  
  1969.  
  1970.         0.5.3 from ps 
  1971.  
  1972.         Ghostscript 2.6.1 comes with a script file which will use gs to 
  1973.         extract just the text from a  ps file, called ps2ascii. See the 
  1974.         gs  information  above  for  where  it  can  be  found. Further 
  1975.         documentation is  in the  ghostscript 2.6.1  distribution files 
  1976.         `gs_2asc.ps' and `use.doc' 
  1977.  
  1978.  
  1979.         0.5.4 from troff 
  1980.  
  1981.         groff -Tascii or -Tlatin1..... 
  1982.  
  1983.  
  1984.         0.5.5 from ascii/latin1 
  1985.  
  1986.         The GNU program recode handles conversion between various forms 
  1987.         of straight text encoding, ie from Latin-1 to ASCII. This would 
  1988.         be available on prep.ai.mit.edu. 
  1989.  
  1990.