Canon copier/printer on Fedora

<tl;dr> There is a decent cups print driver for Canon copiers if you don’t mind using proprietary software and making some manual changes </tl;dr>

Recently, our school got a couple of Canon copy machines that can be configured as network printers, but up until a month ago we only used them as copy machines. Last month, I started the process of getting them configured to print using CUPS, and, in the process, learned a bit about the printers and a lot about how CUPS works.

The first problem I ran into is that Canon’s printer drivers aren’t open source, which led to some crazy problems finding the correct drivers. It turns out that Canon produces two cups print drivers, the first which prints using Canon’s proprietary UFR-II, and the second which prints using PCL or PXL. Both drivers are a pain to find, but once found, install in a halfway-reasonable way.

I was interested to find that the UFR-II driver left some odd shading any time I printed a graphic. The cups test page had a weird gradient in the middle where I’ve never seen a gradient before, and PDFs would print with the same strange gradient. The PCL/PXL driver also had the gradient, but, after mixing a few options (Image Refinement – On, Line Refinement – On, Halftones – High HighResolution), it almost completely disappeared.

The other nice thing about the PCL/PXL driver is that it’s actually mostly using the built-in (open source) tools already available in cups, and the only proprietary parts (at least as far as I can see) are the PPD itself and a small program that adds the extra print options (like double-sided printing, stapling, etc) to the PCL print job. Given all that, I figured there wasn’t much point in sticking with the UFR-II driver, and started working with the PCL/PXL driver.

However, on using the driver, I ran into some other strange problems. The first was that the cups page log didn’t actually show any information on some of the print jobs. After poking at the PPD, I discovered that if an incoming job is PDF, the print driver can’t count the pages, while if it’s PostScript the driver can. That was an easy fix. To force cups to convert incoming PDF jobs into PostScript before passing them to the driver, in the PPD delete the following lines:

*cupsFilter:       "application/vnd.cups-pdf 0 foomatic-rip"
*cupsFilter:       "application/vnd.apple-pdf 25 foomatic-rip"

The second problem was a bit more subtle. Let’s imagine that I want to print a four-page test… 30 times, because I have 30 students in my class. I go to the print dialog, select the staple option, ask for 30 copies, and send it to print. Out of the copier come 120 pages… and one staple. The Canon driver will only staple it once because it’s one job. Because, obviously, if you’re printing 30 copies of the same job, you must want them to be stapled together.

Fortunately, the Canon driver does support an extra “Repeat job” count that you can use in place of the copy count. If you set the “Repeat job” count to 30 and leave the copy count at 1, it will print 30 four-page tests, with each test stapled separately. Unfortunately, this feature is in the advanced settings, while the copy count is sitting right there in the print dialog.

So I wrote a wrapper script for the Canon driver that automatically sets the “Repeat job” count to the copy count, and then sets the copy count to 1. Now the teachers can turn on stapling and set the copy count to whatever they want, and it will print as expected. You do have to change the *FoomaticRIPCommandLine line to say:

*FoomaticRIPCommandLine: "sicgsfilter-autonumpages &user; &quot;&title;&quot; &quot;%A&quot; &quot;%B&quot; &quot;%C&quot; &quot;%D&quot; &quot;%E&quot; &quot;%F&quot; &quot;%G&quot; &quot;%H&quot; &quot;%I&quot;"

I also went to the trouble of stripping out a bunch of unused options from the PPD, to make sure that they don’t appear when the teachers are going through the print options.

So now we have Canon copiers that are functioning great as printers, and our teachers love it!


Comments

Kevin Kofler
Sunday, Jun 1, 2014

Since this printer supports PCL: Have you tried just using the “Generic PCL” configurations (using Gutenprint) or passing the printer off as one of the PCL-based HP models (using HPLIP)? You shouldn’t need any custom driver for a PCL printer.

Kevin Kofler
Sunday, Jun 1, 2014

PS: Or try the Gutenprint driver for a different Canon model (probably the one with the closest model number) (assuming yours isn’t listed).

Jonathan Dieter
Sunday, Jun 1, 2014

Thanks, Kevin, for the suggestions. I did try the Generic PCL, and with a small amount of tweaking, it worked great for printing simple documents. The problem is that it doesn’t support the stapling and double sided features that our teachers need. As for the Gutenprint drivers, I didn’t try any of them as none are for the imageRUNNER copy machines, and the next closest don’t necessarily support the stapling feature (though they would probably give us the double sided feature).

As I mentioned in the post, the only thing that Canon’s proprietary program does in the PCL/PXL driver is add the options for stapling and double sided printing to the PCL job before it’s sent to the printer. It probably wouldn’t be too hard to reverse-engineer it and write an open-source replacement.