Problem with USB printer
billm at tharo.com
Thu Aug 30 13:14:50 PDT 2007
I am a developer trying to get my employer's line of printers working with Apple Macs. I've had partial success, and have come to a dead-end, and hope I can get some help here.
First off, here is some background info on the subject:
I developed a CUPS printer filter and associated PPD files for my employer's line of printers, which are thermal-transfer labeling printers, similiar to the Zebra and Dymo printers that are currently available from within Apple's Printer Setup Utility (via CUPS). I submitted it a few months ago to the CUPS maintainers, and just recently received word from Michael that our filter/PPD's are slated for possible inclusion into the 1.4 branch of CUPS, so this is good news for both myself and my employer.
On the initial tests, all was well, and everything seemed to be working great. I could print from the command-line (lpr -P queue-name filename.ext), print from TextEdit and Preview, and finally, test print from within the CUPS web administration page. Also, all of the printer options seemed to work correctly too (print speed, darkness, label size, gap size, thermal-transfer, direct-thermal, etc.). Now, this was when I had the actual CUPS sources (v1.2.7 at the time), and the CUPS DDK sources (v1.1.1 at the time) fully built and installed on my MacBook Pro via the usual "./configure / make / make install" routine.
Now, here's where it gets interesting. Over the past weekend, I did a fresh install of Mac OS X from my install DVD's for my MacBook Pro, applied all of the updates thru Software Update, installed XCode supplied with my DVD's, upgraded XCode to 2.4.1, and built my filter again, but this time, I didn't install CUPS or the DDK from sources; I just built my filter by simply placing the required 'driver.h' header file from the DDK into /usr/include/cups. But now, the CUPS usb backend keeps reporting "Printer not responding" in the CUPS error_log file. I also tried the usbtb backend made by Tyler Blessing, but it responds with "The Printer is not available". I know that my filter works properly, because I set up our printer on my Gentoo GNU/Linux workstation via USB as a raw printer, so that no filtering would occur on the workstation, shared it, and set up the printer on my MacBook Pro using IPP, so that the filtering would occur on my MacBook Pro, and then the job would be sent via IPP to my workstation, and the data just dumps raw, already processed by my filter on my MacBook Pro, to the printer and it prints correctly.
Another thing that is strange is that another employee here was kind enough to bring in his PowerBook, with OS X 10.3, and our printer printed perfectly on his PowerBook. Note that I did not install CUPS nor the DDK on his machine; I just manually copied my filter/PPD files onto his PowerBook into the correct directories (/usr/libexec/cups/filter and /usr/share/cups/model), set the correct ownership and permissions, and tested the printer again via the command-line, from TextEdit and Preview, and test print from the CUPS web administration page. This was possible because I built my filter as a Universal Binary on my MBP, and my MBP is Intel arch, while his PB is PPC arch. ;)
The senior developer here and I did test our printer using the official testing tool from USB.org (http://www.usb.org/developers/tools/, the USB Command Verifier vR1.3), and our printer passed every single test. Another thing I did was actually debug the usbtb backend, and discovered that our printer is never even seen in the function deviceIDDictionaryCreate(), inside of the 'while ...' loop where it checks for the deviceClass && deviceSubClass, which should be 7 and 1 respectively. I debugged a Zebra thermal-transfer labeling printer, and usbtb did find it (i.e., 7 and 1 did appear, and the check was successful).
So, at this point, I'm totally stumped as to why our printer:
- is detected and prints on a PowerBook with Mac OS X 10.3 (not sure what patch level/revision) via USB;
- is detected and prints on a Gentoo workstation via USB;
- is detected and prints on Windows 2000, XP, and Vista machines via USB;
- is detected and prints on a MacBook Pro with Mac OS X 10.4.10 with CUPS and the CUPS DDK sources built and installed on it via USB;
- prints from a MacBook Pro via IPP, with the filtering done locally on a MBP, and dumped raw by the remote Gentoo host to the printer via USB;
- is NOT detected and DOESN'T print on my MacBook Pro with a fresh install of Mac OS X 10.4.x, fully patched/updated via Software Update to 10.4.10, and my filter built as a Universal Binary after copying the CUPS DDK header file 'driver.h' to the proper location.
If anybody has any ideas, I would really appreciate it. I can post some info about our printer if anybody is interested (the only info I have currently is the output from "lsusb --verbose" on my Gentoo workstation; I think there is some tools and/or commands in the Terminal on Macs that I can use to get this info too - just haven't looked into it yet...). I'm getting more convinced that it is a hardware issue, and for some reason, there is something about our printer's USB implementation in it's firmware that isn't correct.
Thanks much in advance, and take care,
MacBook Pro 2Ghz/2GB Intel Core Duo Mac OS X (10.4.10)
More information about the cups-devel