See this page as a slide show
Chapter 26: Printing
Colorado State University
Computer Science Department
Original slides from Dr. James Walden at Northern Kentucky University.
- Printer Languages
- Printing Systems
- CUPS Printing
- System V Printing
- BSD Printing
- Printer Practicalities
- PostScript (.ps): Most common page description
language on Unix and Linux systems, from Adobe.
- PDF (.pdf): Portable document format from Adobe, not a
page description language, usually translated.
- PCL (.pcl): Printer control language from Hewlett-Packard,
binary format for laser and inkjet printers.
- XHTML (.xhtml): Markup language for printing based
on XML specification.
- XPS (.xps): XML Paper Specification from Microsoft, not
currently very widely used.
- PJL (.pjl): Printer Job Language from HP uses metalanguage to describe
PostScript is a Page Description Language (PDL) that was
invented around the same time as the laser printer.
- Now is the most common PDL on Unix and Linux systems,
and many printers can directly interpret.
- Developed by Adobe Systems, but evolved from InterPress,
a Xerox proprietary language.
- You can read most PostScript programs with a text editor,
not a binary format.
- Interpreted by a PostScript-specificRaster Image Processor
(RIP) that produces a bitmap.
Portable Document Format (PDF) from Adobe systems
was designed for the interchange of documents.
- Currently dominates this market, almost every other tool
export to PDF (Microsoft Word, PowerPoint, etc.)
- Not a page description language, but many convertors
exist between PDF and PS or PCL.
- Adobe Acrobat provides a downloadable reader
and proprietary tools for generating PDF content:
- Adobe Reader 9 (2010), Adobe Reader X (2012)
- PDF 1.7 (2008), PDF 2.0 (2011)
Printer Command Language (PCL) was invented by
Hewlett-Packard for its laser and inkjet printers.
- PCL is a page description language that tells printers how to print pages.
- PCL jobs are binary, not human readable, so must be manipulated by tools.
- HP has a PCL dialect with custom commands that take
advantage of specific printer features:
- PCL6: Drawing tools, color handling, paper handling,
font loading, compresion etc.
Extensible HyperText Markup Language (XHTML) is
recommended by the World Wide Web consortium.
- Cleaner version of HTML, based on well-formed XML
specification that can be parsed in a standard fashion.
- XHTML-Print provides a data stream, e.g., from a Web page
to be rendered on low end printers.
- Example: you can browse the web and print a
web page from a Bluetooth printer
- Mostly used by content management systems
based on web pages.
- Major printing systems: CUPS, BSD, System V are
the historical systems used on Unix and Linux.
- Based on a print spooler or queuing system for
scheduling print jobs.
- Requires user-level utilities based on CLI or GUI that
allows the user to queue, cancel, or query jobs.
- Back end drivers and software to communicate with
the actual printing devices (local or network).
- Network protocols that allow print spoolers to
communicate and transfer jobs.
- ommon nix rinting ystem (CUPS) is a
standards-based open source printing system.
- Original developed by Apple for OS X and other
- A CUPS server is a spooler that maintains print
queues for clients, with a client-server architecture.
- The client can use either command line interfaces
lpq) or a graphical interface (kprinter).
- Also supports a web interface to configure and
administer printer jobs.
- Client transmits copies of the files to the CUPS
server, which reads them and stores them in a queue.
- The CUPS server then will process each file as the
printer becomes available.
- The CUPS server examines both the printer’s
postscript capabilities and the document to make
sure it prints properly on the device.
- Preparation for a job requires the CUPS to pass it
through a pipeline of filters which perform a variety of functions.
- Reformat if necessary
- Transfer a job from one PDL to another
- Printer initialization
- Then the document finally gets passed to the last
stage which is the pipeline that sends the job from
the host via the appropriate protocol, e.g. USB port.
- Commands allow the user to queue, suspend, cancel,
or send jobs from one queue to another.
lpr: asks the CUPS server to queue a print job
lpr -P laser01 myfile.ps
lpq: requests job status from the CUPS server
lpq -P laser01
lpstat: summary of CUPS server
lprm: remove a print job from the CUPS server
CUPS Web Interface
- CUPS will manage multiple queues for multiple printers.
- A simple
-p option will specify which printer queue to use.
- You may also set a default printer in two different ways:
- PRINTER environment variable
- Telling CUPS via a command
- These allow you to set several instances for
different printing types, like a draft print, or a normal print.
lpoptions -p laser02/2up -o number-up=2
- Creates instance
laser02 that performs 2-up printing
- All CUPS daemons communicate with each other,
which makes it easy with multiple computers.
- To configure CUPS daemon to accept print jobs
edit the file
- To allow two printers on two different subnets to
communicate, edit the file to set up a slave server.
- The configuration file will also allow you to set
up multiple queues for one printer.
- The underlying protocol for CUPS is HTTP that uses port 631
- CUPS servers are web servers, clients can be GUI
or CLI or a web interface
- Uses Internet Printing Protocol (IPP) based on
simple GET and POST commands.
- Responsibilities of a CUPS server administrator:
- Install printers
- Route network Printers
- Setup authorization
- Editing configuration files
- Specifying paper size
- Printer maintenance!
- Linux system components of a CUPS server
cupsd — daemon process that manage print jobs
/etc/cups/cupsd.conf — configuration file
- Used on Unix, Linux, and Mac operating systems
- Any printer that can be networked
- Any server that can act as a CUPS server
- Handy browser interface for easy maintenance
- Centralized system for printing and management
- Efficient for large printers
- Printer-specific Information
- Can print multiple printer file formats
- pdf, dvi, gif, jpeg, tiff, and more
- What you need: Printer, Server, Client
- Connect server to network via config files
- Use the web interface to configure the rest
- It’s in a package:
# apt-get install cups
- You’d be crazy to configure CUPS on every computer at your site.
- Instead, have one central print server, that is running
- On all other machines, just configure
$ cat /etc/cups/client.conf
- Nemeth, E, Snyder, G, & Hein, T (2011) Unix and
Linux Administration Handbook Fourth Edition,
- Wikipedia: CUPS Common Unix Printing System
retrieved Sep. 2012 from https://en.wikipedia.org/wiki/CUPS
- Common UNIX Printing System. Open source
project page retrieved on Sep. 2012 from http://www.cups.org/
- If you change the
cupsd.conf file, be sure to restart the daemon
- Page log: list of pages printed
- Access log: requests processed by server
- Error log: printer or server errors
- All typically kept under
|Problem||Where to look|
|Name resolution, permissions||System log files on sending machine|
|Permissions||System log files on print server|
|Missing filters, unknown printers, missing dirs, etc.||CUPS log files on sending machine|
|Messages about bad device names, bad formats, etc.||CUPS log files on print server|
System V Printing
|accept||/usr/sbin||make queue accept printing jobs|
|cancel||/bin||remove print job from queue|
|disable||/bin||disable printing jobs from a queue|
|enable||/bin||enable printing jobs from a queue|
|lp||/bin||queues jobs for printing|
|lpadmin||/usr/sbin||configure the printing system|
|lpmove||/usr/sbin||move printing jobs between queues|
|lpsched||/usr/lib||schedules and prints jobs|
|lpshut||/usr/sbin||stops printing services|
|lpstat||/bin||reports status of printing services|
|reject||/usr/sbin||make queue reject printing jobs|
|lpc||/usr/sbin||controls a printer or queue|
|lpd||/usr/sbin||schedules and prints jobs|
|lpq||/usr/bin||show print queue and status|
|lpr||/usr/bin||queues jobs for printing|
|lprm||/usr/bin||cancels a queued print job|
|lptest||/usr/bin||prints a test page|
- Printer selection
- Supported well by Linux?
- PS, non-PS?
- GDI (Graphics Device Interface) printers
- Supported better by Windows
Printer Practicalities (cont.)
- Serial or parallel?
- Network printers
- Network interfaces
- Better for large networks
Printer Practicalities (cont.)
- Turn off banner pages
- User print previewers
- Printers are cheap, ink/toner are not
- Monitor cost/page
Printer Practicalities (cont.)
- What’s it going to cost me?
- Depends on the size of the printer
- Larger, more efficient
- Smaller, more costly
- Printers cost $200–$10000
- Total cost of ownership greatly exceeds the
original purchase price
- Maintenance costs are high if you have to call a
- Laser printers are generally more cost effective
per page of printing