printing in linux with cups

23
PRINTING IN LINUX WITH CUPS By Robert Spotswood General Printing Tips Understand your printing needs. If you will print mostly text, a laser will give much better quality and cost per page. If you need low volume color, you'll want an inkjet. If you want high volume color, good luck! Always check the compatibility lists! Don't buy a printer until you know your OS(s) is(are) supported. If in doubt, make sure the cable is IEEE 1284. Some old printers don't need this cable, but most (all?) new printers require this type of cable. Using a non-IEEE 1284 cable could void your warranty. If using a parallel port on a computer, set your bios correctly. The choices on a modern bios are SPP, ECP, EPP, ECP+EPP. SPP is the poorest choice. ECP is the best choice for printers and scanners. EPP works best for things like parallel port drives. ECP+EPP is a compromise between ECP and EPP. Don't select this unless you have multiple parallel port devices that would use both ECP and EPP. Also in the bios, if you have the option, "EPP Mode Select", pick "EPP 1.9". Note that with an IEEE 1284 cable and this setting, cable lengths as long as 50 meters have been used successfully. You get what you pay for. From the printing howto: "The least expensive printers, for example, have a MTBF [Mean Time Between Failures] of about three months". If you buy supplies and equipment online, try to use the affiliate program for the linuxprinting organization. This helps to support them and other free printing software.

Upload: muqthiyar-pasha

Post on 14-Jun-2015

187 views

Category:

Software


7 download

DESCRIPTION

Printing in Linux

TRANSCRIPT

Page 1: Printing in linux with cups

PRINTING IN LINUX WITH CUPSBy Robert Spotswood

General Printing Tips Understand your printing needs. If you will print mostly text, a laser will give

much better quality and cost per page. If you need low volume color, you'll want an inkjet. If you want high volume color, good luck!

Always check the compatibility lists! Don't buy a printer until you know your OS(s) is(are) supported.

If in doubt, make sure the cable is IEEE 1284. Some old printers don't need this cable, but most (all?) new printers require this type of cable. Using a non-IEEE 1284 cable could void your warranty.

If using a parallel port on a computer, set your bios correctly. The choices on a modern bios are SPP, ECP, EPP, ECP+EPP. SPP is the poorest choice. ECP is the best choice for printers and scanners. EPP works best for things like parallel port drives. ECP+EPP is a compromise between ECP and EPP. Don't select this unless you have multiple parallel port devices that would use both ECP and EPP.

Also in the bios, if you have the option, "EPP Mode Select", pick "EPP 1.9". Note that with an IEEE 1284 cable and this setting, cable lengths as long as 50 meters have been used successfully.

You get what you pay for. From the printing howto: "The least expensive printers, for example, have a MTBF [Mean Time Between Failures] of about three months".

If you buy supplies and equipment online, try to use the affiliate program for the linuxprinting organization. This helps to support them and other free printing software.

Printing in Linux Introduction Setting up printing under Linux isn't fun or easy, especially for newbies. One LinuxJournal article estimates that printing problems take up about 25% of a

system administrator's time. Some distros (Redhat for instance) come with semi-automatic printer

configurators. Unfortunately, these are unreliable and cover only a limited number of printers. Printing other than straight text (<sarcasm>Who would want to print graphics

anyway!?</sarcasm>) has always been something of an afterthought. It shows!

Page 2: Printing in linux with cups

Why choose CUPS?

Printing Programs

The four main printing programs in Linux today are:

lpr (note this is also called lpd; here I use the terms interchangeably) lprng pdq cups

Note a few programs have their own printing system, such as StarOffice, and WordPerfect. They tend to be inferior in that the number of printer drivers available is often vary limited.

lpr

Sometimes referred to as BSD-style print queue or lpd. Runs as root. The fewer root programs you run, the safer your system is. Listens on all interfaces (including your internet interface). You cannot turn this

off. Therefore, this is another security risk. Really only does text or postscript on its own. It can be coupled with Ghostscript to do graphics and support more printers. Setting this up can be maddening, but it works ok (sans security) once it is setup. lpr is the least common denominator of standards-based network printing. lpr is widely supported. From the Linux printing howto: "...recommend that people install and use CUPS

or PDQ in most cases instead of (or in addition to) lpd."

lprng

Designed to be an improvement on lpr. LPRng is far easier to administer for large installations than lpr. It supports authentication via PGP or Kerberos. LPRng uses more or less the same basic filter model as lpr. This means lpr print

filters will work with lprng too.

Page 3: Printing in linux with cups

The Linux printing howto does not recommend it. As one user put it:

...LPRng, which is in my view an encoded acronym for "You Don't Need a printer." The BSD print arrangement could be understood with sufficient study, but with LPRng you're better off on a North Carolina beach with a metal detector, looking for treasure. Where configuring the BSD-style stuff would impart neurosis, LPRng can get you a new garment, one whose arms buckle in the back...I set about making LPRng work with my LaserJet III-D with PostScript cartridge. Two hours later, it was time to consider other options.

pdq

Wasn't able to get to the home page for this project, so I can't offer much info. (What I have is all second hand.)

It is one of the two printing systems recommended by the printing howto. PDQ is perhaps the easiest to understand and use of the four printing systems, but

it is not as powerful as CUPS. No info on security was available for this presentation. Samba (at least 2.08) does not seem to support pdq.

CUPS

Cups is recommended by the printing howto. It supports a new internet standard: the Internet Printing Protocol (IPP). IPP has been embraced by dozens of printer and printer server manufacturers and

is supported by Microsoft Windows 2000. IPP, and hence CUPS, supports access control, authentication, and encryption. Since IPP runs over http, and CUPS supports IPP, users can check status

information on a printer, manage their printers, and manage their jobs using their web browser.

Has several GUI's for configuring, or you can use a web browser. Samba supports CUPS. KDE 2.2 includes direct cups support. Of course, you can still use cups with KDE

2.1. Can be configured to run on specific interfaces and specific ports. The cups-drivers package contains drivers for roughly 1220 printers. This doesn't

include printers that are compatible (i.e. There is no hp lj2100 driver, but this printer can use the hp lj6p drivers which are present.)

Has command line replacements for the lpr commands, but they support more options.

Page 4: Printing in linux with cups

Cups is supported by: Caldera, Conectiva*, Debian, easyLinux*, HP-UX, IRIX, Linux Mandrake*, Peanut*, Red Hat, Solaris, SuSE, Tru64, UNIX, TurboLinux, and AIX. The ones with a * use cups as the primary printing system.

Installing CUPS

RPM installs

Get the rpms. If they are not included in your distribution, you can get them from http://www.cups.org/software.html.

The latest version as of 07/06/01 is 1.1.9. There are two rpms: cups and cups-devel. The cups-devel is optional. Some rpm versions also include a third and fourth rpm: libcups1 and libcups1-devel.

The latest version of the cups-drivers can be found at http://www.rpmfind.net/Linux/rpm2html/search.php?query=cups-drivers. The latest version is 1.0-31. Note this does require ghostscript.

SSL support requires the SSL libraries of course. Warning: cups will overwrite your old printing system, especially lpr. Backup

anything you want to save! Remove the old lpr "rpm -e lpr". Install cups: "rpm -Uvh cups-1.1.8-Linux-2.4-

intel.rpm" to install the rpm(s). Note if you have a problems installing cups, trying downloading a src rpm and compiling your own version (rpm --rebuild --target="i386" rpm-source-name).

Whichever way you install CUPS, don't forget to start it. This will vary depending on your system, but the command "/usr/sbin/cupsd" will usually work. Also, don't forget to put it in your startup files so when the occasion comes to reboot your machine, printing will still work.

Tarball installs

Get the tarball. If they are not included in your distribution, you can get them from http://www.cups.org/software.html.

SSL support requires the SSL libraries of course. cups-drivers tarball can be found at http://sourceforge.net/projects/cups/. The

latest version is 0.3.6. I believe this requires ghostscript.

Page 5: Printing in linux with cups

Installing a New Printer via your web browser

Go to http://127.0.0.1:631/printers

Note:

You can change the port cups listens on but this is not recommended. If cups is listening there, you can also use a different IP address. If localhost resolves to 127.0.0.1 (as it should), you can use localhost instead of

127.0.0.1 .

Page 6: Printing in linux with cups

Click on the add printer button

Enter root and root's password.

First page of the Add printer "wizard"

Now enter a name, location, and description. The location and description are optional but recommended. Here, you can see I entered myprinter, next to the computer, and optra E312.

Enter whatever is appropriate for your printer.

Page 7: Printing in linux with cups

Second page of the Add printer "wizard"

Select the device the printer is attached to. In my case, it is my parallel port #1 (Ignore the Epson part).

The various options are: Appsocket/HP JetDirect; Internet Printing Protocol (another cups printer, or perhaps a Windows 2000 shared printer); LPD/LPR Host or printer; parallel ports (there is a listing for each one); serial ports (there is a listing for each one); or Unknown Network Device (SMB).

Note for all attachments except parallel there is an extra step. This is discussed shortly.

Page 8: Printing in linux with cups

Third page of the Add printer "wizard"

Select the manufacturer of your printer (or compatible printer driver). In my case, the Optra E312 is made by Lexmark.

The printer drivers mentioned above have 40 different manufacturers.

Page 9: Printing in linux with cups

Fourth page of the Add printer "wizard"

Select the model/driver of/for your printer (or compatible printer driver). In my case, it is the Optra E312

Page 10: Printing in linux with cups

Fifth (and last) page of the Add printer "wizard"

If everything went well, this is what you'll see.

Page 11: Printing in linux with cups

The New Printer is added!

Page 12: Printing in linux with cups

Special Ports

For ports other than parallel, an extra page comes between the second and third page. An example is below.

To print to an lpd printer server, enter "lpd://hostname/queue" . You must know the hostname and the queue name. These are the names of the printer server, not your machine.

For things like an HP JetDirect (assuming you aren't using it's lpr support), enter "socket://hostname". Note at least some versions of the HP JetDirect firmware do not correctly implement IPP.

For print servers than support IPP, you can use either "http://hostname:631/ipp/printername: or "ipp://hostname/ipp/printername". I haven't used this method myself yet.

For serial ports, set the settings to the correct value. The command "lpinfo -v" should at least tell you the baud rate.

To print to a SMB server (such as windows), be sure to read the Samba and cups section first! There are several ways to specify a SMB server. See the table below.

Username and password Not required

Username and password required

This smb://server/sharename smb://username:password@server/

Page 13: Printing in linux with cups

machine is in the same workgroup

sharename

This machine is in a different workgroup

smb://workgroup/server/sharename

smb://username:password@workgroup/server/sharename

The page for everything except parallel ports and serial ports:

Page 14: Printing in linux with cups

Here is the page for serial ports:

The cupsd.conf file Like most servers in Unix, much of cups can be configured/controlled through the

cupsd.conf file. Usually, this will be found in /etc/cups. There are six different configuration files for cups. cupsd.conf is the only one you

would normally edit by hand. cupsd.conf has 69 different directives. We will only cover a few of them. See the

official documentation for cups for information on the rest.

Portwalling

By default, cups will listen on every interface. Unless you want to offer your printer to the world, you must block this. Although you can firewall this (and that

Page 15: Printing in linux with cups

is a good idea anyway), you can also not have cups listen on your internet connection. This also prevents any possibility of a root exploit from the internet. Of course, you still have internal crackers to worry about...

In cups.conf, comment out the lines:Port 80Port 631

Replace them with:Listen 127.0.0.1:631Listen lan_ip_address:631Listen 127.0.0.1:80Listen lan_ip_address:80

Still leaves a UDP port 631 open to the world though. The simplest way to close this port is by turning browsing off, but it may cause problems if you have other cups servers (and maybe clients?). The line for this is:Browsing off

Another way to limit access to UDP on port 631, but less secure, is to add the following lines:BrowseAddress lan_ip_broadcast_addressBrowseAddress 127.0.0.1BrowseAllow from 127.0.0.1BrowseAllow from lan_ip_subnet (i.e. 192.168.1.0/24)BrowseOrder deny,allow

Cups and Samba Starting with Samba version 2.06, cups is supported. If you are going to print to SMB servers, or allow clients to send print jobs to your

cups server using the SMB protocol, you must install and configure Samba. To configure Samba for CUPS (windows users can print to your cups server), edit

the smb.conf file and replace the existing printing commands and options with the line:printing = cups

Versions of Samba older than 2.06 and broken versions of Samba (2.06 and 2.07 have been reported) require the following lines in your smb.conf file:printing = sysvprintcap name = lpstatprint command = lp -d %p -o raw %s; rm -f %s

You will also need to add a [printer] section to your smb.conf file. (Otherwise, you are sharing any printers!) Here is a sample one I use:

# NOTE: If you have a CUPS print system there is no need to # specifically define each individual printer. # You must configure the Samba printers as "Generic PostScript

Printer"

Page 16: Printing in linux with cups

# on your Windows clients. # If you wish to configure the printers directly on the Windows

clients # (i.e. use the windows drivers on the clients) you must swap the # 'print command' line below with the commented one. [printers] comment = All Printers path = /var/spool/Samba browseable = yes # to allow user 'guest account' to print. guest ok = yes writable = no printable = yes create mode = 0700 # ===================================== # print command: see above for details. # ===================================== print command = lpr-cups -P %p -o raw %s # using client side

printer drivers. # print command = lpr-cups -P %p %s # using cups own drivers

(use #generic PostScript on clients). # lpr -P %p %s lpq command = lpstat -o %p

lprm command = cancel %p-%j

To configure CUPS for SAMBA (cups can use printers on windows machines), run the following command:ln -s `which smbspool` /usr/lib/cups/backend/smb

Your Samba installation or cups installation *MAY* have already done this, so check for link first.

Cups command line tricks and tips Because cups has a command line equivalent to the lp and lpr commands (I prefer

lpr), all the commands that worked with the old LPD print system still work exactly the same.

Only the lpr version of the commands will be presented here. The equivalent lp commands do differ in some cases.

Cups, however, adds a bunch of new options you can use that are not present in LPD.

Only a few of the options will be presented here. See the docs for the full list.

Basic print commands

Page 17: Printing in linux with cups

To print to your default printer, use the command: "lpr filename". To print to a specific printer, use the command "lpr -P printername filename". To see what printers are setup, you can use the web page (see above), or use the

command "lpstat -d -p". The -d tells you the default printer, and the -p lists the printers available, and their status.

Advanced print commands - Paper orientation and size

With cups, you can easily change the printout paper orientation.

To print portrait, you don't need any special options. It's the default. To print landscape, "lpr -o landscape filename"

Cups also allows you to specific media size, type and source. Of course, your printer must support the options you choose. From the cups manual, the most common are:

Letter - US Letter (8.5x11 inches, or 216x279mm) Legal - US Legal (8.5x14 inches, or 216x356mm) A4 - ISO A4 (8.27x11.69 inches, or 210x297mm) COM10 - US #10 Envelope (9.5x4.125 inches, or 241x105mm) DL - ISO DL Envelope (8.66x4.33 inches, or 220x110mm) Transparency - Transparency media type or source Upper - Upper paper tray Lower - Lower paper tray MultiPurpose - Multi-purpose paper tray LargeCapacity - Large capacity paper tray

To use these options, the command is "lpr -o media=option1,option2,etc filename". Multiple options are allowed, and they are not case sensitive. Note there are no spaces in the list!

Advanced print commands - Duplexing

If your printer supports its, CUPS can do duplexing from the command line. To do duplexing, the command is "lpr -o duplexingoption filename" where

duplexingoption is one of the following. "sides=two-sided-short-edge" is the option suitable for landscape pages. "sides=two-sided-long-edge" is the option is suitable for portrait pages. CUPS default is to print on only one side of the paper, so while there is an option

for this ("sides=one-sided"), you don't need it.

Page 18: Printing in linux with cups

If your printer doesn't support duplexing, but you want to fake it, CUPS again has options to help.

Use the "-o page-set=set option" to select printing just the even or just the odd pages.

The set value is either even, for even numbered pages, or odd, for odd numbered pages.

The default is to print all pages. There is really is no option for this.

Advanced print commands - Range of Pages

The default is to print every page. The "-o page-ranges=pages" option selects a range of pages for printing. "pages" can be a hyphenated range such as 1-4, or a comma separated (no

spaces!) list of pages, such as 3,5,6 or both, such as 3,4-6,8. The pages are always printed in ascending order, regardless of the order they are

listed in.

Advanced print commands - Combining Options

Cups allow multiple options to be combined. Simply add another -o to the command.

Suppose you wanted to print pages 3-4, and 6 landscape from the file myletter to the printer myprinter.

The command is "lpr -P myprinter -o landscape -o page-ranges=3-4,6 myletter".