856365a90526d3b73c72f1af3b430391.ppt
- Количество слайдов: 37
Chapter 23 Printing
Computer Center, CS, NCTU Basic terms (1) q spooler • Printer server • Receive, store, priority print jobs • Send print jobs to printer q dpi • dots per inch • Such as 300 x 600 dpi q Bitmap • Set of data that specify how dots are filled • Compression: JPEG, PNG, TIFF, … q Filters • Programs that modify print jobs between spooler and printer 2
Computer Center, CS, NCTU Basic terms (2) q PDL • Page Description Language • Describe where and how the image is placed on the page • PDLs: Post. Script and Printer Command Language (PCL) q Post. Script • PDL developed by Adobe • %!PS starting q PCL • HP’s alternative to Post. Script q RIP • Raster Image Processor • PDLs-to-bitmap conversion 3
Computer Center, CS, NCTU 4 Types of Printer q Serial and Parallel Printer • Parallel printer is simple and faster than serial printer q USB Printer q Network printer • Printer with NIC • Two kinds of network printer Ø Printer that can do jobs queuing and scheduling Ø Printer that does not know above, the NIC is nothing more than a channel to transfer printing data, just like serial or parallel port
Computer Center, CS, NCTU 5 BSD Printing System (1) q Printer server • lpd Ø Responsible for accepting jobs, processing them and sending them to an actual printer Ø Control by /etc/printcap • Enable lpd in Free. BSD Ø Edit rc. conf – lpd_enable=“YES” – lpd_flags=“-l” (log print request)
Computer Center, CS, NCTU 6 BSD Printing System (2) q When we want to print … • Using lpr command Ø Ex: lpr –Php 4350 myfile. doc • Printer selection 1. If there is –P option, use that printer 2. If there is “PRINTER” variable, use that printer 3. Use the default printer defined in /etc/printcap 4. If there is no default printer, use the first entry defined in /etc/printcap
Computer Center, CS, NCTU BSD Printing System (3) q When lpd receives the jobs … • Put the job in spool directory Ø cf file (control file) – Information about the jobs – Ex: cf. A 023 ntserv Ø df file (data file) cf file H 140. 113. 235. 1 Pchwong JEdit 2* ldf. A 023140. 113. 235. 1 Udf. A 023140. 113. 235. 1 NEdit 2* – Actual data that is going to be printed – Ex: df. A 023 ntserv • Send the first queued job to printer Ø lpd creates a series of UNIX pipes between spool and printer to let system invokes filter to modify the job or something else Ø Local or remote printer CF meanings: man lpd 7
Computer Center, CS, NCTU 8 BSD Printing System (4) q What client can do ? • lpr • lpq • lprm to send the job to list the queued jobs to remote the job q What administrator can do ? • lpq, lprm • lpc to change the printing environment
Computer Center, CS, NCTU BSD Printing System lpr command q lpr: submit the jobs • % lpr –Pprinter-name file Ø Ex: % lpr –Php 4350 hwk 2. doc • % lpr –Pprinter-name -#N file Ø Produce N copies of file Ø Ex: % lpr –Php 4350 -#3 hwk 2. doc Ø Ex: % lpr –Php 4350 -#3 hwk 2. c hwk 2. h Makefile Ø Ex: % cat hwk 2. c hwk 2. h Makefile | lpr –Php 4350 -#3 9
Computer Center, CS, NCTU 10 BSD Printing System lpq command q lpq: view the printing queue • % lpq –Pprinter-name Ø If the first record is not “active” , no printing daemon is running on the printer – Using lpc start hp 4050 sabsd [/etc] -chwong. Rank Owner Job active chwong 1 1 st chwong 2 2 nd chwong 3 lpq -Php 4050 Files /etc/printcap /etc/hosts /etc/group Total Size 324 bytes 131 bytes 423 bytes
Computer Center, CS, NCTU BSD Printing System lprm command q lprm: remote print jobs • % lprm –Pprinter-name jobid Ø Remote single printing job with certain id Ø Ex: % lprm –Php 4350 121 • % lprm –Pprinter-name user Ø Remote all jobs owned by user Ø Ex: % lprm –Php 4350 chwong • % lprm –Pprinter-name Ø Remove the active job if the job is owned by user • % lprm –Pprinter-name – Ø Remote jobs you submitted Ø Remote all jobs when root execute it 11
Computer Center, CS, NCTU 12 BSD Printing System lpc command (1) q lpc: make administrative changes sabsd [/etc] -chwong- lpc> ? Commands may be abbreviated. abort bottomq clean enable lpc> exit disable down help Commands are: quit restart status setstatus stop tclean topq up ? xtopq
Computer Center, CS, NCTU BSD Printing System lpc command (2) q lpc commands • help [command] Ø One-line description of that command • enable/disable printer Ø Start or stop spooling • start/stop printer Ø Start of stop printing, the active job will be finished • abort printer Ø Stop printing, the active job will be suspended until start printing again • up/down printer Ø Start or stop “spooling and printing” at the same time • clean printer Ø Remove all jobs, including active jobs, but it will be finished 13
Computer Center, CS, NCTU 14 BSD Printing System lpc command (3) • topq printer [jobid|username] Ø Move the jobs to top of queue • restart printer Ø Restart the printer; restart will fail if the printer still has a filter running • status printer Ø Whether spooling Ø Whether printing Ø Number of jobs in queue Ø Printer status lpc> status hp 4050: queuing is enabled printing is disabled 2 entries in spool area printer idle lpc>
Computer Center, CS, NCTU /etc/printcap file q How, where to process printing jobs • Configuration format Ø Separated by “: ” Ø Three option format – xx=string – xx#number (enable/disable option) (string type option) (numeric type option) hp 6 mp|HP Laser. Jet 6 MP: : sh: : rw: : mx#0: : sd=/var/spool/lpd/hp 6 mp: : lp=/dev/lpt 0: : if=/usr/libexec/lpr/lpf: : lf=/var/spool/lpd/hp 6 mp/log: 15 Printer name Configuration options
Computer Center, CS, NCTU /etc/printcap file printer name q Multiple names separated by “|” • The record has “lp” will be the default printer hp 6 mp|HP Laser. Jet 6 MP: : sh: : rw: : mx#0: : sd=/var/spool/lpd/hp 6 mp: : lp=/dev/lpt 0: : if=/usr/libexec/lpr/lpf: : lf=/var/spool/lpd/hp 6 mp/log: hp 4050|lp|HP Laser. Jet 4100: : sh: : rw: : mx#0: : sd=/var/spool/lpd/hp 4050: : lp=/dev/null: : rm=hp 4050: : if=/usr/libexec/lpr/lpf: : lf=/var/spool/lpd/hp 4050/log: 16
Computer Center, CS, NCTU /etc/printcap file configuration options (1) q sd: spool directory • Where to put the print jobs before sending to printer • Ideal path: under /var/spool/lpd/ • Permission with 755 and owner, group owner with “daemon” Ø Ex: sd=/var/spool/lpd/hp 4050 q lf: error log file • Where to put the error message • Ideal path: under spool directory with name “log” Ø Ex: lf=/var/spool/lpd/hp 4050/log • lpd mind sends error messages to syslog, check both q mx: file size limit • Size of data that can be spooled at one time in block • Ex: mx#5000 (limit of 5000*1024 bytes) • Ex: mx#0 (no limit) 17
Computer Center, CS, NCTU /etc/printcap file configuration options (2) q lp: device name • Local: the device file under /dev • Remote: /dev/null Ø Ex: lp=/dev/lpt 0 Ø Ex: lp=/dev/null q rm: remote machine • Which host to send the print job if this printer is a remote one Ø Ex: rm=csduty q rp: remote printer • Which printer to send if this remote host has several printer Ø Ex: rm=csduty Ø Ex: rp=ps 18
Computer Center, CS, NCTU /etc/printcap file configuration options (3) q if, of: printing filters • shell scripts mostly • Three basic jobs Ø Accept printing job from standard in Ø Transform data Ø Send the result to standard output • Another usage of filters Ø Accounting Ø Access control to “user” level Ø Auditing q af: accounting file • Tell filters where to append the auditing records 19
Computer Center, CS, NCTU 20 Adding a Printer in Free. BSD Local Printer Through parallel port (1) q Hardware Setup • Connect the cable q Software Setup 1. 2. 3. 4. Configure the kernel Set the communication mode Test Set up LPD
Computer Center, CS, NCTU Adding a Printer in Free. BSD Local Printer Through parallel port (2) 1. Configure the kernel • grep boot message first Ø % grep ppc /var/log/dmesg. today sabsd [/etc] -chwong- dmesg | grep ppc 1:
Computer Center, CS, NCTU 22 Adding a Printer in Free. BSD Local Printer Through parallel port (3) • Check whethere is /dev/lpt 0, … – Parallel port : /dev/ppc 0, /dev/ppc 1, … – Printer device file: /dev/lpt 0, /dev/lpt 1, … Ø crw------- 1 root wheel 16, 0 7 28 17: 07 lpt 0 16, 1 7 28 17: 07 lpt 1
Computer Center, CS, NCTU Adding a Printer in Free. BSD Local Printer Through parallel port (4) 2. Set the communication mode • using lptcontrol(8) Ø % lptcontrol –i –d /dev/lpt 0 Ø % lptcontrol –p –d /dev/lpt 0 • (interrupt-driven mode) (polled mode) Ø Put in /etc/rc. local using device hint (/ boot/device. hints) Ø Interrupt driven mode Ø Polled mode – hint. ppc. 0. irq=“ 7” – hint. ppc 0. irq=“” q Communication mode • Interrupt-driven Ø OS use IRQ line to determine when the printer is ready for data • Polled Ø OS will repeatedly ask the printer whether it is ready for data 23
Computer Center, CS, NCTU Adding a Printer in Free. BSD Local Printer Through parallel port (5) 3. Test • Using lptest as root Ø % lptest > /dev/lpt 0 • Using Post. Script program if it understands Ø % cat test-printer > /dev/lpt 0 Content of test-printer file %!PS 100 moveto 300 lineto stroke 310 moveto /Helvetica findfont 12 scalefont setfont (Is thing working? ) showpage 24
Computer Center, CS, NCTU 25 Adding a Printer in Free. BSD Local Printer Through parallel port (6) 4. Setup LPD • Edit the /etc/printcap file Ø Ø Ø Ø Naming the Printer Suppressing Header Making the Spooling Directory Identifying the print device Input filter Turn on lpd Test with lpr (sh) (sd) (lp) (if)
Computer Center, CS, NCTU Adding a Printer in Free. BSD Local Printer Through parallel port (7) • Detail steps Ø % mkdir /var/spool/lpd/hp 6 mp Ø % chown daemon: daemon /var/spool/lpd/hp 6 mp Ø % chmod 770 /var/spool/lpd/hp 6 mp Ø % mkdir /etc/print Ø Edit /etc/print/if-simple Ø % chmod 555 /etc/print/if-simple Ø Edit rc. conf with lpd_enable=“YES” 26
Computer Center, CS, NCTU Adding a Printer in Free. BSD Local Printer Through parallel port (8) q Content of /etc/printcap sabsd [/etc] -chwong- less printcap hp 6 mp|HP Laser. Jet 6 MP: : sh: : sd=/var/spool/lpd/hp 6 mp: : lp=/dev/lpt 0: : if=/etc/print/if-simple: q Content of /etc/print/if-simple #!/bin/sh # # Simply copies stdin to stdout. # Ignores all filter arguments. printf " 33&k 2 G" && cat && printf " 33&l 0 H" && exit 0 exit 2 27
Computer Center, CS, NCTU 28 Adding a Printer in Free. BSD Network printer (1) q Access a printer attached to a remote host q Access a printer attached to a network • Printer understand LPD protocol Ø It can queue and schedule jobs from remote hosts Ø It is like access to a printer attached to a host • Printer supports only data stream network connection Ø We need a host to spool jobs and send them to the printer
Computer Center, CS, NCTU 29 Adding a Printer in Free. BSD Network printer (2) • Remote printer understanding LPD directly attached on the network Ø Set our /etc/printcap with “rm” option Ø Don’t forget to create spooling directory with right access mode hp 4050|lp|HP Laser. Jet 4100: : sh: : rw: : mx#0: : sd=/var/spool/lpd/hp 4050: : lp=/dev/null: : rm=hp 4050: : if=/usr/libexec/lpr/lpf: : lf=/var/spool/lpd/hp 4050/log:
Computer Center, CS, NCTU 30 Adding a Printer in Free. BSD Network printer (3) • Remote printer that support data steam connection only Ø The network interface card of printer is used to let you send data to it just like serial / parallel port Ø Have to develop a communication program called by filter #!/bin/sh # # diablo-if-net - Text filter for Diablo printer `scrivener' listening # on port 5100. Installed in /usr/local/libexec/diablo-if-net # exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100
Computer Center, CS, NCTU Adding a Printer in Free. BSD Network printer (4) #!/usr/bin/perl # # netprint - Text filter for printer attached to network # Installed in /usr/local/libexec/netprint # $#ARGV eq 1 || die "Usage: $0
Computer Center, CS, NCTU Restricting Printer Usage q Multiple Copies • To disable: sc option q Group access • rg option q Control size of jobs • mx option q Remote access • /etc/hosts. lpd hp 4050|lp|HP Laser. Jet 4100: : sh: : rw: : mx#0: : sd=/var/spool/lpd/hp 4050: : sc: : rg=csie: : mx#5000: : lp=/dev/null: : rm=hp 4050: : if=/usr/libexec/lpr/lpf: : lf=/var/spool/lpd/hp 4050/log: Ø Hosts in file are allowed to access the printer 32
Computer Center, CS, NCTU filters q Three kinds • Text filters (input filter) Ø Handle regular text printing Ø /usr/libexec/lpr/lpf • Conversion filter Ø Convert a specific file format into another • Output filter Ø Used if there is no text filter q Return value • exit 0 Ø successfully • exit 1 Ø Failed to print, but want LPD to print the file again • exit 2 Ø Failed to print, and does not want to print the file anymore 33
Computer Center, CS, NCTU filters plaintext on Post. Script Printers (1) q. Postscript printing jobs • Start with %!PS • If this job start with “%!PS”, Ø let it goes to printer directory • Else Ø convert the text into Postscript and print the result q. Using text filter “lprps” • /usr/ports/print/lprps-a 4 34
Computer Center, CS, NCTU 35 filters plaintext on Post. Script Printers (2) sabsd [/etc] -chwong- cat /usr/share/examples/printing/psif #!/bin/sh # # psif - Print Post. Script or plain text on a Post. Script printer # Script version; NOT the version that comes with lprps # Installed in /usr/local/libexec/psif # read first_line first_two_chars=`expr "$first_line" : '(. . )'` if [ "$first_two_chars" = "%!" ]; then # # Post. Script job, print it. # echo "$first_line" && cat && printf " 04" && exit 0 exit 2 else # # Plain text, convert it, then print it. # ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf " 04" && exit 0 exit 2 fi
Computer Center, CS, NCTU filters non-Post. Script printer q Simulating Post. Script on non-Post. Script printer • Using “ghostscript” • Under /usr/ports/print/ghostscript-gnu #!/bin/sh printf " 33&k 2 G" || exit 2 IFS="" read -r first_line first_two_chars=`expr "$first_line" : '(. . )'` if [ "$first_two_chars" = "%!" ]; then /usr/local/bin/gs -d. SAFER -d. NOPAUSE -q -s. DEVICE=lj 5 gray -s. Output. File=- - && exit 0 else echo "$first_line" && cat && printf " 33&l 0 H" && exit 0 fi exit 2 36
Computer Center, CS, NCTU 37 Chinese printing q bg 5 ps • /usr/ports/chinese/pg 5 ps • Transform document into ps using TTF q enscript • /usr/ports/chinese/enscript • Transform document into ps using CID-font