This page details my efforts to make the Dell 3000cn color laser printer work with Linux. In particular, I made it work with CUPS, foomatic, hpijs and ghostscript running under Red Hat's Fedora Core, but my work is probably useable to other Linux distributions that use those packages.
Here's a sampling of the problems you may encounter when you try to configure Linux to talk to a 3000cn. The sections below attempt to address these problems.
To get all the functionality you can out of this printer, you're actually going to want to use multiple drivers, which means that you'll want to configure multiple printers queues all feeding into the same printer.
To do this, you should first configure a CUPS print queue using the “Raw Print Queue” printer type and talking directly to the 3000cn via any of the supported mechanisms — parallel, USB, or JetDirect. If you use parallel, your device name will be something like “/dev/lp0”; if you use USB, it'll be something like “/dev/usb/lp0”; if you use JetDirect, it'll be something like “//ip-address:9100”, where ip-address is the IP address you configured when putting the printer on your network (how to do that is beyond the scope of this document). I recommend JetDirect or USB over parallel for reasons described below.
Once you've got a raw queue that feeds to the printer, configure other queues with different names and drivers feeding into the raw queue via the CUPS printing protocol, a.k.a. IPP. For example, if you named your raw queue “raw”, configure your other queues to print to the CUPS printer named “raw” on the host “localhost”.
You need to print through an intermediate raw queue, rather than having each of your main queues print directly to the printer, because if two of the main queues try to print to the printer at the same time, one of them may decide that the printer is “not ready” and shut itself down, such that you'd have to restart the queue by hand. In contrast, CUPS queues can accept multiple jobs at the same time, so your raw queue will take all the jobs submitted to it and feed them to the printer one at a time.
Now, getting down to business, these are the drivers I've used successfully (although source-code patches were required as described below):
If you want a queue that prints in black-and-white with final
quality (i.e., not draft mode), use the “Generic PCL 6/PCL XL
Printer” with the pxlmono driver, and configure the driver
options to use the “Normal Grayscale” printout
Alternatively, you can use “Generic PCL 5e Printer” with the hpijs driver as described above, but use the “600 dpi, Grayscale, Black Cartr.” resolution and “Normal” or “High Quality” printout mode.
The pxlmono driver prints faster for text and some images; the hpijs driver prints other images faster. Trial and error may be the only way to find out which one works better for you. Another factor to consider is that depending on which problems you care about solving, you may be able get away with patching either hpijs or ghostscript rather than both, in which case you should use the driver you've patched.
The 3000cn has two printing modes, color and grayscale. When it is operating in color mode, it rotates all four toner cartridges into position for every printed page. You can tell this is happening because pages print very slowly and you hear several ka-chunk sounds for every printed page as the toner cartridges are rotated. (Incidentally, this isn't the only time the cartridges rotate. They also rotate when the printer is “calibrating”. I'm not certain what that means, but I suspect that for one thing it means that the cartridges get rotated more often when some of them are nearly empty, to redistribute the remaining toner in the nearly empty cartridge(s).) In contrast, when the printer is operating in grayscale mode, only the black cartridge is used, and hence pages print much more quickly.
There's a setting in the printer itself — “Color Mode” under “PCL Settings” on the LCD menus. If this is set to Grayscale, then the printer will always use the faster grayscale printing mode, even when a color print job is sent to it (the job will come out in grayscale instead of color). However, if this is set to Color, then the printer will use the slower color printing mode unless the print job explicitly specifies that grayscale mode should be used.
In other words, if you want black-and-white jobs to print faster, you either need to use the LCD menus to tell the printer to use grayscale mode, or you need to get the Linux drivers to do it for you.
If you use the “Generic PCL 5e Printer” or “HP Color LaserJet 5500” printer with hpijs, the right thing will happen automatically — the former will print in grayscale mode and the latter will print in color mode.
However, the pxlmono driver included in Fedora Core's ghostscript doesn't know how to send the correct printing mode command to the printer. If you want the correct printing mode to be selected automatically with this driver, you need to either upgrade to a newer version of ghostscript or patch the version you're using with this patch. This patch is built into version 8.51 and later of ghostscript. The details of how to patch and rebuild Linux components on various Linux distributions are beyond the scope of this document.
Make sure that the “Color Mode” setting underneath “PCL Settings” in the printer's LCD menus is set to “Color”. Also make sure you're printing your jobs through a print queue that is configured for color output as described above.
If you're sending a job through the printer's parallel port, and the printer stops processing a job in the middle with no indication of why, and the computer thinks it's in the middle of sending the job to the printer, then you should switch to sending the printer jobs via USB or the network. I don't know what causes this problem with the parallel port or how to fix it, but I don't think it occurs with USB or network printing.
This problem occurs when using the hpijs driver. You can avoid it by using the pxlmono driver instead. Alternatively, you can recompile hpijs (which is either a standalone component or part of hplip) with this patch.
I don't know how to fix this. I've reported it to the maintainers of ghostscript, but I don't believe it has been fixed. The only way I know to avoid it is to not to use the pxlmono driver for draft mode — use the hpijs driver as described above.
There is a bug in the pxlmono driver which causes it to encode some images extremely inefficiently, thus causing such images to print very slowly. This bug has been reported to the maintainers of ghostscript, but it has not yet been fixed. The hpijs driver prints images faster in this case, but even the hpijs driver is significantly slower for images than the Windows driver. The bug is present for both grayscale and color images, but it tends to be much more noticeable for color.
On the flip side, for non-images the pxlmono driver tends to produce faster output, so it isn't necessarily a good idea to use the hpijs driver all the time just because it prints images faster. Also, as noted above, there are other problems with the hpijs driver which might make you not want to use it.
Thw two workarounds to this issue that I recommend are:
This happens with the pxlmono driver. It happens because foomatic corrupts the output when trying to modify it to set the correct printer tray. There's a real fix in the work for this — native paper-tray support will be added to the driver, such that foomatic will no longer need to modify the driver's output to set the correct tray — but in the meantime, you need to patch foomatic with this patch. You can either apply this patch to the foomatic source code and then recompile the entire package, or find the file “pxlmono.xml” in your filesystem (it may be in /usr/share/foomatic/db/source/driver), patch it with the patch, and then rebuild all the PPD files for your printers that use the pxlmono driver.
This is a bug in the pxlmono driver in all versions of ghostscript up to and including version 8.51. It has been fixed in the ghostscript source tree and will thus be fixed in the next released version of ghostscript after 8.51, but in the meantime, if you want to print on Legal paper using the pxlmono driver, you need to recompile ghostscript with this patch.
|Printer uses wrong color mode||pxlmono||Use hpijs, patch ghostscript, or upgrade ghostscript (8.51 or later)|
|Color printouts come out in grayscale||both||Check printer “Color Mode” setting and driver options|
|Parallel-port jobs hang||both||Use USB or network instead of parallel port|
|Output shifted 3/8 inch down the page||hpijs||Use pxlmono or patch hpijs|
|Garbage printouts in draft mode||pxlmono||Use hpijs for draft mode|
|Color images print very slowly||both (pxlmono more)||Use hpijs (still bad, but better than pxlmono) or print images from Windows|
|Printer asks for A4 paper or displays error instead of printing||pxlmono||Use hpijs or patch foomatic|
|Jobs on Legal paper don't print properly||pxlmono||Use hpijs or patch ghostscript|