32bits printer drivers on amd64 systems

The issue has been raised in https://community.ubuntu.com/t/poll-will-dropping-the-i386-repos-affect-your-use-of-the-amd64-port/11290

Some printer drivers are shipped as 32 bit debs. Random example on

Looking to the first in the list (DCP-110C) the deb has no depends (seems to be a convert from a rpm), it includes a library

$ ldd ./usr/lib/libbrcompij2.so.1.0.2
linux-gate.so.1 => (0xb77ba000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb76a7000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74f1000)
/lib/ld-linux.so.2 (0xb77bb000)

Those libraries will keep being available as libc6-i386 and lib32gcc1.

So in theory that driver should still be installable and working even without an i386 archive.

That said, does anyone know how those drivers are working today? Is system-config-printer setting multiarch for the user to be able to install/use those? Does cups has some multiarch glue to load i386 drivers?

@till-kamppeter can you provide some input there?

These drivers are exclusively proprietary, closed-source drivers, provided by printer manufacturers (like Brother here) on their own web sites. system-config-printer has no mechanism of installing such drivers automatically as a reaction on an appropriate printer being detected.
The only type of closed-source drivers system-config-printer was able to install automatically were LSB driver packages from OpenPrinting, but those always were available in both 32- and 64-bit. Epson was the only producer of such packages.
Therefore system-config-printer has no explicit mechanism to install 32-bit binary printer drivers and/or to prepare the system for such drivers.
CUPS also has no explicit support for 32-bit printer drivers on 64-bit systems, as there is no linking between CUPS or any component of it with the printer drivers. printer drivers run as stand-alone executables CUPS filters) called by CUPS and with data exchange via pipes.
I do not know which proprietary, manufacturer-supplied printer driver packages are in use nowadays and which 32-bit library requirements they have, as there was no complaint/bug report about them for years. Probably the modern technology of driverless IPP printing has vastly reduced the need of proprietary drivers.



Thanks Till!

@mcphail can you give some details on how you are using those drivers exactly since you are the one who raised the issue on the other topic?

I’ll do my best. CUPS is quite opaque to me :grin:.

From my understanding, a lot of printers require filters to convert postscript output to whatever raster format the printer requires. Some printers accept postscript directly, some work well with open source filters and others need proprietary filter blobs to talk to their hardware.

I have a Samsung and a Brother printer. Neither produces useful output without the blobs. The unified Samsung driver packs 64 and 32 bit binaries, which is fine. The Brother one only has 32 bit.

As you’ll know, many printer manufacturers don’t support Linux at all. From my limited experience, I haven’t seen a printer driver filter with complex dependencies, so a limited i386 runtime may well be enough to keep them going. I wouldn’t be optimistic that new 64 bit drivers would be released for old hardware, but Canonical might have the clout to swing this.

Of course, for many years it has been convenient for hardware manufacturers to release i386 binaries for their userland, as these would run on 64 bit and 32 bit installations. As that hardware dies, hopefully the next generation will come with proper 64 bit support. But some stuff like those Brother printers are robust, cheap to run and work well. I think they’ll be around for many years to come.

Thanks for the reply, it’s not clear to me though. What printer model do you own?

Looking at the DCP-110C example, the deb provides some script, a 32 bits library and a 32 bits binary ‘brprintconfij2’. Nothing in the deb reference to that binary though, the cups stack doesn’t know about that name either.

I’m unsure how/by what those are being used, do you have any idea?

If I understand correctly, your printer doesn’t work out of the box on Ubuntu today? How does it fail?
To get it working you need to enable the i386 arch and install the Brother provided .deb then things start working?
Do you have an idea if that’s the script provided by the deb it needs or something else? (like if you try to delete the binaries, does it keep working)?

Thanks for helping understanding the situation!

Hi @seb128. I’m currently 180 miles away from my printer but I’ll try to answer as best I can from memory!

I’m fairly sure my model is the HL-1110. It is certainly the “small cheap one” which was on sale on ebuyer for 30 quid a couple of years ago. I’ve also used one of the big, ancient office-class ones at work, but I can’t remember the model number.

There are 2 debs. One sets up cups and the other has the binary filters plus some wrapper scripts for lpr. AFAIK, cups just calls lpr to do the printing. You’ll see from the lpr wrapper scripts that input gets filtered through ghostscript and then sent to the binaries like rawtobr3 (which, I assume, is what converts the output into whatever the printer can understand).

I have a printer that I bought 2 years ago, a Canon PIXMA iP2700, while there is a driver for it available in CUPS, the local driver is very limited in features, like printing in Fast Mode isn’t available, I ended up wasting lots of ink when I used the local driver.

The Linux driver that Canon provides has a print in Fast Mode feature, however, their driver is only available in 32-bit and in order to install and run my printer with their driver, I had to enable 32-bit support.

Here’s the driver for my printer: https://www.canon.com.au/support/sims-content?pid=9359fa0798c54eeeadf89843512d7882&cid=87FC144EA2C54EF29F637118BB6D6231&ctype=dr

And here are the steps I took to install my printer on Lubuntu 18.04 64-bit: https://ubuntuforums.org/showthread.php?t=2395967&p=13798127#post13798127