.comment: The Great, the Pretty Bad, and the Breathtakingly Stupid
Sometimes it's worthwhile to ponder just how good Linux hardware support has become.
I noticed this not long ago when I tried to set up an Epson Stylus Photo 780 USB printer on a desktop Linux machine. The machine was running more-or-less stock SuSE 7.2, the chief change being a 2.4.7 kernel built mostly but not entirely to SuSE's specs (I compile agpgart and mga support into the kernel rather than build that support as modules; I'm told that it makes no difference, but it does). The goal was to be able to produce photo-quality prints on nice, shiny paper (which ranges in price from expensive to insanely expensive, so you want to do all you can to get it right the first time).
There is no excuse not to use CUPS as the print engine, best I can tell. Indeed, I think CUPS is possibly as great an advance in desktop usability as have been the modern Linux desktops themselves. The quality of printer drivers varies (for instance, the LaserJet IIID driver has no provision to turn off duplexing, so you need to use the LaserJet III driver if you want printing on just one side -- a little inconvenient, but scarcely earth shattering), but they are themselves independent of CUPS itself, and the presence of a simplified and common API makes driver creation easier.
A good first stop when considering a printer purchase or if you already have the printer in seeing how well it's supported is the LinuxPrinting.org website. There is a wealth of information there -- almost too much; it can take awhile to search out and understand everything that is there, and sometimes what seems like a dead end isn't. Looking at the database of printers, I discovered that the Stylus Photo 780 is supported "perfectly." I concluded that it was safe to buy.
Anyone who has followed Linux development for awhile has heard USB horror stories. In that the printer supports both USB and parallel printing, this didn't worry me too much. The documentation said that USB was preferred and, because there was always parallel as a fallback, I was unconcerned as I plugged it all together using the first USB port on the machine.
Came time now to install the printer in Linux. The documentation made no mention of Linux, which was no surprise. Because I was running SuSE, I opened a konsole, typed "sux," and hit enter. This command is a SuSE-specific thing which combines "xhost + localhost" and "su," giving root permission to run X applications on the user's desktop. I then fired up YaST2, the SuSE configurator on which the system is sometimes too reliant in my opinion but which here was a pleasure.
Setting up CUPS printing is oddly located: Misc > Printers in CUPS. After I poked around and found it (one would expect it in Hardware > Printers), I found, too, that it had been auto-detected. I am untrustful of overly-automated processes, so I chose to "Manually add device." Good thing, because the highest quality driver for this newish printer isn't included in the CUPS shipped with SuSE 7.2. Following the process along, I selected the Epson brand and was treated to an extensive selection of supported printers -- of which the Stylus Photo 780 was not one. I tried a number of similar printers, producing test pages of varying quality but nothing as good as I'd hoped for.
Time to do a little additional research, which led me to something called gimp-print. It is one of those gems you happen onto every so often -- a piece of software that is not especially glamorous or widely discussed, but that does its job perfectly. I learned that full support for the Stylus Photo 780 was available in the 4.1.99-alpha2 code. I downloaded it. Its documentation, like the LinuxPrinter.org site, actually made things appear to be more difficult than they turned out to be. All that was necessary was compiling it with CUPS support, which was a matter of "./configure --with-cups" before "make" and "make install." (I did have to go to the SuSE CD to fetch the glib and gtk devel packages, which SuSE maddeningly does not install by default.) Now, when I went to YaST2, there was driver support for the printer.
The test pages looked nice, but a test page, as anyone who has ever printed one can attest, is a far cry from day-to-day output. It was time to stress the system.
I opened the Gimp and loaded one of the high-resolution jpegs I'd taken at the horse show a few weeks ago. This was a good test image because I'd had some photographic prints made from this file (at $10 a pop), so I'd have a good baseline for comparison. Additionally, it contains a full range of colors, a true white, and a black black.
Gimp-print had taken the idea of printing to a whole new level. Printing in Gimp now involved a magnificent range of possibilities, from a dozen resolutions to more than a dozen paper types. It looked as if one could produce acceptable output for all occasions.
Epson shipped four pieces of photo-quality paper with the printer, two matte and two glossy. I'd eaten up one of the matte sheets printing the test page. I thought I'd try glossy, full page, 1440x720 dots per inch, high-quality glossy paper. Gimp-print (which simply replaced what one got when doing File > Print in the Gimp) offered these choices, no problem. I didn't mess with either contrast or color saturation.
I'd forgotten just how inflated printer makers' claims are as to the speed of their devices. Printing a good color picture with the Stylus Photo 780 is slow -- I mean, you hit print, then you go shower and shave and maybe muck out a stall or two in the barn and start the sprinkler on the tomato plants and it's still not done slow. I had an additional issue, though: Only half the picture printed; then the printer stopped as if awaiting some message from above that never quite arrived. I waited. And waited. Waited some more. The printer never came back to life.
Occasionally the first guess is the correct one, and I lucked out in this case. Running "df" from a konsole informed me that my / partition was full. I was afraid of that -- a temporary file was bigger than the available space. (Let it be noted how well behaved the system was -- it didn't crash the system but instead accepted only as much of the temp file as it could, the idea being that there wouldn't have been a full print job anyway, and certainly none if the system went down.)
This was a problem. Though there are utilities for resizing partitions, I am leery of them. I came up with a very ugly kludge that involved moving a lot of things to /usr and symlinking them back, but it's not something I'll detail because it's not something I recommend. Instead, if you're planning to do this kind of work, leave plenty of room on whatever partition has /var and /tmp, because the temporary files generated by a photo-quality print job can be in the 30-meg range.
Once that little bump had been flattened, I was able to get a full print. I compared it to its professionally produced counterpart. It was better. Skin tones were more subtle, contrast was not excessive. Some of the colors were not as bright as in the photo-shop version, so I decided to fiddle with some of the other controls. Kicking up contrast slightly and color saturation a bit more produced the full range that the photographic print had, while losing nothing I'd gained from the locally produced print. It was now much better than the one that had cost $10.
A world of opportunity now beckons: A high-quality digital camera, more than decent image manipulation software, and a solid printing system provide creative control that's usually available only to the black-and-white photographer skilled in darkroom work. And it all works under Linux. I've begun to think of the multitude of silver-based negatives and slides I have, how a scanner for such is available, and how I could remove scratches, correct oddly-exposed slides, and archive it all to CD. And I still have an open USB port . . .