Библиотека сайта rus-linux.net
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26. Printing
@sf{Debian}: `magicfilter'
The usual way to print on a Linux system is to send a print job to the printer with
lpr
, as described below in Sending a Print Job to the Printer.
But you don't always send a file straight to the printer--sometimes you may want to add special things to it before you print it, such as headers or graphic trim. For example, you might want to split a text file into pages and add a header to the top of each page containing the file name and page number; all of this is described in Formatting Text.
Sometimes you may need to convert or otherwise prepare a file so that it can be printed on your particular printer, since not all print hardware can print the same kinds of file formats. Recipes in this chapter show how to do this, such as how to convert PostScript files so that they will print properly on a non-PostScript printer (see section Preparing Files for Printing).
This chapter also shows how to format PostScript files for printing. To convert plain text to PostScript and enhance it for printing, by adding fonts, graphic headers, and the like, see Converting Plain Text for Output.
And this chapter isn't in the files section, because you can print
things that aren't in a file--for example, you can pipe the output of
another tool or series of tools to lpr
, and it will spool that
command output to the printer. This usage is actually very common.
NOTE: When a printer is properly configured on Linux, it is a pleasure to use, but a misconfigured printer can lead to all kinds of trouble--including the dreaded "staircase effect," where a text file prints with each subsequent line of output offset to the right by the length of the previous line.
If print services haven't been configured yet on your system, I strongly
recommend that the `magicfilter'
package be installed; it includes
filters for the automatic detection of file types--when you print a
file, it automatically converts it to the proper format for your
printer.
Comprehensive details on the setup of printer resources can be found in both the Printing HOWTO and the Printing Usage HOWTO (see section Reading System Documentation and Help Files).
26.1 Making and Managing Print Jobs Sending a job to the printer. 26.2 More Recipes for Printing Print services in some applications. 26.3 Preparing Files for Printing Converting files for your printer.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.1 Making and Managing Print Jobs
The traditional way to print on Linux-based systems is to send a print job for the file or data you want to print to the spool queue for the printer in question. The spool queue contains all of the print jobs sent to it by all users; these jobs are released in turn to the printer device as it becomes available. In this way, Linux can handle multiple print jobs going to the same printer at once.
The following recipes show how to make and manage print jobs. In practice, you will probably send print jobs all the time--since this is the way most printing is done in Linux--and use the tools for listing or cancelling print jobs rarely. But sometimes things do go wrong, and it helps to know what to do when that happens.
26.1.1 Sending a Print Job to the Printer Sending a print job. 26.1.2 Printing Multiple Copies of a Job Printing more than one copy. 26.1.3 Listing Your Print Jobs Listing your print jobs. 26.1.4 Cancelling a Print Job Cancelling a print job.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.1.1 Sending a Print Job to the Printer
Use lpr
to send a print job to the printer--give the name of the
file to print as an argument. (You can also pipe the output of a command
to lpr
.)
lpr
writes a copy of the specified file or text to the spool
queue of the specified printer, to be sent to the printer when the
printer becomes available.
-
To print the file
`invoice'
, type:$ lpr invoice RET
-
To type a message with
banner
and send it to the printer, type:$ banner "Bon voyage!" | lpr RET
-
To print a verbose, recursive listing of the
`/usr/doc/HOWTO'
directory, type:$ ls -lR /usr/doc/HOWTO | lpr RET
If you have more than one printer connected to your system, specify the
printer to send to as an argument to the `-P' option. (Printers
have names just as user accounts and hosts do, and it is the
administrator's privilege to name them; the default printer is usually
called lp
, for "line printer.")
-
To send the file
`nightly-report'
to the printer calledbossomatic
, type:$ lpr -P bossomatic nightly-report RET
NOTE: The name of the lpr
tool comes from "line
printer," which was the kind of printer hardware in popular use back
when this program was first developed.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.1.2 Printing Multiple Copies of a Job
To print more than one copy of a print job, give the number of copies to
print as an argument to the `-#' option of lpr
.
-
To print a dozen copies of the file
`nightly-report'
, type:$ lpr -#12 nightly-report RET
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.1.3 Listing Your Print Jobs
To list your print jobs, use lpq
, the "line printer queue"
tool. It outputs a list of all print jobs currently in the default
printer's spool queue--each on a line of its own--giving its rank in
the queue, the username who sent the job, the print job number, the file
names in the job, and the size of the data to be printed, in bytes.
-
To view the spool queue for the default printer, type:
$ lpq RET lp is ready and printing Rank Owner Job Files Total Size active groucho 83 cigar.ps 1739030 bytes 1st harpo 84 harp.ps 499 bytes 2nd chico 85 love.ps 45576 bytes $
In this example, there are three jobs queued for the default
printer--one by user groucho
, for the file `cigar.ps'
, one
by user harpo
, for the file `harp.ps'
, and one by user
chico
, who has printed a file called `love.ps'
.
The job by user groucho
is the active job; this is the job
that is currently printing on the printer. The other jobs must wait
until this file is finished printing, and then they print in rank order.
As with lpr
, you can specify the name of a printer as an argument
to the `-P' option.
-
To view the spool queue for the printer called
bossomatic
, type:$ lpq -P bossomatic RET
To only list the jobs for a particular user, give the name of the user as an argument.
-
To list the print jobs for user
harpo
, type:$ lpq harpo RET
NOTE: When there are no print jobs, lpq
outputs the text
`no entries'.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.1.4 Cancelling a Print Job
To cancel a print job and remove it from the spool queue, use
lprm
, the "line printer remove" tool. Give as an argument the
number of the print job to remove.
-
To cancel print job 83, type:
$ lprm 83 RET
To cancel all of your print jobs in the spool queue, use a hyphen instead of the number of a print job.
-
To cancel all of your print jobs, type:
$ lprm - RET
NOTE: If you try to cancel an active job--one that has already been spooled to the printer--don't be alarmed if some pages still print; the printer probably has some of the job in its internal print buffer. To stop the printing in a case like this, take the printer offline, reset it, and then put it back online again (usually, the printer will have buttons for these commands on its front control panel).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.2 More Recipes for Printing
Another way of printing besides making a print job is to print from within an application.
Not all applications have print controls, but some of them
do--including Emacs and LyX (see section LyX Document Processing). Their print commands essentially send the print job to the
printer via lpr
, after possibly formatting or otherwise preparing
the data to print. If you are working in such an application and want to
print your work, using the built-in print control can be easier than
having to go to a shell to run lpr
.
For example, to print the current document in the LyX document
processing application, choose Print
from the File
menu;
it creates the proper output for your printer and makes a print job
containing this output (see section LyX Document Processing).
Some tools, such as dvips
and enscript
(see section Converting Plain Text for Output), are also configured to spool output
to the printer.
You can view these print jobs in the spool queue and you can cancel them, just as you could any print job.
26.2.1 Printing in Emacs 26.2.2 Printing with Dvips Printing with dvips. 26.2.3 Printing the Contents of an Xterm Window Printing an xterm window.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.2.1 Printing in Emacs
To print the current buffer in Emacs, choose Print Buffer
from
the Print
submenu, found off the Tools
menu on the menu
bar. Another option on the print submenu is Print Region
, which
just prints the text between point and the mark (see section Getting Acquainted with Emacs). Both commands print the hardcopy output
separated into pages, and with headers at the top of each page, showing
the file name and current page number.
To generate and print a PostScript image of the buffer, use the
ps-print-buffer
function, which is also available on the
Print
submenu. A related function, ps-print-region
,
prints a PostScript image of the region. These commands are useful for
sending the text of a buffer to a PostScript printer.
You can also run any of these functions by specifying them with the
M-x command; additionally, the lpr-buffer
and
lpr-region
functions send the buffer and region to lpr
without paginating the text or inserting headers.
-
To print the current buffer with page numbers and headers, type:
M-x print-buffer RET
-
To print the current buffer with no additional print formatting done to
the text, type:
M-x lpr-buffer RET
-
To print a PostScript image of the current buffer, type:
M-x ps-print-buffer RET
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.2.2 Printing with Dvips
You can print a DVI file directly with the dvips
tool--omit the
`-o' option that is used to specify an output file, and it will
send the PostScript output directly to the spool queue of the default
printer.
-
To print the DVI file
`list.dvi'
, type:$ dvips list.dvi RET
The following table lists some of dvips
's various options for
controlling print output.
OPTION | DESCRIPTION |
-A |
Print only odd-numbered pages (DVI file must have been generated by TeX). |
-B |
Print only even-numbered pages (DVI file must have been generated by TeX). |
-b copies |
Specify the number of copies to print--useful for printing multiple copies of flyers, posters, signs, and the like. |
-k |
Print crop marks. |
-l last |
Specify the last page number to print. |
-m |
Use the manual feed tray. |
-p first |
Specify the first page to begin printing from. |
-r |
Reverse the order of the pages. |
-t format |
Specify paper size and format; valid options include `letter', `legal', `a4', and `landscape'. (You can use this option twice, say to specify both `legal' and `landscape'). |
Using the `-m'
option and specifying landscape as the paper format
with the `-t' option is very useful for printing on envelopes.
-
To print the file
`envelope.dvi'
on an envelope loaded in the manual feed tray of the default printer, type:$ dvips -m -t landscape envelope.dvi RET
NOTE: You can also print DVI files with lpr
using the
`-d' option.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.2.3 Printing the Contents of an Xterm Window
To print the contents of an xterm
window, press and hold
CTRL and left-click anywhere inside the window, and choose the
Print Window
option. This command will send a copy of all the
text in the current window to the default printer.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.3 Preparing Files for Printing
Not all printers recognize all output formats, so it's sometimes necessary to convert files before you print them.
Normally, you can print plain text on any printer. However, most graphics or image files must be converted to PostScript or EPS ("Encapsulated PostScript"). Some applications--such as TeX---produce DVI output; in this case, you convert that to PostScript for printing.
If you have a PostScript printer, you can print PostScript files
directly to it. If not, you'll need to convert the PostScript output to
a format your printer uses. Filter programs like `magicfilter'
make
the conversion easier by doing this work for you, but they're not a
panacea, since your system may use one of a great many filters. Hence,
the need for the following recipes.
26.3.1 Preparing a PostScript File for Printing Preparing PostScript for printing. 26.3.2 Preparing a DVI File for Printing Preparing DVI for printing. 26.3.3 Preparing a PDF File for Printing Preparing PDF for printing. 26.3.4 Preparing a Man Page for Printing Preparing man pages for printing.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.3.1 Preparing a PostScript File for Printing
@sf{Debian}: `gs'
@sf{WWW}: ftp://www.gnu.org/pub/gnu/ghostscript/
If you don't have a PostScript printer, you can use Ghostscript,
gs
, to convert PostScript to an output format that your printer
understands.
Use the `-?' option to list the printers that the version of
gs
installed on your system can write output for.
-
To list the available printer formats, type:
$ gs -? RET GNU Ghostscript 5.10 (1998-12-17) ...more output messages... Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PDF Available devices: x11 x11alpha x11cmyk x11gray2 x11mono lvga256 vgalib t4693d8 tek4696 appledmp ccr lp2563 lbp8 lips3 m8510 oki182 okiibm la50 la70 la75 la75plus sxlcrt deskjet djet500 laserjet ljetplus ljet2p ljet3 ljet4 declj250 cdeskjet cdjcolor cdjmono cdj550 cdj500 djet500c hpdj uniprint epson eps9mid eps9high epsonc lq850 ap3250 ibmpro bj10e bj200 bjc600 bjc800 ljet3d faxg3 faxg32d faxg4 dfaxhigh dfaxlow pcxmono pcxgray pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw tiffcrle tiffg3 tiffg32d tiffg4 psmono psgray jpeg ...more output messages... $
A typical gs
installation can write to more than 100 different
print devices, including HP LaserJet 4 printers (`ljet4'), HP Color
DeskJets (`cdeskjet'), and Group 4 fax (`tiffg4'). Newer
versions of gs
will have better support for newer printers, so
make sure that you have a recent version installed if you have a new
model printer.
gs
takes the file to convert as an argument; give the device to
write output for as an argument to the `-sDEVICE=' option, and give
the name of the file to write to as an argument to the
`-sOutputFile=' option.
Two additional options are commonly used: `-dSAFER', which prevents the accidental deleting or overwriting of files, and `-dNOPAUSE', which turns off the pause between pages.
When the conversion is complete, you will be at the gs
prompt;
type quit to exit.
-
To convert the file
`tiger.ps'
to a format suitable for printing on an HP Color DeskJet 500 printer, type:$ gs -sDEVICE=cdj500 -sOutputFile=tiger.dj -dSAFER -dNOPAUSE tiger.ps < /dev/null RET
This command writes the output to a file, `tiger.dj'
, which you can
spool as a print job with lpr
to print.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.3.2 Preparing a DVI File for Printing
@sf{Debian}: `tetex-bin'
@sf{WWW}: http://www.radicaleye.com/dvips/
To convert a file from DVI format to PostScript, use
dvips
. It
takes the file to convert as an argument; give the name of the
PostScript file to write to as an argument to the `-o' option.
-
To convert the file
`abstract.dvi'
to PostScript, type:$ dvips -o abstract.ps abstract.dvi RET
This command reads the DVI file `abstract.dvi'
and writes a
PostScript version of it to the file `abstract.ps'
; the original
file is not altered.
To write only certain pages of a DVI file to the PostScript output, give the page or pages as arguments to the `-pp' option.
-
To output only pages 14 and 36 from file
`abstract.dvi'
to a PostScript file,`abstract.ps'
, type:$ dvips -pp14,36 -o abstract.ps abstract.dvi RET
-
To output pages 2 through 100 from file
`abstract.dvi'
to a PostScript file,`abstract.ps'
, type:$ dvips -pp2-100 -o abstract.ps abstract.dvi RET
-
To output page 1 and pages 5 through 20 from file
`abstract.dvi'
to a PostScript file,`abstract.ps'
, type:$ dvips -pp1,5-20 -o abstract.ps abstract.dvi RET
To specify an output paper size, give it as an argument to the `-t' option; if you have a PostScript printer, you can also send the output directly to the printer (see section Printing with Dvips).
-
To output the file
`abstract.dvi'
as a PostScript file,`abstract.ps'
, with a paper size of `legal', type:$ dvips -t legal -o abstract.ps abstract.dvi RET
-
To print the file
`abstract.dvi'
to the default printer in landscape mode, type:$ dvips -t landscape abstract.dvi RET
NOTE: This conversion is not only useful for print preparation. Once the DVI file is converted to PostScript, you can then convert the PostScript to other formats, such as plain text or PDF--see Converting PostScript.
Use the `-P' option with dvips
to specify the printer name
to write output to--use this option to make output for non-PostScript
printers. For example, to convert TeX and LaTeX files to PDF, use
dvips
and give `pdf' as an argument to the `-P' option.
-
To generate a PDF file from the DVI file
`abstract.dvi'
, type:$ dvips -Ppdf -o abstract.pdf abstract.dvi RET
This command writes a new file, `abstract.pdf'
, in PDF format.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.3.3 Preparing a PDF File for Printing
@sf{Debian}:`xpdf'
@sf{Debian}:`gs'
@sf{WWW}: http://www.aimnet.com/~derekn/xpdf/ @sf{WWW}: http://www.cs.wisc.edu/~ghost/
There are at least two ways to convert and print a file that's in Adobe's Portable Document Format (PDF), usually marked with a
`.pdf'
file name extension.
The first way is to view the file in xpdf
(the PDF file viewer),
and then left-click the printer icon. This won't actually send the file
to the printer, but it writes a PostScript file in the same directory,
with the same base file name as the PDF file but with a `.ps'
extension. You can then print this file with lpr
or convert it to
another format (see section Preparing a PostScript File for Printing).
The second way is to use pdf2ps
, part of the `gs'
package,
to convert the PDF file to PostScript (then print the PostScript output
as described for xpdf
above). pdf2ps
takes two arguments:
the name of the PDF file to convert, and the name of the PostScript file
to write to.
-
To convert the PDF file
`pricelist.pdf'
, type:$ pdf2ps pricelist.pdf pricelist.ps RET
This command writes a PostScript file `pricelist.ps'
in the current
directory.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
26.3.4 Preparing a Man Page for Printing
To convert a man
page to output that is suitable for printing,
use the `-t' to output PostScript, and either pipe the output to
lpr
(if you have a PostScript printer), or save it to a file that
you can then convert for your printer.
-
To output the
man
page forpsbook
as PostScript and send it as a print job to the default printer, type:$ man -t psbook | lpr RET
-
To output the
man
page forpsbook
to the file`psbook.ps'
, type:$ man -t psbook > psbook.ps RET
In the preceding example, you can then use gs
to convert the file
to a format your non-PostScript printer understands (see section Preparing a PostScript File for Printing).
NOTE: A manual "page" can actually contain more than one physical page; the output will have as many pages as necessary to print it.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |