PRINTING IN LINUX WITH CUPS
By Robert Spotswood
General Printing Tips
 Understand your printing needs. If you will print ...
Why choose CUPS?
Printing Programs
The four main printing programs in Linux today are:
 lpr (note this is also called lpd...
 The Linux printing howto does not recommend it.
 As one user put it:
...LPRng, which is in my view an encoded acronym f...
 Cups is supported by: Caldera, Conectiva*, Debian, easyLinux*, HP-UX, IRIX,
Linux Mandrake*, Peanut*, Red Hat, Solaris, ...
Installing a New Printer via your web
browser
Go to http://127.0.0.1:631/printers
Note:
 You can change the port cups lis...
Click on the add printer button
Enter root and root's password.
First page of the Add printer "wizard"
 Now enter a name,...
Second page of the Add printer "wizard"
 Select the device the printer is attached to. In my case, it is my parallel port...
Third page of the Add printer "wizard"
 Select the manufacturer of your printer (or compatible printer driver). In my cas...
Fourth page of the Add printer "wizard"
 Select the model/driver of/for your printer (or compatible printer driver). In m...
Fifth (and last) page of the Add printer "wizard"
 If everything went well, this is what you'll see.
The New Printer is added!
Special Ports
 For ports other than parallel, an extra page comes between the second and third
page. An example is below....
This
machine
is in the
same
workgro
up
smb://server/sharename smb://username:password@server/sharename
This
machine
is in ...
Here is the page for serial ports:
The cupsd.conf file
 Like most servers in Unix, much of cups can be configured/control...
is a good idea anyway), you can also not have cups listen on your internet
connection. This also prevents any possibility ...
 # on your Windows clients.
 # If you wish to configure the printers directly on the Windows
clients
 # (i.e. use the w...
Basic print commands
 To print to your default printer, use the command: "lpr filename".
 To print to a specific printer...
 CUPS default is to print on only one side of the paper, so while there is an option
for this ("sides=one-sided"), you do...
Upcoming SlideShare
Loading in …5
×

Printing in linux with cups

346 views

Published on

Printing in Linux

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
346
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Printing in linux with cups

  1. 1. 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. 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!
  2. 2. 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.
  3. 3.  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.
  4. 4.  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.
  5. 5. 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 .
  6. 6. 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.
  7. 7. 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.
  8. 8. 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.
  9. 9. 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
  10. 10. Fifth (and last) page of the Add printer "wizard"  If everything went well, this is what you'll see.
  11. 11. The New Printer is added!
  12. 12. 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
  13. 13. This machine is in the same workgro up smb://server/sharename smb://username:password@server/sharename This machine is in a different workgro up smb://workgroup/server/share name smb://username:password@workgroup/server/s harename The page for everything except parallel ports and serial ports:
  14. 14. 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
  15. 15. 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 80 Port 631  Replace them with: Listen 127.0.0.1:631 Listen lan_ip_address:631 Listen 127.0.0.1:80 Listen 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_address BrowseAddress 127.0.0.1 BrowseAllow from 127.0.0.1 BrowseAllow 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 = sysv printcap name = lpstat print 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"
  16. 16.  # 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.
  17. 17. Basic print commands  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.
  18. 18.  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. 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".

×