diff options
Diffstat (limited to 'en_US.ISO8859-1/books/corp-net-guide/book.sgml')
-rw-r--r-- | en_US.ISO8859-1/books/corp-net-guide/book.sgml | 3213 |
1 files changed, 0 insertions, 3213 deletions
diff --git a/en_US.ISO8859-1/books/corp-net-guide/book.sgml b/en_US.ISO8859-1/books/corp-net-guide/book.sgml deleted file mode 100644 index b817f240f8..0000000000 --- a/en_US.ISO8859-1/books/corp-net-guide/book.sgml +++ /dev/null @@ -1,3213 +0,0 @@ -<!-- $FreeBSD: doc/en_US.ISO8859-1/books/corp-net-guide/book.sgml,v 1.2 2001/04/18 02:03:23 bmah Exp $ --> -<!-- FreeBSD Documentation Project --> - -<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN"> - -<book> - <bookinfo> - <title>The FreeBSD Corporate Networker's Guide</title> - - <author> - <firstname>Ted</firstname> - <surname>Mittelstaedt</surname> - </author> - - <copyright> - <year>2000</year> - <holder>Addison-Wesley Longman, Inc</holder> - </copyright> - - <isbn>ISBN: 0-201-70481-1</isbn> - - <legalnotice> - <para>The eighth chapter of the book, <citetitle>The FreeBSD Corporate - Networker's Guide</citetitle> is excerpted here with the permission - of the publisher. No part of it may be further reproduced or - distributed without the publisher's express written - <email>Chanda.Leary-Coutu@awl.com</email>. - The other chapters of - <ulink url="http://www.awl.com/cseng/titles/0-201-70481-1">the - book</ulink> covers topics such as system administration, - fileserving, and e-mail delivery. More information about this book is - available from the publisher, with whom you can also sign up to - receive news of <ulink url="mailto:Chanda.Leary-Coutu@awl.com">related - titles</ulink>. The author's web site for the book includes sample - code, working examples, - <ulink url="http://www.freebsd-corp-net-guide.com/errata.html">errata</ulink> - and a Q&A forum, and is available at - <ulink url="http://www.freebsd-corp-net-guide.com/">http://www.freebsd-corp-net-guide.com/</ulink>.</para> - </legalnotice> - </bookinfo> - - <chapter label="8"> - <title>Printserving</title> - - <para>Printserving is a complicated topic. There are many different - software interfaces to printers, as well as a wide variety of printer - hardware interfaces. This chapter covers the basics of setting up a - print queue, using Samba to print, and administering print queues and - connections.</para> - - <sect1> - <title>PC printing history</title> - - <para>In the early days of the personal computer, printing was simple. - The PC owner bought a cheap printer, usually a dot matrix that barely - supported ASCII, and plugged it into the computer with a parallel - cable. Applications would either work with the printer or not, and - most did because all they could do was output DOS or ASCII text. The - few software applications that supported graphics generally could only - output on specific makes and models of printers. Shared - <emphasis>network</emphasis> printing, if it existed, was usually done - by some type of serial port switchbox.</para> - - <para>This was the general state of affairs with the PC until the - Windows operating system was released. All at once, application - programmers were finally free of the restrictions of worrying about - how some printer manufacturer would change printer control codes. - Graphics printing, in the form of fonts and images, was added to most - applications, and demand for it rapidly increased across the - corporation. Large, high-capacity laser printers designed for office - printing appeared on the scene. Printing went from 150 to 300 to - 600dpi for the common desktop laser printer.</para> - - <para>Today organizational network printing is complex, and printers - themselves are more complicated. Most organizations find that sharing - a few high-quality laser printers is much more cost effective than - buying many cheaper dot matrix units. Good network print serving is a - necessity, and it can be very well provided by the FreeBSD UNIX - system.</para> - </sect1> - - <sect1> - <title>Printer communication protocols and hardware</title> - - <para>Printers that don't use proprietary vendor codes communicate with - computers using one or more of three major printing protocols. The - communication is done over a hardware cable that can be a parallel - connection (printer port) or a serial connection (COM port).</para> - - <sect2> - <title>ASCII Printing Protocol</title> - - <para>The ASCII protocol is the simplest protocol used, as well as the - oldest. ASCII is also used to represent text files internally in - the DOS, UNIX, and Windows operating systems. Therefore, data taken - from a text file or a directory listing generally requires little - preparation before being sent to the printer, other than a - newline-to-carriage return/linefeed conversion for UNIX. Printers - usually follow the DOS text file convention of the print head - requiring an explicit carriage return character followed by a - linefeed character at the end of a line of text. Since UNIX uses - only the linefeed character to terminate text, an additional - carriage return character must be added to the end of each line in - raw text print output; otherwise, text prints in a - <emphasis>stairstep</emphasis> output. (Some printers have hardware - or software switches to do the conversion)</para> - </sect2> - - <sect2> - <title>PostScript Printing Protocol</title> - - <para>Adobe introduced the PostScript language in 1985; it is used to - enable the printout of high quality graphics and styled font text. - PostScript is now the de-facto print standard in the UNIX community, - and the only print standard in the Macintosh community. Numerous - UNIX utilities exist to <emphasis>beautify</emphasis> and enhance - text printing with PostScript. PostScript can be used to download - font files into a printer as well as the data to be printed. - PostScript commands can be sent to instruct the printer CPU to - image, rotate, and scale complex graphics and images, thus freeing - the host CPU. Scaling is particularly important with fonts since - the document with the font has been produced on a computer screen - with far lower resolution than the printer. For example, a 1024x768 - computer screen on a 17-inch monitor allows for a resolution of - approximately 82dpi, a modern desktop printer prints at a resolution - of 600dpi. Therefore, a font must be scaled at least seven times - larger for WYSIWYG output!</para> - - <para>PostScript printers generally come with a number of resident - fonts. For example, the NEC Silentwriter 95 contains Courier, - Helvetica, ITC Avant Garde Gothic Book, ITC Bookman Light, New - Century Schoolbook Roman, Palatino Roman, Times Roman, and several - symbol fonts. These are stored in Read Only Memory (ROM) in the - printer. When a page is printed from a Windows client that contains - a font not in the printer, a font substitution table is used. If no - substitute can be made, Courier is usually used. The user should be - conscious of this when creating documents - documents with fonts not - listed in the substitution table may cause other users problems when - printing. Avoid use of strange fonts for documents that will be - widely distributed.</para> - - <para>The user program can choose to download different fonts as - outline fonts to the PostScript printer if desired. Fonts that are - commonly used by the user are often downloaded to PostScript - printers that are connected directly to the user's computer, the - fonts are then available to successive print jobs until the printer - is turned off. When PostScript printers are networked, the clients - must download any fonts desired <emphasis>with each print - job</emphasis>. Since jobs come from different clients, the - clients cannot assume that downloaded fonts will still be in the - printer.</para> - - <para>PostScript print jobs also contain a header that is sent - describing the page layout, among other things. On a shared network - printer, this header must also be downloaded with each print job. - Although some PostScript drivers allow downloading of the header - only once, this usually requires a bi-directional serial connection - to the printer, instead of a unidirectional parallel - connection.</para> - - <para>PostScript print jobs can be sent either as binary data or as - ASCII. The main advantage of binary data transmission is that it is - faster. However, not all PostScript printers support it. Also, - fonts can generally not be downloaded in binary. When FreeBSD is - used as a printserver, ASCII PostScript printing should be selected - on the clients, this is generally the default with most PostScript - drivers.</para> - - <para>The Adobe company licenses PostScript interpreters as well as - resident fonts to printer manufacturers, and extracts a hefty - license fee from any printer manufacturer who wants to use them in - its printer. This presents both a benefit and a problem to the end - user. Although a single company holding control over a standard can - guarantee compliance, it does significantly raise the cost of the - printer. As a result, PostScript has not met with much success in - lower-end laser and inkjet Windows printing market, despite the fact - that Adobe distributes PostScript software operating system drivers - for free.</para> - - <para>One issue that is a concern when networking PostScript printers - is the selection of banner page, (also known as header page, or - <emphasis>burst page)</emphasis> printing. UNIX shared printing - began with ASCII line printers, and since UNIX is a multiuser - system, often many different user print jobs piled up in the printer - output hopper. To separate these jobs the UNIX printing system - programs support banner page printing if the client program that - submits jobs asks for them. These pages print at the beginning or - end of every print job and contain the username, submittal date, and - so on.. By default, most clients, whether remote (e.g., a Windows - LPR client) or local (e.g., the <command>/usr/bin/lpr</command> - program) trigger a banner page to be printed. One problem is that - some PostScript printers abort the entire job if they get - unformatted ASCII text instead of PostScript. (In general, - PostScript printers compatible with Hewlett-Packard Printer Control - Language [HPPCL] handle banners without problems) Banner printing - should be disabled for any printers with this problem, unless - PostScript banner page printing is set up on the server.</para> - </sect2> - - <sect2> - <title>HPPCL Printing Protocol</title> - - <para>The Hewlett Packard company currently holds the largest market - share of desktop inkjet and office laser printers. Back when - Windows was released, HP decided to expand into the desktop laser - jet market with the first LaserJet series of printers. At the time - there was much pressure on Microsoft to use Adobe Type Manager for - scaleable fonts within Windows, and to print PostScript to - higher-end printers. Microsoft decided against doing this and used - a technically inferior font standard, Truetype. They thought that - it would be unlikely that the user would download fonts to the - printer, since desktop Publishing was not being done on PC's at the - time. Instead users would rasterize the entire page to the printer - using whatever proprietary graphics printer codes the selected - printer needed. HP devised HPPCL for their LaserJets, and make - PostScript an add-on. The current revision of HPPCL now allows for - many of the same scaling and font download commands that PostScript - does. HP laser jet printers that support PostScript can be - distinguished by the letter "M" in their model number. (M is for - Macintosh, since Macintosh requires PostScript to print) For - example, the HP 6MP has PostScript, the 6P doesn't.</para> - - <para>HPPCL has almost no support in the UNIX applications market, and - it is very unlikely that any will appear soon. One big reason is - the development of the free <application>Ghostscript</application> - PostScript interpreter. <application>Ghostscript</application> can - take a PostScript input stream and print it on a PCL printer under - UNIX. Another reason is the UNIX community's dislike of reinventing - the wheel. HPPCL has no advantage over PostScript, and in many ways - there are fewer problems with PostScript. Considering that - PostScript can be added to a printer, either by hardware or use of - <application>Ghostscript</application>, what is the point of - exchanging an existing working solution for a slightly technically - inferior one? Over the life of the printer, taking into account the - costs of toner, paper, and maintenance, the initial higher cost of - PostScript support is infinitesimal.</para> - </sect2> - </sect1> - - <sect1> - <title>Network Printing Basics</title> - - <para>The most common network printing implementation is a printserver - accepting print jobs from clients tied to the server via a network - cable.</para> - - <sect2> - <title>Printservers</title> - - <para>The term "printserver" is one of those networking terms, like - <emphasis>packet,</emphasis> that has been carelessly tossed around - until it's meaning has become somewhat confusing and blurred. To be - specific, a printserver is simply a program that arbitrates print - data from multiple clients for a single printer. Printservers can - be implemented in one of the four methods described in the following - sections.</para> - - <sect3> - <title>Printserver on the fileserver</title> - - <para>The printer can be physically cabled to the PC running the - Network OS. Print jobs are submitted by clients to the - printserver software on the fileserver, which sends them down the - parallel or serial cable to the printer. The printer must be - physically close to the fileserver. This kind of printserving is - popular in smaller workgroup networks, in smaller offices.</para> - - <figure> - <title>Printserver on the fileserver</title> - - <mediaobject> - <imageobject> - <imagedata fileref="08-01" format="EPS"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> ,---------. - | ======= | Server - | ======= | +---------------------+ ,-----. -+-----------+ | +---------------+ | | | -| Printer [ ]------------[ ] | Printserver | | |_____| -+-----------+ Parallel | | Software | [ ]------_________ - Cable | +---------------+ | / ::::::: \ - +---------------------+ `---------' - Network PC</literallayout> - </textobject> - - <textobject> - <phrase>Printer, connected to a network server running - printserver software, with one or more network PCs printing - through it.</phrase> - </textobject> - </mediaobject> - </figure> - </sect3> - - <sect3> - <title>Printserver on a separate PC</title> - - <para>It is possible to run a print server program on a cheap PC - that is located next to the printer and plugged into it via - parallel cable. This program simply acts as a pass-through - program, taking network packets from the network interface and - passing them to the printer. This kind of server doesn't allow - any manipulation of print jobs, jobs usually come from a central - fileserver, where jobs are controlled.</para> - - <figure> - <title>Printserver on a separate PC</title> - - <mediaobject> - <imageobject> - <imagedata fileref="08-02" format="EPS"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> Fileserver - ,----------------. - ,---------. .---| | === | - | ======= | ,-----. | `----------======' - | ======= | | | | - +-----------+ |_____| | - | Printer [ ]------------_________---------| Ethernet - +-----------+ Parallel / ::::::: \ | - Cable `---------' | - Printserver | ,-----. - | | | - | |_____| - `---------_________ - / ::::::: \ - `---------' - Network PC</literallayout> - </textobject> - - <textobject> - <phrase>Printer connected to a printserver (typically running - FreeBSD), with network files hosted on a separate machine, - and a network PC, able to access both resources.</phrase> - </textobject> - </mediaobject> - </figure> - </sect3> - - <sect3> - <title>Printserver on a separate hardware box</title> - - <para>A printserver on a separate hardware box is exemplified by - network devices such as the Intel Netport, the HP JetDirect Ex, - the Osicom/DPI NETPrint, and the Lexmark MarkNet. Basically, these - are plastic boxes with an Ethernet connection on one side and a - parallel port on the other. Like a printserver on a PC, these - devices don't allow remote job manipulation, and merely pass - packets from the network down the parallel port to the - printer.</para> - - <figure> - <title>Printserver on a separate hardware box</title> - - <mediaobject> - <imageobject> - <imagedata fileref="08-03" format="EPS"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> Fileserver - ,----------------. - ,---------. .---| | === | - | ======= | | `----------======' - | ======= | Printserver | - +-----------+ ,--------. | - | Printer [ ]-----------[ ] ooo [ ]-------| Ethernet - +-----------+ Parallel `--------' | - Cable | - | ,-----. - | | | - | |_____| - `---------_________ - / ::::::: \ - `---------' - Network PC</literallayout> - </textobject> - - <textobject> - <phrase>Printer connected to a dedicated print server - <quote>appliance</quote>.</phrase> - </textobject> - </mediaobject> - </figure> - </sect3> - - <sect3> - <title>Printserver in the Printer</title> - - <para>The HP JetDirect Internal is the best known printserver of - this type. It is inserted into a slot in the printer case, and it - works identically to the external JetDirect units.</para> - - <figure> - <title>Printeserver in the printer</title> - - <mediaobject> - <imageobject> - <imagedata fileref="08-04" format="EPS"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> Fileserver - ,----------------. - ,---------. .---| | === | - | ======= | | `----------======' - | ======= | | - +-----------+ | - | Printer [ ]------------------------------| Ethernet - +-----------+ | - | - | ,-----. - | | | - | |_____| - `---------_________ - / ::::::: \ - `---------' - Network PC</literallayout> - </textobject> - - <textobject> - <phrase>Printer with an embedded print server, connecting - directly to the local network.</phrase> - </textobject> - </mediaobject> - </figure> - </sect3> - </sect2> - - <sect2> - <title>Printspools</title> - - <para>Printspooling is an integral part of network printing. Since - the PC can spit out data much faster than the printer can accept it, - the data must be buffered in a spool at some location. In addition, - because many clients share printers, when clients send print jobs at - the same time, jobs must be placed on a queue so that one can be - printed after the other.</para> - - <sect3> - <title>Logical location of the print spool</title> - - <para>Printspooling can be implemented at one of three - locations</para> - - <orderedlist> - <listitem> - <para>The client. Clients can be required to spool their own - print jobs on their own disks. For example, when a Windows - client application generates a print job the job must be - placed on the local client's hard drive. Once the remote - print server is free to accept the job it signals the client - to start sending the job a bit at a time. Client spooling is - popular in peer-to-peer networks with no defined central - fileserver. However, it is impossible for a central - administrator to perform advanced print job management tasks - such as moving a particular print job ahead of another, or - deleting jobs.</para> - </listitem> - - <listitem> - <para>The printserver. If each printer on the network is - allocated their own combination print spooler-printserver, - jobs can stack at the printer. Many of the larger printers - with internal printservers have internal hard disks for this - purpose. Although this enables basic job management, it still - restricts the ability to move jobs from one printer to - another.</para> - </listitem> - - <listitem> - <para><emphasis>A central print spooler on a - fileserver</emphasis>. Print jobs are received from all - clients on the network in the spool and then dispatched to the - appropriate printer. This scheme is the best for locations - with several busy printers and many clients. Administration - is extremely simple because all print jobs are spooled on a - central server, which is particularly important in bigger - organizations. Many large organizations have standardized on - PostScript printing for all printing; in the event that a - particular printer fails and is offline, incoming PostScript - print jobs can be rerouted automatically to another printer. - Since all printers and clients are using PostScript, clients - don't need to be reconfigured when this happens. Print jobs - appear the same whether printed on a 4 page-per-minute NEC - Silentwriter 95, or a 24 page-per-minute HP LaserJet 5SiMX if - both printers are defined in the client as PostScript - printers.</para> - </listitem> - </orderedlist> - - <figure> - <title>Print spool locations</title> - - <mediaobject> - <imageobject> - <imagedata fileref="08-05" format="EPS"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> Client - ,---------. PC - | ======= | ,-----. - | ======= | | | - +-----------+ |_____| - | Printer [ ]---------------------------------------------------_________ - +-----------+ / ::::::: \ - `---------' - Spool - - Printserver - ,---------. PC - | ======= | ,-----. - | ======= | | | - +-----------+ ,----------------. |_____| - | Printer [ ]--------------| | === |-------------------_________ - +-----------+ `----------======' / ::::::: \ - Spool `---------' - - - Fileserver - ,---------. PC - | ======= | ,-----. - | ======= | Printserver Fileserver | | - +-----------+ ,----------------. ,----------------. |_____| - | Printer [ ]----| | === |-----| | === |------_________ - +-----------+ `----------======' `----------======' / ::::::: \ - Spool `---------'</literallayout> - </textobject> - - <textobject> - <phrase>Possible locations for the print spool</phrase> - </textobject> - </mediaobject> - </figure> - - <para>FreeBSD is an excellent platform to implement centralized - printserving and print spooling. The rest of this chapter - concentrates on the centralized print spooler model. Note that - PostScript printing is not a requirement for this model--the HPPCL - protocol can be the standard print protocol as well. For - transparent printing between printers with HPPCL, however, the - printer models must be similar.</para> - </sect3> - - <sect3> - <title>Physical location of the print spool</title> - - <para>In some companies, the central fileserver is often placed in a - closet, locked away. Printers, on the other hand, are best - located in high traffic areas for ease of use. Network printing - works best when the printers are evenly distributed throughout the - organization. Attempting to place all the major printers in one - location, as technically advantageous as it may seem, merely - provokes users to requisition smaller printers that are more - convenient for that quick print job. The administrator may end up - with a datacenter full of nice, expensive printers that are never - used, while the smaller personal laser printers scattered - throughout the plant bear most of the printing load.</para> - - <para>The big problem with this is that scattering printers through - the organization makes it difficult to utilize the 3 possible - parallel ports on the fileserver due to parallel port distance - limitations. Although high-speed serial ports may extend the - distance, not many printers have good serial ports on them. This - is where the hardware network print server devices can come into - play. I prefer using these devices because they are much cheaper - and more reliable than a standalone PC running printserver - software. For example, Castelle - <ulink url="http://www.castelle.com">http://www.castelle.com</ulink> - sells the LANpress 1P/10BT printserver for about $170.00. Using - these devices a FreeBSD UNIX server can have dozens of print spools - accepting print jobs and then route them back out over the network - to these remote printserver boxes. If these hardware servers are - used, they must support the Line Printer Daemon (LPD) print - protocol.</para> - - <para>With a scheme like this it is important to have enough disk - space on the spool to handle the print jobs. A single large - PowerPoint presentation PostScript print job containing many - graphics may be over 100MB. When many such jobs stack up in the - print spool waiting to print, the print spooler should have - several gigabytes of free disk space available.</para> - </sect3> - - <sect3> - <title>Network Printing to Remote Spools</title> - - <para>Although several proprietary network printing protocols such - as Banyan Vines and NetWare, are tied to proprietary protocols, - FreeBSD Unix can use two TCP/IP network printing protocols to - print to remote print spools. The two print protocols available - on TCP/IP with FreeBSD are the open LPD protocol and the - NetBIOS-over-TCP/IP Server Messaging Block (SMB) print protocol - first defined by Intel and Microsoft and later used by IBM and - Microsoft.</para> - - <para>The LPD protocol is defined in RFC1179 This network protocol - is the standard print protocol used on all UNIX systems. LPD - client implementations exist for all Windows operating systems and - DOS. Microsoft has written LPD for the Windows NT versions, the - other Windows operating system implementations are provided by - third parties.</para> - - <para>The Microsoft Networking network protocol that runs on top of - SMB can use NetBIOS over TCP/IP as defined in RFC1001 and RFC1002. - This protocol has a specification for printing that is the same - print protocol used to send print jobs to NT Server by Microsoft - clients. To implement this protocol on FreeBSD requires the - installation of the Samba client suite of programs discussed in - Chapter 7.</para> - </sect3> - </sect2> - </sect1> - - <sect1> - <title>Setting up LPR on Windows clients</title> - - <para>The program clients use to print via LPD is the Line Printer - Remote, or LPR program. The following instructions cover enabling - this program on Windows clients.</para> - - <sect2> - <title>Windows 3.1/Windows for Workgroups 3.11</title> - - <para>Several commercial TCP/IP stacks are available for Win31, that - provide LPR client programs, in addition to the basic TCP/IP - protocol to Win31. WfW has TCP/IP networking available for free - from Microsoft, but it doesn't include an LPR client. Unfortunately, - I have not come across a freeware implementation of a 16-bit Windows - LPR client, so with the following instructions I use the Shareware - program WLPRSPL available from <ulink - url="http://www.winsite.com/info/pc/win3/winsock/wlprs41.zip">http://www.winsite.com/info/pc/win3/winsock/wlprs41.zip</ulink>. - This program must be active during client printing, and is usually - placed in the Startup group.</para> - - <para>Organizations that want to use UNIX as a printserver to a group - of Win31 clients without using a commercial or shareware LPR program - have another option. The Microsoft Networking client for DOS used - underneath Win31 contains SMB-based printing which is covered later - in the chapter. DOS networking client setup and use are covered in - Chapter 2 and Chapter 7.</para> - - <para>If LPR-based client printing is desired and the organization - doesn't want to upgrade to Win95, (which has several LPR clients - available) the following instructions can be used. WLPRSPL needs a - Winsock under Windows 3.1, so for the example I explain the setup of - the Novell 16-bit TCP/IP client. The stack can be FTPed from - Novell, and is easy to integrate into sites that already use the - 16-bit NetWare networking client, usually NW 3.11 and 3.12. In most - cases, however, sites that use NetWare + Win31 are probably best off - printing through the NetWare server, then loading an LPR spooler as - an Netware Loadable Module (NLM) to send the job over to - FreeBSD.</para> - - <para>As an alternate, the Microsoft Networking DOS 16-bit TCP/IP - client under Win31 contains a Winsock, as does Microsoft TCP/IP for - WfW. The target machine used here is a Compaq Deskpro 386/33 with - 12MB of ram with an operating version of Windows 3.1, and a 3com - 3C579 EISA network card. The instructions assume an LPR printserver - on the network, named <hostid>mainprinter.my.domain.com</hostid> - with a print queue named RAW.</para> - - <para>Use the installation instructions in Exhibit 8.1 for a quick and - dirty TCP/IP Winsock for Win31 systems. Administrators who already - have the Novell IPX client installed should skip those steps.</para> - </sect2> - - <sect2> - <title>Installation of the Novell TCP/IP Winsock client</title> - - <procedure> - <step> - <para>Make sure that the machine has enough environment space - (2048 bytes or more) by adding the following line to the - <filename>config.sys</filename> file and rebooting:</para> - - <programlisting>SHELL=C:\COMMAND.COM /E:2048 /P</programlisting> - </step> - - <step> - <para>Obtain the <filename>TCP16.EXE</filename> file from - <ulink url="ftp3.novell.com/pub/updates/eol/nweol/tcp16.exe">ftp3.novell.com/pub/updates/eol/nweol/tcp16.exe</ulink>.</para> - </step> - - <step> - <para>Obtain the Network Adapter support diskette for the network - card in your machine. This should be supplied with the card, or - available via FTP from the network adapter manufacturer's FTP - site.</para> - </step> - - <step> - <para>Now you need the file <filename>LSL.COM</filename>. This is - available on some Network Adapter Driver diskettes, it used to - be available from the <filename>VLM121_2.EXE</filename> file - from Novell but unfortunately this file is no longer publicly - accessible from Novell.</para> - </step> - - <step> - <para>If you have <filename>vlm121_2.exe</filename> in a temporary - directory, run it. This will extract a number of files.</para> - </step> - - <step> - <para>One of the files extracted is <filename>LSL.CO_</filename> - extract this file with the command <command>nwunpack - lsl.co_</command>.</para> - </step> - - <step> - <para>Create the directory <filename>c:\nwclient</filename>. Then, - copy <filename>lsl.com</filename> from the temporary directory - into the directory.</para> - </step> - - <step> - <para>Obtain and install the printer driver for the model of - printer that you will be spooling to and point it to - <devicename>LPT1:</devicename>. Win31 and WfW 3.11 have an - incomplete printer driver list, so if you need a driver - Microsoft has many Win16 printer drivers on their FTP site. A - list is available at - <ulink - url="ftp://ftp.microsoft.com/Softlib/index.txt">ftp://ftp.microsoft.com/Softlib/index.txt</ulink>. - In addition, if you are installing a PostScript printer driver - for a printer supplied in Win31, it may be necessary to patch - the driver. The Microsoft PostScript driver supplied in Win31 - is version 3.5. (The patch named - <filename>PSCRIP.EXE</filename> which brought the PostScript - driver to version 3.58 is no longer publicly available.) WfW - already uses the more recent PostScript driver, as does Win31 - version A. Installing the Adobe Postscript driver for Win31 is - also an option. (see - <ulink url="http://www.adobe.com/support/downloads/pdrvwin.htm">http://www.adobe.com/support/downloads/pdrvwin.htm</ulink> - for the version 3.1.2 Win31 PostScript driver).</para> - </step> - - <step> - <para>Look on the network adapter driver disk for the subdirectory - <filename>nwclient/</filename> and then look for the ODI driver - with the adapter card. For example, on the 3com 3C509/3C579 - adapter driver disk, the driver and location are - <filename>\NWCLIENT\3C5X9.COM</filename>. Copy this driver to - the <filename>c:\nwclient</filename> directory.</para> - </step> - - <step> - <para>Create a file called <filename>NET.CFG</filename> in the - <filename>c:\nwclient</filename> directory. Often, the network - card adapter driver diskette has a template for this file in the - same location as the ODI driver. This can be modified, as can - the following example:</para> - - <programlisting>LINK SUPPORT - -BUFFERS 4 1600 - -MEMPOOL 8192 - -LINK DRIVER -3C5X9 - -; PORT 300 (these are optional, if needed by card uncomment) - -; INT 10 (optional, uncomment and modify if needed)</programlisting> - </step> - - <step> - <para>Attempt to load the network card driver. First load - <filename>lsl</filename>, then the ODI driver. With the 3com - card the commands are:</para> - - <screen><userinput>lsl</userinput> -<userinput>3c5x9</userinput></screen> - - <para>If the driver properly loads it will list the hardware port - and interrupt settings for the network adapter. If it has - loaded properly, unload the drivers in reverse order with the - <option>/u</option> command:</para> - - <screen><userinput>3c5x9 /u</userinput> -<userinput>lsl /u</userinput></screen> - </step> - - <step> - <para>Go to the temporary directory that contains the - <filename>tcp16.exe</filename> file and extract it by running - the program.</para> - </step> - - <step> - <para>Run the install batch file by typing - <command>installr</command>. It should list <literal>New - Installation detected</literal>. It will then copy a number - of files into <filename>nwclient</filename>, add some - commented-out sections to <filename>net.cfg</filename>, and call - <command>edit</command> on <filename>net.cfg</filename>.</para> - </step> - - <step> - <para>Read the editing instructions and make the appropriate - entries. The sample <filename>net.cfg</filename> file from - above would look like this.</para> - - <programlisting>LINK SUPPORT - -BUFFERS 4 1600 - -MEMPOOL 8192 - -LINK DRIVER 3C5X9 - -FRAME ETHERNET_II - -Protocol TCPIP - -PATH TCP_CFG c:\nwclient - -ip_address 192.168.1.54 LAN_NET - -ip_netmask 255.255.255.0 LAN_NET - -ip_router 192.168.1.1 LAN_NET - -Bind 3C5X9 #1 Ethernet_II LAN_NET</programlisting> - - <para>Save and exit, the Installer should list <literal>TCP16 - installation completed</literal>.</para> - </step> - - <step> - <para>Reload the client with the commands:</para> - - <screen><userinput>lsl</userinput> -<userinput>3c5x9</userinput> -<userinput>tcpip</userinput></screen> - - <para>The TCPIP driver should list the IP numbers and other - information.</para> - </step> - - <step> - <para>Optionally, create either a <filename>HOSTS</filename> file, - or a <filename>RESOLV.CFG</filename> file (pointing to a - nameserver) in <filename>c:\nwclient</filename>. Check to see - this is operating properly by pinging a hostname.</para> - - <para>Add the <filename>c:\nwclient</filename> directory to the - <envar>PATH</envar>, as well as the 3 startup commands in step - 15 in <filename>autoexec.bat</filename></para> - </step> - </procedure> - </sect2> - - <sect2> - <title>Installation of the LPR client on 16-bit Windows with a Winsock - installed</title> - - <para>The following assumes a running Win31 installation with a - Winsock or a running WfW installation with the 32-bit Microsoft - TCP/IP protocol installed.</para> - - <procedure> - <step> - <para>Install the printer driver desired. See step 8 of the - previous set of instructions.</para> - </step> - - <step> - <para>Obtain and extract into a temporary directory the - <filename>wlprs41.zip</filename> file from the location - mentioned above.</para> - </step> - - <step> - <para>Run <command>setup.exe</command> from the temporary - directory containing the <filename>wlprs</filename> files - are.</para> - </step> - - <step> - <para>In setup, accept default directory, and check Yes to add to - its own group. Click <guibutton>Continue</guibutton> when asked - for group name, and check whatever choice you want when asked to - copy the <filename>doc</filename> files.</para> - </step> - - <step> - <para>Click <guibutton>No</guibutton> when asked to add the - program to <literal>Startup</literal>.</para> - </step> - - <step> - <para>On the Unix FreeBSD print spooler, make sure that there is - an entry in <filename>/etc/hosts.lpd</filename> or - <filename>/etc/hosts.equiv</filename> for the client - workstation, thereby allowing it to submit jobs.</para> - </step> - - <step> - <para>Double-click the Windows LPR Spooler icon in the Windows LPR - Spooler group that is opened. When it asks for a valid spool - directory, just select the <filename>c:\wlprspl</filename> - directory that the program installed its files into.</para> - </step> - - <step> - <para>When asked for a valid Queue Definition File, just click - <guibutton>OK</guibutton> to use the default filename. The - program automatically creates a queue definition file.</para> - </step> - - <step> - <para>The program opens up with it's menu. Click - <guibutton>Setup</guibutton> in the top menu, then select - <guimenuitem>Define New Queue</guimenuitem>.</para> - </step> - - <step> - <para>For a local spool filename, just use the name of the remote - queue (RAW) to which the client prints.</para> - </step> - - <step> - <para>For the remote printer name, use the same name as the remote - queue (RAW) to which the client prints.</para> - </step> - - <step> - <para>For the remote hostname, use the machine name - of the FreeBSD print spooler. - <hostid role="fqdn"><replaceable>mainprinter.ayedomain.com</replaceable></hostid>.</para> - </step> - - <step> - <para>For the Description, enter a description such as - <literal>3rd floor Marketing printer</literal>.</para> - </step> - - <step> - <para>For the protocol, leave the default of BSD LPR/LPD - selected.</para> - </step> - - <step> - <para>Click on the <guimenuitem>Queue Properties</guimenuitem>, - and make sure that the <guilabel>Print unfiltered</guilabel> is - selected. If you're printing PostScript, then also click the - <guibutton>Advanced options</guibutton> button. Make sure that - <guilabel>Remove trailing Ctrl-D</guilabel> is - <emphasis>unchecked</emphasis>, and that <guilabel>Remove - Leading Ctrl-D</guilabel> is <emphasis>checked</emphasis>. - Also with PostScript, if the printer cannot print ASCII, uncheck - the <guilabel>Send header page</guilabel> box. (PostScript - header/banner pages are discussed later in this chapter)</para> - </step> - - <step> - <para>Click <guibutton>OK</guibutton>. At the main menu of the - program, click <guimenu>File</guimenu>, then <guimenu>Control - Panel/Printers</guimenu> to bring up the Printers control - panel of Windows.</para> - </step> - - <step> - <para>Make sure that the <guilabel>Use Print Manager</guilabel> - button is checked, then highlight the printer driver and click - the <guibutton>Connect</guibutton> button.</para> - </step> - - <step> - <para>Scroll down to the <guilabel>C:\WLPRSPL\RAW</guilabel> entry - for the spool that was built and highlight this. Click - <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>Minimize the Windows LPR Spooler. Copy the Windows LPR - Spooler icon to the Startup group. Click - <guimenu>File/Properties</guimenu> with the Windows LPR Spooler - icon highlighted in the Startup group. Check the <guilabel>Run - Minimized</guilabel> button.</para> - </step> - - <step> - <para>Exit Windows, and when the <guibutton>Save queue - changes?</guibutton> button comes up, click - <guibutton>Yes</guibutton>.</para> - </step> - - <step> - <para>Restart windows and make sure that the spooler starts - up.</para> - </step> - - <step> - <para>Open the Control Panel and look for a new yellow icon named - <guiicon>Set Username</guiicon> If you are running the Novell or - other Winsock under Win31, click on this icon and put the - username of the person using this computer into the space - provided. If you are running WfW, this isn't necessary because - Windows will supply the username.</para> - </step> - - <step> - <para>If the spooler is not started properly in some - installations, there may be a bug. If placing the icon in the - StartUp group doesen't actually start the spooler, the program - name can be placed in the <literal>run=</literal> line of - <filename>win.ini</filename>.</para> - </step> - - <step> - <para>Try printing a print job from an application such as - Notepad. If everything goes properly, clicking on the - <guimenuitem>Queues/Show remote printer status</guimenuitem>" in - the Windows LPR menu should show the print job spooled and - printing on the remote printserver.</para> - </step> - </procedure> - </sect2> - - <sect2> - <title>Installation of LPR client on Windows 95/98</title> - - <para>The <command>wlprspl</command> program also can be used under - Windows 95, but as a 16-bit program, it is far from an optimal - implementation on a 32-bit operating system. In addition, Win95 and - it's derivatives fundamentally changed from Windows 3.1 in the - printing subystem. For these reasons I use a different LPR client - program for Win95/98 LPR printing instructions. It is a full 32-bit - print program, and it installs as a <emphasis>Windows 32-bit - printer</emphasis> <emphasis>port monitor</emphasis>. The program - is called ACITS LPR Remote Printing for Windows 95 and it is located - at <ulink - url="http://shadowland.cc.utexas.edu/acitslpr.htm">http://shadowland.cc.utexas.edu/acitslpr.htm</ulink>.</para> - - <para>ACITS stands for Academic Computing and Instructional - Technologies Services. The ACITS LPR client includes software - developed by the University of Texas at Austin and its contributors, - it was written by Glenn K. Smith, a systems analyst with the - Networking Services group at the university. The filename of the - archive in the original program was ACITSLPR95.EXE and as of version - 1.4 it was free for individuals or organizations to use for their - internal printing needs. Since that time, it has gotten so popular - that the university has taken over the program, incremented the - version number (to get out from under the free license) and is now - charging a $35 per copy fee for commercial use for the newer - versions. The older free version can still be found on overseas FTP - servers, such as <ulink - url="http://www.go.dlr.de/fresh/pc/src/winsock/acitslpr95.exe">http://www.go.dlr.de/fresh/pc/src/winsock/acitslpr95.exe</ulink>.</para> - - <para>It is likely that the cost of a shareware/commercial LPR program - for Win95 plus the cost of Win95 itself will meet or exceed that of - Win2K. As such, users wishing to print via LPR to FreeBSD UNIX - systems will probably find it cheaper to simply upgrade to Windows - NT Workstation or Win2K.</para> - - <para>ACITS LPR and Win95 have a few printing idosyncracies. Most - Win95 programs, such as Microsoft Word, expect print output to be - spooled on the local hard drive and then metered out to a printer - that is plugged into the parallel port. Network printing, on the - other hand, assumes that print output will go directly from the - application to the remote print server. Under Win95, local ports - have a setting under Properties, Details, Spool Settings labeled - "Print directly to the printer". If this is checked, the - application running on the desktop (such as Microsoft Word) will not - create a little Printer icon with pages coming out of it or use - other means of showing the progress of the job as it is built. This - can be very disconcerting to the user of a network printer, so this - option should be checked only with printers plugged directly into - the parallel port. Worse, if this is checked with ACITS, it can - cause the job to abort if the remote print spooler momentarily goes - offline.</para> - - <para>Another local setting also should be changed. Generally, with - local ports, Win95 builds the first page in the spooler and then - starts printing it while the rest of the pages spool. If ACITS - starts printing the first page while the rest of the pages are - building, timeouts at the network layer can sometimes cause very - large jobs to abort. The entire job should be set to completely - spool before the LPR client passes it to the Unix spooler. The - problem is partly the result of program design: because ACITS is - implemented as a local printer port instead of being embedded into - Win95 networking (and available in Network Neighborhood) the program - acts like a local printer port in some ways.</para> - - <para>The LPR program can be set to deselect banner/burst page - printing if a PostScript printer that cannot support ASCII is used. - The burst pages referred to here are NOT generated by the Windows - machine. Use the instructions in Exhibit 8.3 to install</para> - - <procedure> - <title>LPR client on Win95/98 installation instructions</title> - - <step> - <para>Obtain the <filename>ACITSLPR95.EXE</filename> file and - place it in a temporary directory such as - <filename>c:\temp1</filename>.</para> - </step> - - <step> - <para>Close all running programs on the desktop. The computer - <emphasis>must</emphasis> be rebooted at completion of - installation or the program will not work.</para> - </step> - - <step> - <para>Click <guibutton>Start</guibutton>, - <guimenuitem>Run</guimenuitem> and type in - <userinput>c:\temp1\acitslpr95</userinput> then click - <guibutton>Yes</guibutton> at the InstallShield prompt.</para> - </step> - - <step> - <para>Click <guibutton>Next</guibutton>, then - <guibutton>Yes</guibutton>. The program will run through some - installation and then presents a Help screen that explains how - to configure an LPR port.</para> - </step> - - <step> - <para>After the help screen closes, the program asks to reboot the - system. Ensure that <guilabel>Yes</guilabel> is checked and - click <guibutton>Finish</guibutton> to reboot.</para> - </step> - - <step> - <para>After the machine comes back up, install a Printer icon in - the <guibutton>Start</guibutton>, <guimenu>Settings</guimenu>, - <guimenuitem>Printers</guimenuitem> folder if one hasn't been - created for the correct model of destination printer.</para> - </step> - - <step> - <para>With the Printers folder open, right-click over the printer - icon that needs to use the LPR program and click on the - <guilabel>Properties</guilabel> tab.</para> - </step> - - <step> - <para>Under the <guilabel>Details</guilabel> tab, click the - <guilabel>Add Port</guilabel> tab, then click - <guibutton>Other</guibutton>.</para> - </step> - - <step> - <para>Highlight the <guilabel>ACITS LPR Remote Printing</guilabel> - line and click <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>The Add ACITS LPR screen opens. Type in the hostname of the - UNIX system that the client spools through— - <hostid role="fqdn"><replaceable>mainprinter.ayedomain.com</replaceable></hostid>.</para> - </step> - - <step> - <para>Type in the Printer/Queue name and click - <guibutton>OK</guibutton>. (Some versions have a "Verify Printer - Information" button.) The LPR program then contacts the UNIX - host and makes sure that the selected printer is - available.</para> - - <note> - <para>If this fails the client machine name is probably not in - the <filename>/etc/hosts.equiv</filename> or - <filename>etc/hosts.lpd</filename> on the FreeBSD printserver. - Most sites may simply decide to put a wildcard in - <filename>hosts.equiv</filename> to allow printing, especially - if DHCP is used, but many security-conscious sites may stick - with individual entries in - <filename>hosts.lpd</filename>.</para> - </note> - </step> - - <step> - <para>If the printer is PostScript and cannot print ASCII, make - sure that the "No banner page control flag" is checked to turn - off banner pages. Accessible under Port settings, this flag is - overridden if the <filename>/etc/printcap</filename>file - specifies no banner pages.</para> - </step> - - <step> - <para>Review how the "send plain text control flag" is set. With - this flag unchecked, the LPR code sent is L, (ie:, print - unfiltered) meaning that the <literal>if</literal> filter gets - called with the <option>-c</option> option. This is equivalent - to the local invocation of <filename>/usr/bin/lpr -l</filename>. - With the flag checked, the code is F, (formatted) meaning that - the <literal>if</literal>filter gets called without the - <option>-c</option> option. This is equivalent to the default - invocation <filename>/usr/bin/lpr</filename>. (This is also an - issue under Windows NT, which retypes the print job to text if - this flag is checked. Some filters understand the - <option>-c</option> flag, which is used to preserve control - characters, so it should generally remain unchecked.</para> - </step> - - <step> - <para>Leave the "Send data file before control file" box - unchecked. This option is used only in rare mainframe spooling - circumstances.</para> - </step> - - <step> - <para>Click <guibutton>OK</guibutton>, then click the - <guibutton>Spool Settings</guibutton> button at the properties - page.</para> - </step> - - <step> - <para>Make sure that the "Spool print jobs so program finishes - printing faster" box is checked.</para> - </step> - - <step> - <para>Make sure that "Start printing after last page is spooled" - box is checked.</para> - </step> - - <step> - <para>Make sure that "Disable bi-directional support for this - printer" is checked, or greyed out.</para> - </step> - - <step> - <para>Make sure that the "Spool data format" is set to RAW. Some - printer drivers present a choice of EMF or RAW, such as the - Generic Text driver, in this case select RAW.</para> - </step> - - <step> - <para>Click <guibutton>OK</guibutton>, then - <guibutton>OK</guibutton> again to close the Printer Properties. - The printer icon now spools through FreeBSD.</para> - </step> - </procedure> - </sect2> - - <sect2> - <title>Installation of LPR client on Windows NT</title> - - <para>Unlike WfW and Win95 TCP/IP, Windows NT—both server and - workstation—includes an LPR client as well as an LPD program - that allows incoming print jobs to be printed from LPR clients, such - as UNIX systems.</para> - - <para>To install the LPR client and daemon program under Windows NT - 3.51, use the following instructions. The TCP/IP protocol should be - installed beforehand and you must be logged in to the NT system as - Administrator. This can be done at any time after the NT system is - installed, or during OS installation:</para> - - <procedure> - <step> - <para>Double-click on Main, Control Panel, then - Network Settings.</para> - </step> - - <step> - <para>In the Installed Network Software window, "Microsoft TCP/IP - Printing" should be listed as well as "TCP/IP Protocol".</para> - </step> - - <step> - <para>Click the <guibutton>Add Software</guibutton> button to get - the Add Network Software dialog box</para> - </step> - - <step> - <para>Click the down arrow and select TCP/IP Protocol and related - components. Click <guibutton>Continue</guibutton>.</para> - </step> - - <step> - <para>Check the "TCP/IP Network Printing Support" box and click - <guibutton>Continue</guibutton>. LPR printing is now installed. - Follow the instructions to reboot to save changes.</para> - </step> - </procedure> - - <para>To install the LPR client and daemon program under Windows NT 4, - use the following instructions. The TCP/IP protocol should be - installed beforehand and you must be logged in to the NT system as - Administrator. This can be done at any time after the NT system is - installed, or during OS installation:</para> - - <procedure> - <step> - <para>Click on <guibutton>Start</guibutton>, - <guimenuitem>Settings</guimenuitem>, <guimenuitem>Control - Panel</guimenuitem>, and double-click on - <guiicon>Network</guiicon> to open it up.</para> - </step> - - <step> - <para>Click on the <guilabel>Services</guilabel> tab. - <literal>Microsoft TCP/IP Printing</literal> should be listed. - If not, continue steps 3 - 4.</para> - </step> - - <step> - <para>Click <guibutton>Add</guibutton>, then select - <guilabel>Microsoft TCP/IP Printing</guilabel> and click - <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>Click <guibutton>Close</guibutton>. Follow instructions to - reboot to save changes.</para> - - <note> - <para>Any NT Service Packs that were previously installed must - be reapplied after these operations.</para> - </note> - </step> - </procedure> - - <para>Once LPR printing has been installed, the Printer icon or icons - must be created on the NT system so that applications can print. - Since this printer driver does all job formatting before passing the - printing to the FreeBSD printserver, the print queues specified - should be raw queues on the FreeBSD system, which don't do any job - formatting.</para> - - <para>To install the printer icon in Print Manager and set it to send - print jobs to the FreeBSD UNIX system, use the following - instructions under NT 3.51. You must be logged in to the NT system - as Administrator. This can be done at any time after the NT system - is installed, or during OS installation.</para> - - <procedure> - <step> - <para>Click on Main, and open it. Then click on Print Manager to - open it.</para> - </step> - - <step> - <para>Click on <guiicon>Printer</guiicon>, <guibutton>Create - Printer</guibutton>. Select the appropriate printer - driver.</para> - </step> - - <step> - <para>Click the down arrow under Print To and select - Other.</para> - </step> - - <step> - <para>In the Available Print Monitors window select - LPR port and click <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>Enter the hostname of the FreeBSD printserver, and the name - of the printer queue and click <guibutton>OK</guibutton></para> - </step> - - <step> - <para>Click <guibutton>OK</guibutton> to close the Create Printer - window. The Printer icon is created.</para> - </step> - </procedure> - - <para>To install the printer icon in Print Manager and set it to send - print jobs to the FreeBSD UNIX system, use the following - instructions under NT 4. You must be logged in to the NT system as - Administrator. This can be done at any time after the NT system is - installed, or during OS installation:</para> - - <procedure> - <step> - <para>Click <guibutton>Start</guibutton>, - <guimenuitem>Settings</guimenuitem>, - <guimenuitem>Printers</guimenuitem> to open the printer - folder.</para> - </step> - - <step> - <para>Double-click <guiicon>Add Printer</guiicon> to start the - wizard.</para> - </step> - - <step> - <para>3) Select the My Computer radio button, not the Network - Print Server button and click <guibutton>Next</guibutton>. (The - printer <emphasis>is</emphasis> a networked printer, it is - managed on the local NT system. Microsoft used confusing - terminology here.</para> - </step> - - <step> - <para>Click <guibutton>Add Port</guibutton> and select LPR Port, - then click <guibutton>New Port</guibutton>.</para> - </step> - - <step> - <para>Enter the hostname and print queue for the FreeBSD - printserver and click <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>Click <guibutton>Next</guibutton> and select the correct - printer driver. Continue until the printer is set up.</para> - </step> - </procedure> - - <para>The LPR client in Windows NT allows DOS print jobs originating - in DOS boxes to be routed to the central UNIX print spooler. This - is an advantage over the Win95 and WfW LPR programs.</para> - - <sect3> - <title>Windows NT Registry Changes</title> - - <para>Using the LPR daemon program under Windows NT presents one - problem. If the NT server is used as an LPR/LPD "relay", for - example, to pass jobs from clients to LPR print queues on a UNIX - system, to pass jobs from LPR programs on UNIX terminating at NT - print queues, or to pass jobs from Appletalk clients to LPR - printers, NT retypes the job if the type code is set to P (text). - This can wreak havoc on PostScript files printed through HP - LaserJet printers with internal MIO cards in them, if the job - originates from the <filename>/usr/bin/lpr</filename> program - under UNIX, which assigns a P type code. The printserver card - treats PostScript jobs as text, and instead of the print job, the - raw PostScript codes print. This problem often manifests in the - following way: <filename>/usr/bin/lpr</filename> is used to print - a PostScript file from UNIX directly to the remote printer - printserver, which works fine, but spooling it through NT causes - problems.</para> - - <para>A registry change that can override the NT Server formatting - behavior is detailed in Microsoft Knowledge Base article ID - Q150930. With Windows NT 3.51, and 4.0 up to service pack 1 the - change is global. Starting with NT 4.0 Service pack 2 the change - can be applied to specific print queues, (see Knowledge Base - article ID Q168457).</para> - - <para>Under Windows NT 4.0, the change is:</para> - - <procedure> - <step> - <para>Run Registry Editor - (<filename>REGEDT32.EXE</filename>)</para> - </step> - - <step> - <para>From the <literal>HKEY_LOCAL_MACHINE</literal> subtree, go - to the following key:</para> - - <para><literal>\SYSTEM\CurrentControlSet\Services\LPDSVC\Parameters</literal></para> - </step> - - <step> - <para>On the <guimenu>Edit</guimenu> menu, click - <guimenuitem>Add Value</guimenuitem>.</para> - </step> - - <step> - <para>Add the following:</para> - - <informaltable frame="none"> - <tgroup cols="2"> - <tbody> - <row> - <entry>Value Name:</entry> - <entry>SimulatePassThrough</entry> - </row> - - <row> - <entry>Data Type:</entry> - <entry>REG_DWORD</entry> - </row> - - <row> - <entry>Data</entry> - <entry>1</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <note> - <para>The default value is 0, which informs LPD to assign - datatypes according to the control commands.</para> - </note> - </step> - </procedure> - - <para>Under Windows NT 3.51, the change is:</para> - - <procedure> - <step> - <para>Run Registry Editor - (<filename>REGEDT32.EXE</filename>)</para> - </step> - - <step> - <para>From the <literal>HKEY_LOCAL_MACHINE</literal> subtree, go - to the following key:</para> - - <para><literal>\SYSTEM\CurrentControlSet\Services\LPDSVC\Parameters</literal></para> - </step> - - <step> - <para>On the <guimenu>Edit</guimenu> menu, click - <guimenuitem>Add Value</guimenuitem>.</para> - </step> - - <step> - <para>Add the following:</para> - - <informaltable frame="none"> - <tgroup cols="2"> - <tbody> - <row> - <entry>Value Name:</entry> - <entry>SimulatePassThrough</entry> - </row> - - <row> - <entry>Data Type:</entry> - <entry>REG_DWORD</entry> - </row> - - <row> - <entry>Data</entry> - <entry>1</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <note> - <para>The default value is 0, which informs LPD to assign - datatypes according to the control commands.</para> - </note> - </step> - - <step> - <para>Create an LPD key at the same level as the LPDSVC - key.</para> - </step> - - <step> - <para>Click the LPDSVC Key, click <guimenuitem>Save - Key</guimenuitem> from the <guimenu>Registry</guimenu> menu, - and then save the file as - <filename>LPDSVC.KEY</filename></para> - </step> - - <step> - <para>Click the LPD key created in step 5.</para> - </step> - - <step> - <para>Click <guimenuitem>Restore</guimenuitem> on the - <guimenu>Registry</guimenu> menu, click the file created in - step 6, and then click <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>A warning message appears. Click - <guibutton>OK</guibutton> and then quit the Registry - Editor.</para> - </step> - - <step> - <para>At a command prompt window, type:</para> - - <screen><userinput>net stop lpdsvc</userinput> -<userinput>net start lpdsvc</userinput></screen> - </step> - </procedure> - </sect3> - </sect2> - </sect1> - - <sect1> - <title>Printing Postscript and DOS command files</title> - - <para>One problem with printing under Win31 and Win95 with the LPR - methods discussed is the lack of a <quote>raw</quote> - <devicename>LPT1:</devicename> device. This is annoying to the - administrator who wants to print an occasional text file, such as a - file full of printer control codes, without their being intercepted by - the Windows printer driver. Of course this is also an issue with DOS - programs, but a commercial site that runs significant DOS software and - wants to print directly to UNIX with LPR really only has one - option—to use a commercial TCP/IP stack containing a DOS LPR - program.</para> - - <para>Normally, under Windows printing, virtually all graphical programs - print through the Windows printer driver. This is true even of basic - programs such as Notepad. For example, an administrator may have a - DOS batch file named <filename>filename.txt</filename>containing the - following line:</para> - - <programlisting>echo \033&k2G > lpt1:</programlisting> - - <para>This batch file switches a HP LasterJet from CR-LF, MS-DOS - textfile printing into Newline termination UNIX textfile printing. - Otherwise, raw text printed from UNIX on the HP prints with a - stairstep effect.</para> - - <para>If the administrator opens this file with Notepad and prints it - using a regular printer driver, such as an Epson LQ, the Windows - printer driver encapsulates this print output into a series of - printer-specific control codes that do things such as initialize the - printer, install fonts, and so on. The printer won't interpret this - output as control code input. Usually, if the printer is locally - attached, the user can force a "raw text print" of the file by opening - a DOS window and running:</para> - - <screen><userinput>copy filename.txt lpt1: /b</userinput></screen> - - <para>Since the LPR client program doesn't provide a DOS driver, it - cannot reroute input from the <devicename>LPT1:</devicename> device - ports. The solution is to use the Generic / Text Only printer driver - in conjunction with Wordpad (under Win95); under Win31 use a different - text editor. The Notepad editor supplied with Windows is unsuitable - for this - it "helpfully" inserts a 1 inch margin of spaces around all - printed output, as well as the filename title. Wordpad supplied with - Win95, can be set to use margins of zero, and inserts no additions - into the printed output. Also, make sure that banner pages are turned - off, and the print type is set to raw.</para> - </sect1> - - <sect1> - <title>Checking PostScript Printer capabilities</title> - - <para>Following is a PostScript command file that can be used to get a - PostScript printer to output a number of useful pieces of information - that are needed to set up a printer icon under Windows properly. It - was printed from Wordpad, in Win95, through the Generic / Text Only - printer driver with the following instructions:</para> - - <procedure> - <step> - <para><guibutton>Start</guibutton>, <guimenuitem>Run</guimenuitem>, - type in <userinput>Wordpad</userinput> and press - <keycap>Enter</keycap>.</para> - </step> - - <step> - <para><guimenu>File</guimenu>, <guimenuitem>Open</guimenuitem> - <filename>testps.txt</filename></para> - </step> - - <step> - <para><guimenu>File</guimenu>, <guimenuitem>Page - Setup</guimenuitem>, <guimenuitem>Printer</guimenuitem>, select - <guimenuitem>Generic / Text Only</guimenuitem>, click - <guibutton>Properties</guibutton></para> - </step> - - <step> - <para>Click <guimenuitem>Device Options</guimenuitem>, select - <guilabel>TTY custom</guilabel>, click - <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>Click <guibutton>OK</guibutton>, then set all four margins to - <literal>0</literal>; click <guibutton>OK</guibutton>.</para> - </step> - - <step> - <para>Click <guimenu>File</guimenu>, - <guimenuitem>Print</guimenuitem>, - <guibutton>OK</guibutton>.</para> - </step> - </procedure> - - <para>This could also have been printed with - <filename>/usr/bin/lpr</filename> on a UNIX command prompt. The file - prints <emphasis>Test Page</emphasis> and some printer statistics - below that, as follows.</para> - - <programlisting>% filename: testps.txt -% purpose: to verify proper host connection and function of PostScript -% printers. -/buf 10 string def -/CM { -save statusdict/product get (Postscript) anchorsearch -exch pop {length 0 eq -{1}{2}ifelse -} -{2}ifelse exch restore -}bind def -/isCM { -CM 1 ge -}bind def -/Times-BoldItalic findfont 75 scalefont setfont -150 500 moveto -(Test Page) false charpath -isCM{gsave 0.0 1.0 1.0 0.0 setcmykcolor fill grestore}if -2 setlinewidth stroke -/Times-Roman findfont 10 scalefont setfont -150 400 moveto -(Your PostScript printer is properly connected and operational.)show -150 380 moveto -(The border around the page indicates your printer's printable region.)show -{ vmreclaim } stopped pop -vmstatus exch sub exch pop -150 360 moveto -(Max Available Printer Virtual Memory (KB):)show -150 340 moveto -dup 1024 div truncate buf cvs show -150 320 moveto -(Calculated memory size used for PostScript printer icon properties:) show -150 300 moveto -0.85 mul 1024 div truncate buf cvs show -150 280 moveto -(Printer Model: )show -statusdict begin product show end -150 260 moveto -(PostScript Level: )show -/languagelevel where -{ languagelevel 3 string cvs show pop } -{(1) show } ifelse -150 240 moveto -(PostScript Version: )show -statusdict begin -version show (.)show -revision 40 string cvs show end -clippath stroke -showpage</programlisting> - </sect1> - - <sect1> - <title>Setting up LPR/LPD on FreeBSD</title> - - <para>When a FreeBSD system is booted, it starts the LPD spooler control - daemon program if the <filename>/etc/rc.conf</filename> file has - <literal>lpd_enable="YES"</literal> set. If this is not set, attempts - to print through and from the FreeBSD system will fail with an - <errorname>lpr: connect: No such file or directory</errorname> error - message.</para> - - <para>The LPD program manages all incoming print jobs, whether they come - in from the network, or from local users on the UNIX system. It - transfers print jobs to all locally attached parallel or serial - printers, as well as defined remote printers. Several programs also - are used to manipulate jobs in the print spools that LPD manages, as - well as the user programs to submit them from the UNIX command prompt. - All of these programs use the <filename>/etc/printcap</filename>file, - which is the master control file for the printing system.</para> - - <para>Back when printing was mostly text, it was common to place - printers on a serial connection that stretched for long distances. - Often, 9600bps was used because it could work reliably up to a block - away, which allowed printers to be located almost anywhere on an - office high-rise floor. Modern office print jobs, on the other hand, - are generally graphics-laden and tend to be rather large. These jobs - would take hours to transfer over a slower 9600bps serial printer - connection. Today, most printers that are not connected to a remote - hardware print server box are directly connected to the server using - parallel cables. All of the examples shown here are direct - connections that are parallel connections.</para> - - <para>The <filename>printcap</filename> configuration file, like most - UNIX configuration files, indicates comment lines starting with a hash - character. Lines without a hash character are meant to be part of a - printer queue description line. Each printer queue description line - starts with a symbolic name, and ends with a newline. Since the - description lines are often quite long, they are often written to span - multiple lines by escaping intermediate newlines with the backslash - (<literal>\</literal>) character. The - <filename>/etc/printcap</filename>file, as supplied, defines a single - printer queue, <literal>lp</literal>. The <literal>lp</literal>queue - is the default queue. Most UNIX-supplied printing utilities send - print output to this queue if no printer is specified by the user. It - should be set to point to the most popular print queue with - <emphasis>local</emphasis> UNIX print users, (i.e.: users that have - shell accounts).</para> - - <para>The layout of <filename>/etc/printcap</filename>is covered in the - manual page, which is reached by running the <userinput>man - printcap</userinput> command. The stock - <filename>/etc/printcap</filename> file at the line defining the spool - <literal>lp</literal>shows:</para> - - <programlisting># -lp|local line printer:\ - :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: -#</programlisting> - - <para>In this example the first line defines the names by which the - printer is known, and ends with an escaped newline. The next line - defines the physical device, the PC parallel port, by - <filename>/dev/lpt0</filename>, and the directory in which the spool - files are stored at <filename>/var/spool/output/lpd</filename>, and - the error log file. Note that this particular error log file will not - show all LPD errors, such as bad job submittals, it usually shows only - the errors that originate within the printing system itself.</para> - - <para>In general, the administrator creates two print queues for every - printer that is connected to the FreeBSD machine. The first queue - entry contains whatever additional capabilities UNIX shell users on - the server require. The second is a raw queue that performs no print - processing on the incoming print job. This queue is used by remote - clients, such as Windows clients, that format their own jobs.</para> - - <para>If the administrator is setting up the printer to allow incoming - LPR jobs from network clients, such as other Windows or UNIX systems, - those systems <emphasis>must</emphasis> be listed in - <filename>/etc/hosts.lpd</filename>.</para> - - <sect2> - <title>Creating the spools</title> - - <para>Building new print spools is merely a matter of making an entry - in the <filename>/etc/printcap</filename> file, creating the spool - directories, and setting the correct permissions on them. For - example, the following additional line defines a PostScript printer - named NEC (in addition to the <literal>lp</literal> - definition):</para> - - <programlisting># -lp|local line printer:\ - :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: - -NEC|NEC Silentwriter 95 Postscript printer:\ - :lp=/dev/lpt0:sd=/var/spool/output/NEC:lf=/var/log/lpd-errs: -#</programlisting> - - <para>Because UNIX is case sensitive, NEC is different from - <literal>nec</literal> in both the name of the printer and the name - of the Spool directory. With the print spooler LPD, the Spool - directories <emphasis>must</emphasis> be different from each other, - or the spooler gets confused and doesen't print.</para> - - <para>After the <filename>/etc/printcap</filename>is modified, the - root user must create the <filename>/var/spool/output/NEC</filename> - directory and assign ownership of it to the <username>bin</username> - user, assign group ownership to <username>daemon</username>, and set - permissions with the following commands:</para> - - <screen>&prompt.user; <userinput>su root</userinput> -&prompt.root; <userinput>cd /var/spool/output</userinput> -&prompt.root; <userinput>mkdir NEC</userinput> -&prompt.root; <userinput>chown bin NEC</userinput> -&prompt.root; <userinput>chgrp daemon NEC</userinput> -&prompt.root; <userinput>chmod 755 NEC</userinput></screen> - </sect2> - - <sect2> - <title>Additional spool capabilities</title> - - <para>Because modern print jobs (especially PostScript) can sometimes - reach hundreds of megabytes, the <literal>sd</literal> capability - entry in the <filename>/etc/printcap</filename> file should always - point to a Spool directory on a filesystem that has enough space. - The <filename>/var</filename> directory on a default FreeBSD - installation is generally set to a fairly small amount, which can - easily overflow the spool. There are four ways to handle this - problem:</para> - - <orderedlist> - <listitem> - <para>During FreeBSD installation, if the administrator knows a - lot of print jobs are going to go through the spooler, - <filename>/var</filename>should be set to a large - amount of free space.</para> - </listitem> - - <listitem> - <para>Modify the <literal>sd</literal> capability in the - <filename>/etc/printcap</filename> file to point to a spool - directory in a different, larger filesystem, such as - <filename>/usr/spool.</filename></para> - </listitem> - - <listitem> - <para>Use soft links to point the - <filename>/var/spool/output</filename> directory to directories - on a larger filesystem.</para> - </listitem> - - <listitem> - <para>Don't define a <filename>/var</filename> directory at all - during FreeBSD installation; this would make the installer link - <filename>/var</filename> to - <filename>/usr/var</filename>.</para> - </listitem> - </orderedlist> - - <para>In addition to spools, the following other capabilities are - usually placed in a production - <filename>/etc/printcap</filename>file.</para> - - <para>The entry <literal>fo</literal> prints a form feed when the - printer is opened. It is handy for HPPCL (HP LaserJets) or other - non-PostScript printers that are located behind electronic print - sharing devices. It can also be used for printers that accept input - from multiple connections, such as a parallel port, serial port, and - localtalk port. An example is an HP LaserJet with an MIO card in it - plugged into both Ethernet and LocalTalk networks. It will clear - any garbage out of the printer before the job is processed.</para> - - <para>The entry <literal>mx</literal> defines the maximum size of a - print job, which is a must for modern print jobs that frequently - grow far past the default print size of a megabyte. The original - intent of this capability was to prevent errant programs from - stuffing the spool with jobs so large that they would use up all - paper in a printer.. Graphics-heavy print jobs have made it - impossible to depend on this kind of space limitation, so - <literal>mx</literal> is usually set to zero, which turns it - off.</para> - - <para>The entry <literal>sh</literal> suppresses printing of banner - pages in case the printer cannot handle ASCII and the client - mistakenly requests them.</para> - - <para>The entry <literal>ct</literal> denotes a TCP Connection - timeout. This is useful if the remote print server doesn't close - the connection properly.</para> - - <note> - <para>FreeBSD 2.2.5 contains a bug in the LPD system - as a - workaround the <literal>ct</literal> capability needs to be set - very large, such as 3600, or the appropriate patch installed and - LPD recompiled. More recent versions of FreeBSD do not have this - bug.</para> - </note> - </sect2> - - <sect2> - <title>Printing to hardware print server boxes or remote print - servers.</title> - - <para>Hardware print server boxes, such as the HP JetDirect internal - and external cards, need some additional capabilities defined in the - <filename>/etc/printcap</filename> entry; <literal>rp</literal>, for - remote print spool, and <literal>rm</literal>for remote machine - name.</para> - - <para>The <literal>rm</literal> capability is simply the DNS or - <filename>/etc/hosts</filename> name of the IP number associated - with the remote printserver device. Obviously, print server - devices, such as the HP JetDirect, must not use a dynamic TCP/IP - network numbering assignment. If they get their numbering via DHCP, - the IP number should be assigned from the static pool; it should - always be the same IP number.</para> - - <para>Determining the name used for <literal>rp</literal>, on the - other hand, can be rather difficult. Here are some common - names:</para> - - <para>Windows NT Server: Printer name of the printer icon created in - Print Manager</para> - - <para>FreeBSD: Print queue name defined in - <filename>/etc/printcap</filename></para> - - <para>HP JetDirect: Either the name <literal>TEXT</literal> or the - name <literal>RAW</literal>. <literal>TEXT</literal> automatically - converts incoming UNIX newline text to DOS-like CR/LF text that the - printer can print. <literal>RAW</literal> should be used for - PostScript, and HPPCL printing.</para> - - <para>HP JetDirect EX +3: External, 3 port version of the JetDirect. - Use <literal>RAW1</literal>, <literal>RAW2</literal>, - <literal>RAW3</literal>, <literal>TEXT1</literal>, - <literal>TEXT2</literal>, or <literal>TEXT3</literal> depending on - the port desired.</para> - - <para>Intel NetPort: Either use <literal>TEXT</literal> for UNIX text - conversion printing or use <literal>PASSTHRU</literal> for normal - printing.</para> - - <para>DPI: Use <literal>PORT1</literal> or <literal>PORT2</literal> - depending on which port the printer is plugged into.</para> - - <para>For other manufacturer's print servers refer to the manuals - supplied with those devices.</para> - - <para>The following is an example printcap that redefines the default - <literal>lp</literal> print queue to send print jobs to the first - parallel port on a remote HP LaserJet plugged into a JetDirect EX +3 - named <hostid role="fqdn">floor2hp4.biggy.com</hostid>.</para> - - <programlisting># -lp|local line printer:\ - :rm=floor2hp4.biggy.com:rp=RAW1:\ - :sd=/var/spool/output/lpd:\ - :lf=/var/log/lpd-errs: -#</programlisting> - - <note> - <para>The <literal>rp</literal> capability <emphasis>must</emphasis> - be defined or the job goes to the default print queue on the - remote host. If the remote device does not have a single print - queue, such as another UNIX system, this causes problems. For - example, if the remote device was a JetDirect EX + 3 and - <literal>rp</literal> was omitted, all queues defined would print - out of the first parallel port.</para> - </note> - </sect2> - - <sect2> - <title>Filters</title> - - <para>The last two important printcap capabilities concern print - filters, <literal>if</literal> (input filter) and - <literal>of</literal> (output filter) If defined, incoming print - jobs are run through the filters that these entries point to for - further processing.</para> - - <para>Filters are the reason that the UNIX print spooling system is so - much more powerful than any other commercial server operating - system. Under FreeBSD, incoming print jobs are acted on by any - filters specified in the <filename>/etc/printcap</filename> - <emphasis>no matter where they originate</emphasis>. Incoming print - jobs from remote Windows, Mac, NT, OS/2 or other clients can be - intercepted and manipulated by any program specified as a filter. - Want a PostScript Printer? There's a filter that adds PostScript - capability to a non-PostScript printer. Want to make a cheap Epson - MX 80 dot-matrix emulate an expensive Okidata Microline dot-matrix - for some archaic mainframe application? Write a filter that will - rewrite the print codes to do it. Want custom-built banner pages? - Use a filter. Many UNIX <filename>/etc/printcap</filename> filters - on many Internet sites can do a variety of interesting and unique - things. Someone may have already written a filter that does what you - want!</para> - - <sect3> - <title>Types of filters</title> - - <para>Three types of filters can be defined in the - <filename>/etc/printcap</filename> file. In this book all filter - examples are for Input filters.</para> - - <sect4> - <title>Input Filters</title> - - <para>Input filters are specified by the <literal>if</literal> - capability. Every job that comes into the spool is acted on by - any filter specified in the <literal>if</literal> entry for that - spool. Virtually all filters that an administrator would use are - specified here. These filters can be either shell scripts, or - compiled programs.</para> - </sect4> - - <sect4> - <title>Fixed Filters</title> - - <para>Fixed filters are specified by separate capabilities, such - as <literal>cf</literal>, <literal>df</literal>, and - <literal>gf</literal>. Mostly, these exist for historical - reasons. Originally, the idea of LPD was that incoming jobs - would be submitted with the type fields set to trigger whatever - filter was desired. However, type codes are confusing and - annoying to the user, who has to remember which option is needed - to trigger which type. It is much easier to set up multiple - queues with different names, and this is what most sites do - these days. For example, originally a DVI fixed filter might be - specified in a spool for <literal>lp</literal>, triggered by the - <option>-d</option> option passed to <command>lpr</command>. - Jobs without this option aren't acted on by the DVI filter. - However, the same thing can be done by creating a queue named - <literal>lp</literal> that doesn't have a DVI filter, and a - queue named <literal>lpdvi</literal> which has the DVI filter - specified in the <literal>if</literal> capability. Users just - need to remember which queue to print to, instead of what option - needed for this or that program.</para> - </sect4> - - <sect4> - <title>Output Filters</title> - - <para>These are specified by the <literal>of</literal>capability. - Output filters are much more complicated than input filters and - are hardly ever used in normal circumstances. They also - generally require a compiled program somewhere, either directly - specified or wrapped in a shell script, since they have to do - their own signal-handling.</para> - </sect4> - </sect3> - - <sect3> - <title>Printing raw Unix text with a filter</title> - - <para>One of the first thing that a new Unix user will discover when - plugging a standard LaserJet or impact printer into a UNIX system - is the <emphasis>stairstep</emphasis> problem. The symptom is - that the user dumps text to the printer, either through LPR or - redirection (by catting it to the parallel device) and instead of - receiving the expected Courier 10-point printout, gets a page with - a single line of text, or two lines of text "stairstepped", text - and nothing else.</para> - - <para>The problem is rooted in how printers and UNIX handle - textfiles internally. Printers by and large follow the "MS-DOS - Textfile" convention of requiring a carriage return, then a - linefeed, at the end of every text line. This is a holdover from - the early days when printers were mechanical devices, and the - print head needed to return and the platen to advance to start a - new line. UNIX uses only the linefeed character to terminate a - text line. So, simply dumping raw text out the parallel port - works on MS-DOS, but not on UNIX.</para> - - <para>If the printer is a PostScript printer, and doesn't support - standard ASCII, then dumping UNIX text to it doesn't work. But - then, neither would dumping MS-DOS text to it. (Raw text printing - on PostScript printers is discussed later in this chapter) Note - also that if the printer is connected over the network to an HP - JetDirect hardware print server, internal or external, the TEXT - queue on the hardware print automatically adds the extra Carriage - Return character to the end of a text line.</para> - - <para>If the printer is the garden-variety HP LaserJet, DeskJet, or - an impact printer, and under DOS the administrator is used to - printing raw text from the command line for directory listings, - there are two ways to fix stairstep. The first is to send a - command to the printer to make it print in "unix textfile" mode, - which makes the printer supply it's own carriage return. This - solution is ugly in a printer environment with UNIX and Windows - machines attempting to share use of the same printer. Switching - the printer to work with Unix disrupts DOS/Windows raw text - printouts.</para> - - <para>The better solution is to use a simple filter that converts - incoming text from UNIX style to DOS style. The following filter - posted on questions@freebsd.org and the sample - <filename>/etc/printcap</filename> entry can be used to do - this:</para> - - <programlisting>#!/bin/sh -# /usr/local/libexec/crlfilter -# -# simple parlor trick to add CR to LF for printer -# Every line of standard input is printed with CRLF -# attached. -# - -awk '{printf "%s\r\n", $0}' -</programlisting> - - <para>An alternative filter posted using sed could be written - as:</para> - - <programlisting>#!/bin/sh -# /usr/local/libexec/crlfilter -# -# Add CR to LF for printer -# Every line of standard input is printed with CRLF -# attached. -# -# Note, the ^M is a *real* ^M (^V^M if your typing in vi) -# - -sed 's/$/^M/' -</programlisting> - - <para>Here is an example of a filter that triggers the printers - automatic LF-to-CR/LF converter (this option is only useful on HP - LaserJets that support this command):</para> - - <programlisting>#!/bin/sh -# Simply copies stdin to stdout. Ignores all filter -# arguments. -# Tells printer to treat LF as CR+LF. Writes a form feed -# character after printing job. - -printf "\033&k2G" && cat && printf "\f" && exit 0 - -exit 2</programlisting> - - <para>The printcap file used to trigger the filter is:</para> - - <programlisting>#/etc/printcap -# The trailer (tr) is used when the queue empties. I found that the -# form feed (\f) was basically required for the HP to print properly. -# Banners also need to be shut off. -# - -lp|local line printer:\ - :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: - :if=/usr/local/libexec/crlfilter:sh:tr=\f:mx#0: -#</programlisting> - </sect3> - - <sect3> - <title>The pr filter</title> - - <para>Although most filters are built by scripts or programs and are - added to the UNIX machine by the administrator, there is one - filter that is supplied with the FreeBSD operating system is very - useful for raw text files: the <literal>pr</literal>filter. It is - most commonly used when printing from the UNIX command shell. The - <literal>pr</literal> filter paginates and applies headers and - footers to ASCII text files. It is automatically invoked with the - <option>-p</option> option used with the <command>lpr</command> - program at the UNIX command prompt.</para> - - <para>The pr filter is special - it runs <emphasis>in - addition</emphasis> to any input filters specified for the print - queue in <filename>/etc/printcap</filename>, - <emphasis>if</emphasis> the user sets the option for a print job. - This allows headers and pagination to be applied in addition to - any special conversion, such as CR to LF that a specified input - filter may apply.</para> - </sect3> - - <sect3> - <title>Printing PostScript banner pages with a Filter.</title> - - <para>Unfortunately, the canned banner page supplied in the LPD - program prints only on a text-compatible printer. If the attached - printer understands only PostScript and the administrator wants to - print banner pages, it is possible to install a filterinto the - <filename>/etc/printcap</filename>file to do this.</para> - - <para>The following filter is taken from the FreeBSD Handbook. I've - slightly changed it's invocation for a couple of reasons. First, - some PostScript printers have difficulty when two print files are - sent within the same print job or they lack the trailing - Control-D. Second is that the handbook invocation uses the LPRPS - program, which requires a serial connection to the printer.</para> - - <para>The following filter shows another trick: calling LPR from - within a filter program to spin off another print job. - Unfortunately, the problem with using this trick is that the - banner page always gets printed after the job. This is because - the incoming job spools first, and then FreeBSD runs the filter - against it, so the banner page generated by the filter always - spools behind the existing job.</para> - - <para>There are two scripts, both should be put in the - <filename>/usr/local/libexec</filename> directory, and the modes - set to executable. The <filename>printcap</filename> also must be - modified to create the nonbanner and banner versions of the print - queue. Following the scripts is the - <filename>/etc/printcap</filename> file showing how they are - called. Notice that the <literal>sh</literal> parameter is turned - on since the actual printed banner is being generated on the fly - by the filter:</para> - - <programlisting>#!/bin/sh -# Filename /usr/local/libexec/psbanner -# parameter spacing comes from if= filter call template of: -# if -c -w -l -i -n login -h host -# parsing trickiness is to allow for the presence or absence of -c -# sleep is in there for ickiness of some PostScript printers - -for dummy -do - case "$1" in - -n) alogname="$2" ;; - -h) ahostname="$2" ;; - esac - shift -done - -/usr/local/libexec/make-ps-header $alogname $ahostname "PostScript" | \ - lpr -P lpnobanner - -sleep 10 - -cat && exit 0</programlisting> - - <para>Here is the <filename>make-ps-header</filename>listing.</para> - - <programlisting>#!/bin/sh -# Filename /usr/local/libexec/make-ps-header -# -# These are PostScript units (72 to the inch). Modify for A4 or -# whatever size paper you are using: -# - -page_width=612 -page_height=792 -border=72 - -# -# Save these, mostly for readability in the PostScript, below. -# - -user=$1 -host=$2 -job=$3 -date=`date` - -# -# Send the PostScript code to stdout. -# - -exec cat <<EOF -%!PS -% -% Make sure we do not interfere with user's job that will follow -% - -% -% Make a thick, unpleasant border around the edge of the paper. -% - -$border $border moveto -$page_width $border 2 mul sub 0 rlineto -0 $page_height $border 2 mul sub rlineto -currentscreen 3 -1 roll pop 100 3 1 roll setscreen -$border 2 mul $page_width sub 0 rlineto closepath -0.8 setgray 10 setlinewidth stroke 0 setgray - -% -% Display user's login name, nice and large and prominent -% - -/Helvetica-Bold findfont 64 scalefont setfont -$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto -($user) show - -% -% Now show the boring particulars -% - -/Helvetica findfont 14 scalefont setfont -/y 200 def -[ (Job:) (Host:) (Date:) ] { -200 y moveto show /y y 18 sub def -} forall -/Helvetica-Bold findfont 14 scalefont setfont -/y 200 def -[ ($job) ($host) ($date) ] { -270 y moveto show /y y 18 sub def -} forall - -% -% That is it -% - -showpage</programlisting> - - <para>Here is the <filename>/etc/printcap</filename> file.</para> - - <programlisting># -lp|local line printer, PostScript, banner:\ - :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: - :if=/usr/local/libexec/psbanner:sh:mx#0: - -lpnobanner|local line printer, PostScript, no banner:\ - :lp=/dev/lpt0:sd=/var/spool/output/lpd-noban:\ - :lf=/var/log/lpd-errs:sh:mx#0: -#</programlisting> - </sect3> - </sect2> - </sect1> - - <sect1> - <title>Printer Accounting</title> - - <para>The FreeBSD print spooler can manage accounting statistics for - printer usage. The spooler counts each page printed and generates - totals for each user. In this manner departments or individuals can - be charged money for their use of the printer.</para> - - <para>In the academic world, such as student computer labs, accounting - is very political. Many schemes have been developed to attempt to - gather statistics to charge people (generally students) for printing. - Administrators in this environment who deal with printers can have - almost as many accounting problems as printer problems. In the - corporate environment, on the other hand, accounting is not as - important. I strongly recommend against any corporation attempting to - implement printer accounting on shared printers for a number of - reasons:</para> - - <orderedlist> - <listitem> - <para>The entire UNIX accounting system is based on ASCII printouts. - It is easy to count the number of ASCII pages, form feeds, or text - lines in a print job. In corporations, however, PostScript and - HPPCL are generally the order of the day. It is almost impossible - to figure out by examining the datastream how many pages it will - occupy, and even if this could be done accurately, it wastes - significant computational resources.</para> - - <note> - <para>It is possible to get some PostScript printers to count - pages, but doing so requires a bidirectional connection to the - printer and additional programming on the UNIX system. This - task is beyond the scope of this book.</para> - </note> - </listitem> - - <listitem> - <para>Banner pages aren't included in UNIX printer accounting - counts. Therefore, someone submitting 20 two-page jobs uses much - more paper than does someone submitting one 40 page job, yet both - are charged the same amount.</para> - </listitem> - - <listitem> - <para>The username of the submitter can be easily forged, if the job - is remotely submitted over the network from a client. (practically - all jobs in a Windows client printing environment are remotely - submitted) Although some LPR clients can be set to authenticate, - and the <literal>rs</literal> capability can be set to enforce - authentication, not all can, especially Windows LPR - clients.</para> - </listitem> - - <listitem> - <para>It is more difficult for a submitter to hide the IP number or - machine name of the remote client, but in a Windows environment - there is no guarantee that someone was sitting at a particular - desktop machine when the job was submitted.</para> - </listitem> - - <listitem> - <para>A business generates no revenue by monitoring printer usage. - In the academic community, however, when a student lab charges for - printouts the lab is actually extracting money from an entity (the - student) that is separate from the lab. Within a corporation, the - concept of department A getting revenue from user B is pointless - and doesn't generate a net gain for the corporation as a - whole.</para> - - <para>For my printer administration, I have found that I can save - more money on printing costs by purchasing supplies wisely than by - attempting to discourage printing through "chargebacks". What is - the sense of being miserly with printing while spending double on - toner cartridges because no one is willing to comparison shop, or - signing a "lease" agreement that isn't beneficial for the printer? - When you get down to it, corporate users don't care much for print - sharing anyway, and they generally only agree to it because the - administrator can buy a far bigger, faster, and fancier printer - than they can requisition.</para> - </listitem> - - <listitem> - <para>Worse yet, if usage on a shared printer is charged, it - encourages employees to look for other places to print. - Inevitably, people run out buy cheap inkjet printers for their own - use, and the business ends up spending more on paper and supplies - for many poor-quality small printers, than it would for a few - decent big ones. Moreover, the inferior output of these printers - makes the organization as a whole look bad.</para> - </listitem> - - <listitem> - <para>The corporate spirit should be one of teamwork, not bickering. - The surest way to kill a network in a corporation is to set up a - situation that puts the administrator into the policeman position - or pits one department against another.</para> - </listitem> - </orderedlist> - - <para>The only justification I've ever seen for running accounting on - corporate printers is using the accounting system to automate - reminders to the administrator to replace paper, or toner. Aside from - this use, a corporation that implements accounting as a way of - encouraging employees not to waste paper ends up defeating the purpose - of turning on accounting.</para> - </sect1> - - <sect1> - <title>Microsoft Networking Client printing with Samba</title> - - <para>Although LPR is a time-tested and truly cross-platform printing - solution, sites with a majority of Windows clients running Microsoft - Networking have an alternate printing mechanism—Samba. Samba - can provide print services to clients running SMB-compatible network - clients. With a running Samba installation, the administrator may - "share out" printers as well as filesystem directories from the - FreeBSD system.</para> - - <para>Printers accessed with Samba must be defined both in the - <filename>/etc/printcap</filename> file and the - <filename>/usr/local/etc/smb.conf</filename> file. If the individual - printers are defined in the <filename>smb.conf</filename> file with - the <literal>printer driver=</literal> statement set to the exact - model name of the printer, the "Auto printer driver install" feature - of Windows NT and Win95/98 is activated. This automatically loads the - correct printer driver if the user clicks on the print queue in - Network Neighborhood under Windows 95 or NT 4.0 The restriction, of - course, is that the printer model must be in the Windows client driver - database.</para> - - <para>The <filename>smb.conf</filename> file also defines the - <literal>print</literal> command used to pass jobs to the UNIX print - spool. It is a good idea to redefine this via the <literal>print - command</literal> option to <literal>lpr -s -P %p %s; rm - %s</literal>. This turns on soft linking, so that large print jobs - don't get truncated.</para> - - <para>In operation, the SMB-networking client builds the print job on - itself and then transfers the entire job over the network to the Samba - server. On the server, Samba has it's own temporary print spool - directory to which the job is copied. Once the job has been - completely received, it is then passed to the UNIX print - spooler.</para> - - <figure> - <title>Microsoft Networking Client printing with Samba</title> - - <mediaobject> - <imageobject> - <imagedata fileref="08-06" format="EPS"> - </imageobject> - - <textobject> - <literallayout class="monospaced"> ,---------. - | ======= | FreeBSD Server - | ======= | +---------------------+ ,-----. -+-----------+ | +---------------+ | | | -| Printer [ ]------------[ ] | Samba | | |_____| -+-----------+ Parallel | | Software | [ ]------_________ - Cable | +---------------+ | / ::::::: \ - | | `---------' - | +---------------+ | Network PC - | | Print | | - | | Software | | - | +---------------+ | - +---------------------+</literallayout> - </textobject> - - <textobject> - <phrase>The Samba software and the print software run on the same - host. Samba receives the print job, then hands it to the print - spooler.</phrase> - </textobject> - </mediaobject> - </figure> - - <sect2> - <title>Client access issues</title> - - <para>Because a Windows client formats print jobs before sending them - to the server, the administrator may want to hide some of the - specialty print queues on the server. For example, the queue that - converts LF to CRLF for UNIX text printouts would probably not be - shared out. To make such queues invisible, the - <literal>browseable=no</literal> option can be turned on in the - <filename>smb.conf</filename> file. Also, the <literal>load - printers</literal> option must be set to no to allow individual - printer definitions.</para> - - <note> - <para>In general, the only print queues that should be visible - through Samba are the "raw" print queues that are set up by the - administrator to allow incoming preformatted print jobs.</para> - </note> - - <para>Windows clients that print to Samba print queues on the UNIX - system can view and cancel print jobs in the print queue. They - cannot pause them, however, which is a difference between Novell and - Windows NT Server print queues. They also cannot prioritize print - jobs from the print queue window, although the administrator can - reprioritize print jobs that are in the queue from a command shell - on the FreeBSD server.</para> - </sect2> - - <sect2> - <title>Printer entries in configuration files</title> - - <para>Following are listings of sample - <filename>/etc/printcap</filename> file, and - <filename>smb.conf</filename> files used on the system to provide - print services. An explanation of the interaction of these files - follows.</para> - - <example> - <title><filename>/etc/printcap</filename></title> - - <programlisting># -# -# The printer in lpt0 is a Postscript printer. The nec-crlf entry -# is for testing the printer when it is switched into HP LaserJet III -# mode. -# - -lp|local line printer:\ - :lp=/dev/lpt0:sd=/var/spool/output/lpd:\ - :lf=/var/log/lpd-errs:sh:mx#0: - -# - -nec-crlf|NEC Silentwriter 95 in ASCII mode with Unix text filter:\ - :lp=/dev/lpt0:sd=/usr/lpdspool/nec-crlf:\ - :lf=/var/log/lpd-errs:sh:mx#0:\ - :if=/usr/local/libexec/crlfilter:tr=\f: - -# - -nec-raw|NEC Silentwriter 95 used for PostScript passthrough printing:\ - :lp=/dev/lpt0:sd=/usr/lpdspool/nec-raw:\ - :lf=/var/log/lpd-errs:sh:mx#0: - -# - -nec-ps-banner|NEC Silentwriter 95 with Postscript banner page created:\ - :lp=/dev/lpt0:sd=/usr/lpdspool/nec-ps-banner:\ - :lf=/var/log/lpd-errs:sh:mx#0:if=/usr/local/libexec/psbanner: - -# -#</programlisting> - </example> - - <example> - <title><filename>/usr/local/etc/smb.conf</filename></title> - - <programlisting>[global] -comment = FreeBSD - Samba %v -log file = /var/log/samba.log -dont descend = /dev,/proc,/root,/stand -print command = lpr -s -P %p %s; rm %s -interfaces = <replaceable>X.X.X.X</replaceable> (the system IP number goes here) -printing = bsd -map archive = no -status = yes -public = yes -read only = no -preserve case = yes -strip dot = yes -security = share -guest ok = no -password level = 1 -dead time = 15 -domain master = yes -workgroup = WORKGROUP - -[homes] -browseable = no -comment = User Home Directory -create mode = 0775 -public = no - -[printers] -path = /var/spool -comment = Printers -create mode = 0700 -browseable = no -read only = yes -public = no - -[lp] -printable = yes -browseable = no - -[nec-raw] -comment = Main Postscript printer driver for Windows clients -printer driver = NEC SilentWriter 95 -printable = yes -browseable = yes - -[wwwroot] -path = /usr/local/www -read only = no -create mode = 0775 -comment = Internal Web Server</programlisting> - </example> - </sect2> - - <sect2> - <title>Browsing output</title> - - <para>Following is the output of a <userinput>net view</userinput> - command executed at a DOS prompt under Windows 95:</para> - - <screen>Shared resources at \\SERVER - -Sharename Type Comment --------------------------------------------------------------------- -nec-crlf Print NEC Silentwriter 95 in ASCII mode -nec-raw Print Main Postscript printer driver -tedm Disk User Home Directory -wwwroot Disk Internal Web Server - -The command was completed successfully.</screen> - - <para>In the <filename>/etc/printcap</filename> file four print queues - are defined, all tied to the printer plugged into the parallel port - on the FreeBSD server. The first is <literal>lp</literal>, the - generic local line printer. Since this print queue generally has a - filter placed on it to format jobs from the UNIX print queue - properly, it should not be visible on the SMB network. (ie: visible - in Network Neighborhood) The second queue, - <literal>nec-crlf</literal>, has a filter that converts UNIX text to - text that prints without stairstepping, so it also should be hidden - from the SMB network. The third, <literal>nec-raw</literal>, should - be visible on the network because this is the spool that the Windows - clients use. The last queue, <literal>nec-ps-banner</literal>, is - another specialty queue for UNIX local printing and thus should not - be visible.</para> - - <para>When the <filename>smb.conf</filename> file is parsed, the - default entry <literal>[printers]</literal> is first read and used - as a set of defaults for printers that are going to be shared out. - Next, the <filename>/etc/printcap</filename> file is read to get a - list of all printers on the server. Last, each printer is checked - for a service name in the <filename>smb.conf</filename>file that - contains settings that override the set of defaults.</para> - - <para>In the listing of what resources are visible on the network, - both <literal>nec-crlf</literal> and <literal>nec-raw</literal> - print queues are visible, and <literal>lp</literal>and - <literal>nec-ps-banner</literal> is not. <literal>lp</literal> is - not visible because there is a specific entry, - <literal>[lp]</literal> in the <filename>smb.conf</filename> file - that blocks it. <literal>nec-ps-banner</literal> doesen't have such - an entry, but because the print queue name is not a legal length for - a SMB name, it isn't shared out either.</para> - - <para>The <literal>nec-crlf</literal> printer is visible so as to - illustrate another point - comments. If a print queue has no entry - in the <filename>smb.conf</filename> file and is built by scanning - the <filename>/etc/printcap</filename> file and using the - <literal>[printers]</literal> defaults, the comment is taken from - the <filename>/etc/printcap</filename> file next to the queue - definition name. Otherwise, if an entry is made for the printer in - the <filename>smb.conf</filename> file the comment is taken from the - entry in <filename>smb.conf</filename>.</para> - </sect2> - </sect1> - - <sect1> - <title>Printing between NT Server/NetWare and FreeBSD.</title> - - <para>Up to this point in the chapter, our main concern has been FreeBSD - and Windows NT printing interoperability with NT as a print client - passing jobs to the FreeBSD system. What happens if the situation is - reversed and the FreeBSD system is itself a printing client of another - LPD server? This situation can arise in a mixed UNIX/Netware or - UNIX/NT environment. The administrator may elect to forgo the use of - Samba, and use an NT server to provide print services. Alternatively, - the administrator may have existing DOS Novell IPX clients that they - don't want to change, printing to an existing IPX Novell NetWare - server. Many of the earlier hardware print servers, such as the Intel - NetPort 1 and NetPort 2 were IPX only. A site with a large number of - these hardware servers may wish to move the clients to TCP/IP, but - leave the existing IPX-based printing network intact.</para> - - <para>With NetWare it is possible to load an LPD NetWare loadable module - (NLM) on the NetWare server that takes incoming LPR print jobs and - prints them on IPX print queues. Later versions of NetWare may - include this NLM, it was an extra cost add-on with NetWare 3.X</para> - - <para>With Windows NT Server, loading the TCP/IP LPR printing support - also loads the LPD print server on NT. By using LPR client programs - on UNIX, it is possible to submit, view status, and remove jobs - remotely from an NT server that has LPR installed as a port for it's - printers.</para> - - <para>Following is a sample <filename>/etc/printcap</filename>file entry - that defines a print queue named <literal>tank</literal>on the FreeBSD - system pointed to an NT LPD server queue named - <literal>sherman</literal> on a NT Server named - <hostid role="fqdn">big.army.mil</hostid> in the DNS. This uses the - <literal>rm</literal> printcap capability. Unlike the earlier - examples, the output print jobs are sent out not by the PC parallel - port but over the network to the NT server.</para> - - <programlisting># -tank|sample remote printer:\ - :rm=big.army.mil:rp=sherman:sd=/var/spool/output/lphost:\ - :lf=/var/log/lpd-errs: -#</programlisting> - - <note> - <para>When using an NT server as an LPD server it may be necessary to - make the NT registry changes mentioned under Windows NT Registry - Changes, earlier in the chapter.</para> - </note> - </sect1> - - <sect1> - <title>Printing from Unix</title> - - <para>Two commands used at the FreeBSD command prompt are intended as - general-purpose print commands: <command>lp</command> and - <command>lpr.</command>.</para> - - <sect2> - <title><command>lp</command></title> - - <para>The <command>lp</command> command is simply a front end command - that calls the <command>lpr</command> command with appropriate - options. It's main use is to allow the running of precompiled - binary programs and scripts that assume that the - <command>lp</command> command is the <emphasis>official</emphasis> - printing command.</para> - </sect2> - - <sect2> - <title><command>lpr</command></title> - - <para>The <command>lpr</command> command is the main command that is - used to print files from the command prompts under the FreeBSD - operating system. It is frequently spawned off as a child program, - or used in pipes. For example, when the Netscape web browser's - Print button is clicked, Netscape may create the PostScript output, - but the output goes through the <command>lpr</command> - command.</para> - - <para>The <command>lpr</command> command, like many UNIX command-line - printing programs, assumes that the default print queue name is - <literal>lp</literal>. When the FreeBSD machine is set up, the - administrator usually sets the <literal>lp</literal> queue to print - through a filter that allows raw UNIX text sent to it to print - properly. For example, if an HP LaserJet printer that doesn't have - Postscript is connected to the server, the - <literal>lp</literal>queue specifies in the - <filename>/etc/printcap</filename> file the CRLF filter listed - earlier. On the other hand, if an Apple Laserwriter that doesn't - support ASCII is connected to the server, the - <literal>a2ps</literal>filter would be specified in the - <filename>/etc/printcap</filename> for the <literal>lp</literal> - queue.</para> - - <para>When printing raw text files usually the <option>-p</option> - option is specified to <command>lpr</command>. When printing - preformatted files, such as PostScript files, the - <option>-P</option> option is used, which selects whatever queue is - used to handle these job types.</para> - </sect2> - - <sect2> - <title>Managing the Unix Print Queue</title> - - <para>Once the print jobs coming in from clients are received on the - FreeBSD system and placed in the print spool, they are metered out - at a slower rate to the various printers. If traffic activity is - light, and few print jobs get sent through, the administrator can - probably ignore the print queue as long as it continues to work. - However, a busy network printer running at an optimal rate of speed - usually has a backlog of unprinted jobs in the queue waiting for - print time. To keep all users happy and to provide for the - occasional rush print job, the Unix LPD/LPR printing system has - several administration commands which are described here.</para> - - <sect3> - <title>Viewing the queue</title> - - <para>On busy printers, and to troubleshoot stopped printers, users - sometimes need to view the print jobs in the queue. Administrators - also need to view the queue to see what jobs may need to be - expedited. This can be done from the workstation that remotely - submitted the job if the LPR client has the ability to do this. - The Windows 3.1 LPR client discussed earlier has this capability. - Unfortunately, many LPR clients don't, which means that the - administrator must Telnet into the UNIX machine that the print - queues are on and view them there.</para> - - <para>The UNIX shell command used to view the queue is the - <command>lpq</command> command It is frequently run as - <userinput>lpq -a</userinput> which shows jobs in all queues. The - following is a sample output of the command:</para> - - <screen>&prompt.root; <userinput>lpq -a</userinput> -nec-raw: -Rank Owner Job Files Total Size -1st tedm 19 C:/WLPRSPL/SPOOL/~LP00018.TMP 105221 bytes -2nd tedm 20 C:/WLPRSPL/SPOOL/~LP00019.TMP 13488 bytes -3rd root 3 hosts 1220 bytes -4th tedm 1 Printer Test Page 765 bytes -5th tedm 2 Microsoft Word - CHAPTE10.DOC 15411 bytes</screen> - - <para>The first two jobs and the last two jobs came from remote - clients, the third came from the command prompt.</para> - </sect3> - - <sect3> - <title>Removing print jobs</title> - - <para>Deleting unwanted print jobs that haven't yet printed from the - queue can be done by the remote workstations that submitted the - job if their LPR implementations have the necessary commands. The - Windows 3.1 LPR client I detailed earlier this capability. Many - LPR clients don't, however, which means that the administrator - must Telnet into the UNIX machine that the print queues are on and - delete the jobs there.</para> - - <para>The administrator can delete any print jobs from any queues by - running the <command>lprm</command> command followed by the - specified print queue and the job number. Below is a sample - output of the command:</para> - - <screen>&prompt.root; <userinput>lprm -P nec-raw 19</userinput> -dfA019tedmitte dequeued -cfA019dostest dequeued -&prompt.root; <userinput>lprm -P nec-raw 3</userinput> -dfA003toybox.placo.com dequeued -cfA003toybox.placo.com dequeued</screen> - - <para>The <command>lprm</command> command is also used under UNIX to - delete remote print jobs.</para> - </sect3> - - <sect3> - <title>Advanced management</title> - - <para>The administrator logged into the FreeBSD system as the root - user can also perform several other operations that ordinary users - cannot. These include turning the queues on and off, and moving - print jobs within the print queues. The command used to do this - is the <command>lpc</command> command.</para> - - <para><command>lpc</command> has two modes of operation. In the - first mode, the command is run by itself, which puts the - administrator into an <prompt>lpc</prompt> prompt. Some general - help is available for the commands, such as the following sample - output:</para> - - <screen>&prompt.root; <userinput>lpc</userinput> -<prompt>lpc></prompt> <userinput>help</userinput> -Commands may be abbreviated. -Commands are: -abort enable disable help restart status topq ? -clean exit down quit start stop up -<prompt>lpc></prompt> <userinput>help disable</userinput> -disable turn a spooling queue off -<prompt>lpc></prompt> <userinput>help status</userinput> -status show status of daemon and queue -<prompt>lpc></prompt> <userinput>exit</userinput></screen> - - <para>In the second mode of operation the <command>lpc</command> - command is just run by itself, followed by the command and the - print queue name. Following is a sample output:</para> - - <screen>&prompt.root; <userinput>lpc disable lp</userinput> -lp: -queuing disabled</screen> - - <para>Under FreeBSD, there is no command that specifically allows - the administrator to move jobs from one queue to another. This - can be done, however, by changing into the raw queue directory - then rerunning the <command>lpr</command> command. Following is a - sample run showing three print jobs moved from a dysfunctional - queue to a good one:</para> - - <screen>&prompt.root; <userinput>lpq -a</userinput> -lp: -Warning: lp is down: printing disabled -printing disabled -Rank Owner Job Files Total Size -1st root 51 hosts 1220 bytes -2nd root 52 services 60767 bytes -3rd root 53 printcap 2383 bytes -&prompt.root; <userinput>cd /var/spool/output/lpd</userinput> -&prompt.root; <userinput>ls</userinput> -.seq cfA053toybox.placo.com dfA053toybox.placo.com -cfA051toybox.placo.com dfA051toybox.placo.com lock -cfA052toybox.placo.com dfA052toybox.placo.com status -&prompt.root; <userinput>lpr -P nec-raw dfA051toybox.placo.com</userinput> -&prompt.root; <userinput>lpr -P nec-raw dfA052toybox.placo.com</userinput> -&prompt.root; <userinput>lpr -P nec-raw dfA053toybox.placo.com</userinput> -&prompt.root; <userinput>lprm -P lp -</userinput> -&prompt.root; <userinput>lpq -a</userinput> -nec-raw: -Warning: nec-raw is down: printing disabled -Warning: no daemon present -Rank Owner Job Files Total Size -1st root 5 dfA051toybox.placo.com 1220 bytes -2nd root 6 dfA052toybox.placo.com 60767 bytes -3rd root 7 dfA053toybox.placo.com 2383 bytes</screen> - - <note> - <para>Moving jobs from queue to queue is feasible only when all - printers are similar, as when all printers support - PostScript.</para> - </note> - </sect3> - - <sect3> - <title>Remote Management</title> - - <para>Just as the root user can manipulate remotely submitted jobs - in the print queue, print jobs can be remotely managed by regular - users with the LPR clients that created them. Unfortunately, some - LPR clients, such as Win95, don't have enough programming to be - able to do this. Others, like the Win31 client, can manipulate - the print jobs remotely.</para> - - <para>FreeBSD offers some level of protection against inadvertent - deletion of print jobs from remote hosts by restricting - manipulation of a job to the same host that originated it. Even - if the owner of the job matches a local user account on the - server, for an ordinary user to delete remotely submitted print - jobs, the request still must come from the remote host.</para> - </sect3> - </sect2> - </sect1> - - <sect1> - <title>Advanced Printing Topics</title> - - <para>The FreeBSD UNIX LPR/LPD printing system is very flexible, and, - with the addition of filters, can be adapted to very unusual printing - environments. To enhance this flexibility, several useful printing - utilities are supplied on the FreeBSD CDROM which the administrator - might wish to install.</para> - - <sect2> - <title>Ghostscript</title> - - <para>The Ghostscript program, invoked as - <filename>/usr/local/bin/gs</filename>, is one of the most useful - printing utilities that have been developed for the free software - community. Ghostscript reads incoming PostScript data, (or Adobe - PDF files) interprets it, and outputs it as a raster image. This - can be displayed on screen, for example, with the GhostView program - under the X Window system, or printed on most graphics printers, - such as Epson dot-matrix, HP DeskJet, or HP LaserJet. In effect, it - is a way of adding PostScript printing capability to a printer that - doesn't have PostScript firmware code. Ghostscript has been ported - to numerous operating systems including Windows.</para> - - <para>The Ghostscript home page is located at - <ulink url="http://www.cs.wisc.edu/~ghost/">http://www.cs.wisc.edu/~ghost/</ulink> - and contains the most current version of the program. A prebuilt - FreeBSD binary of Ghostscript located in the Packages section of the - FreeBSD CDROM. This can be installed on the FreeBSD system by - selecting the package from the prepackaged software list that is - accessed through the <command>/stand/sysinstall</command> - installation program. Many packaged programs on the CD depend on - GhostScript, and so it may already be installed.</para> - - <para>Installation of the packaged version of GhostScript is - recommended in the FreeBSD ports Section because it has been tested - with the other packages that require it. The package creates a - directory containing some documentation files in - <filename>/usr/local/share/ghostscript/X.XX/doc</filename>. - Unfortunately, because of the packaging process on the FreeBSD CDROM - not all the useful installation files are copied into this location. - So, if the package was version 5.03 (for example) the administrator - will also want to get the file - <ulink url="ftp://ftp.cs.wisc.edu/ghost/aladdin/gs502/ghostscript-5.02.tar.gz">ftp://ftp.cs.wisc.edu/ghost/aladdin/gs503/ghostscript-5.03.tar.gz</ulink>, - and unzip and untar it into a temporary directory.</para> - - <para>Extracting the archive file creates a directory structure under - the <filename>gs5.03</filename> subdirectory. To install - ghostscript in the <filename>/etc/printcap</filename> file, read the - <filename>gs5.03/devs.mak</filename> file to determine which printer - driver definition works with your printer and then use the following - instructions:</para> - - <procedure> - <step> - <para>Change to the root user with su.</para> - </step> - - <step> - <para>In the <filename>gs5.03</filename>directory, copy the - <filename>lprsetup.sh</filename>, - <filename>unix-lpr.txt</filename>, and - <filename>unix-lpr.sh</filename> files to - <filename>/usr/local/share/ghostscript/5.03</filename></para> - </step> - - <step> - <para>Change to the - <filename>/usr/local/share/ghostscript/5.03</filename> - directory. Edit <filename>lprsetup.sh</filename> with a text - editor such as <command>vi</command>.</para> - </step> - - <step> - <para>Modify the <literal>DEVICES=</literal> entries - to list your selected printer driver definitions per the - instructions in <filename>unix-lpr.txt.</filename></para> - </step> - - <step> - <para>Modify the <literal>PRINTERDEV=</literal> to - <literal>/dev/lpt0</literal>, and the <literal>GSDIR=</literal> - to <literal>/usr/local/share/ghostscript</literal>, and the - <literal>SPOOLDIR=</literal> to - <literal>/var/spool/output</literal>. Save the file.</para> - </step> - - <step> - <para>Edit the <filename>unix-lpr.sh</filename> file and change - the <literal>PSFILTERPATH=</literal> to - <literal>/usr/local/share/ghostscript</literal>.</para> - </step> - - <step> - <para>If the printer that you defined in the - <filename>lprsetup.sh</filename> file is a monochrome printer, - remove the <literal>"-dBitsPerPixel=${bpp}"</literal>and - <literal>"$colorspec"</literal> entries on the - <literal>gs</literal> invocation line and save the file. - Otherwise, if it is a color definition leave them in. For - example, the following line is for a monochrome LaserJet:</para> - - <programlisting>") | gs -q -dNOPAUSE -sDEVICE=${device} \"</programlisting> - - <para>Don't remove anything else. Exit the editor, and save the - <filename>unix-lpr.sh</filename> file.</para> - </step> - - <step> - <para>Copy the <filename>unix-lpr.sh</filename> file to the parent - directory, <filename>/usr/local/share/ghostscript</filename> and - set the execute bit on it.</para> - </step> - - <step> - <para>Set the execute bit on <filename>lprsetup.sh</filename> with - chmod and run the file by typing - <userinput>./lprsetup.sh</userinput></para> - </step> - - <step> - <para>Follow the instructions on creating the Spool directories. - If you will be using accounting and a separate log file, run the - <command>touch</command> command to create the empty files per - directions in script output.</para> - </step> - - <step> - <para>The sample <command>/etc/printcap</command> is located in - the current directory; the filename is - <filename>printcap.insert</filename>. Use this as a template to - modify the <filename>/etc/printcap</filename> file. A sample - <filename>/etc/printcap</filename> file for a LaserJet 3 is - below:</para> - - <programlisting># -# -ljet3.raw|Raw output device ljet3 for Ghostscript:\ - :rm=big.army.mil:rp=sherman:sd=/var/spool/output/ljet3/raw:\ - :mx#0:sf:sh:rs: - -# - -ljet3|Ghostscript device ljet3 (output to ljet3.raw):\ - :lp=/dev/null:sd=/var/spool/output/ljet3:\ - :lf=/var/log/lpd-errs:mx#0:sf:sh:rs:\ - :if=/usr/local/share/ghostscript/filt/indirect/ljet3/gsif:\ - :af=/var/spool/output/ljet3/acct: - -#</programlisting> - </step> - </procedure> - </sect2> - - <sect2> - <title>a2ps filter</title> - - <para>Another handy utility is the <command>a2ps</command>, short for - ASCII-to-PostScript. This program takes an incoming ASCII - datastream and converts it into PostScript. It can also print - multiple pages on a single sheet of paper by shrinking them down. It - is a useful tool for a printer that cannot interpret ASCII, such as - a PostScript-only printer.</para> - - <para><command>A2ps</command> is not installed in the FreeBSD system - by default; it is located in the ports section - <filename>/usr/ports/print/a2ps43</filename>. A prepackaged binary - can be installed with <command>/stand/sysinstall</command> but I - have had problems with that port. It is best to install it by - running <command>make</command> in the a2ps43 ports directory. A - printcap entry and filter using this follow:</para> - - <example> - <title><filename>/etc/printcap</filename></title> - - <programlisting># -lp|local line printer with output dumped through a2ps for raw listings:\ - :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:sh:mx#0:\ - :if=/usr/local/libexec/ascii2postscript: -#</programlisting> - </example> - - <example> - <title><filename>/usr/local/libexec/ascii2postscript</filename></title> - - <programlisting>#!/bin/sh -# -# Simple filter that converts ASCII to Postscript for basic stuff like -# directory listings. -# - -/usr/local/bin/a2ps && exit 0 - -exit 2</programlisting> - </example> - - <para>Read the system manual page for <command>a2ps</command> to see - the options available with this program, and remember to set the - filter script <filename>ascii2postscript</filename> - all-executable.</para> - </sect2> - </sect1> - - <sect1> - <title>Miscellaneous</title> - - <para>The large number of other printing utilities cannot be covered - here. Some add features such as automatic job type sensing, others - handle bidirectional communication between the server and the printer. - There are also a few other experimental LPR printing replacement - systems. Commands such as ghostscript and <command>a2ps</command> can - also be used in pipes that create pretty output on an ordinary impact - printer.</para> - - <para>One last hint - the system manual pages can be printed with the - <option>-t</option> option which turns their ordinary ASCII output to - beautifully formatted PostScript. Try the command <command>man -t - man</command> and send the output through GhostScript or a - PostScript printer for easier to read manual pages.</para> - </sect1> - </chapter> -</book> |