Yesterday, I bought a brand new Canon Maxify MB2350. One of the most important features of this device is the capability to connect to the local LAN/WLAN, and two-sides printing.
I use linux for everyday tasks, along with more academic reasons, and I made a big mistake: I didn't check for Linux compatibility before buying.
So, how to configure the Canon Maxify MB2350 on linux (in particular, Ubuntu 16.04)?
After some headache, I partially solved my problem.
Enable basic support for LAN printing
Official Linux drivers (rpm/deb/sources) are usually provided on the product's support page on Canon's website. While digging in the net, I realized that, depending of the region of the support site (Asia,USA,Europe, and more specific versions like Italy), different versions were provided, or none at all! On Italian support page, for example, the proposed version is 5.0. I found that the most recent one is 5.30. The name of the driver is: "IJ printer driver", here are the links:
Debian packages
Rpm packages
Sources tarball
Documentation
Inspecting the sources, I noticed that some components are GPL-v3 licensed, but they use 2 already-backed libs (included in the archive). So it's not a totally open-source driver, and that will be a pain if Canon decides to discontinue those drivers in the future.
I decided to install directly the provided .deb package instead of compiling from sources. In the debian archive, you'll find an "install.sh", and most guides on the internet would reccomend its execution. I tried, but the script fails to identify the printer in the local network. So, ignore it. Install the right .deb file that you can find in the packages folder instead.
Here's the complete step-by-step procedure:
cd /folder/where/you/downloaded/the/canon/driver
gzip -d cnijfilter2*.tar.gz
tar -xf cnijfilter2*.tar
sudo dpkg -i cnijfilter2*/packages/* #(the package for the wrong architecture will fail)
system-config-printer
Click on Add printer; in the URI text field, type "cnijbe2://Canon/?port=net&serial=AA-BB-CC-DD-EE-FF", where the last fake field has to be replaced with the printer MAC address; Proceed thru the wizard, selecting "Canon" and "Maxify MB2350" when required;
sudo cups-genppdupdate
sudo reboot
Now, it should print.
Known issues:
- No two sides printing (see next paragraph)
- Error while trying to load paper from tray 2. (no solution yet, sorry)
Enable support for two-sides printing
Look at
this sourceforge thread. Those hard-to-find messages helped me a lot. In this moment, the last GutenPrint version on Ubuntu 16.04 is 5.2.11. However, the developer that answered in the linked discussion referred to a fix in the 5.2.12 release of Gutenprint that enables the Maxify 2300 and similar to print two-sided sheets. I downloaded the latest version
here.
Here are the needed steps to install the latest build:
sudo apt update
sudo apt install -y gcc libcups2-dev libcupsimage2-dev
cd /folder/where/you/downloaded/the/tarball
tar -xf archive_name.tar.bz2
cd archive_name
./configure --enable-cups-ppds --enable-cups-ppds-at-top-level
make
sudo make install
sudo cups-genppdupdate
sudo reboot
Here's the new, interesting lines we get in the updated /etc/cups/ppd/YOUR_PRINTER_NAME.ppd:
*OpenUI *Duplex/2-Sided Printing: PickOne
*OPOptionHints Duplex: "radiobuttons"
*OrderDependency: 10 AnySetup *Duplex
*StpStpDuplex: 0 1 0 0 255 0.000 0.000 0.000
*DefaultDuplex: None
*StpDefaultDuplex: None
*Duplex None/Off: ">>setpagedevice"
*Duplex DuplexNoTumble/Long Edge (Standard): ">>setpagedevice"
*Duplex DuplexTumble/Short Edge (Flip): ">>setpagedevice"
*CloseUI: *Duplex
What else I've noticed?
CUPS could detect the printer and choose the protocol IPP. If you configure the printer as IPP, it won't work. I think that the port used by the printer is the same of IPP, but the cnijbe2 backend provides a different and vendor-specific communication protocol.
The MAXIFY has also scan capabilities. On windows, those are provided thru the WSD (Web Services for Devices) protocol. Sane provides an interface that works on most Canon scanners, such as Pixma series, but this MAXIFY isn't supported. The WSD protocol is standard since windows Vista epoch, but no Linux implementations yet. It's based on HTTP POST requests.
Recommendations
A lot of tutorials tell to add ppas (such as the official Ubuntu Documentation, with old builds for 14.04 LTS) or cloning GitHub repos (with old and abandoned copies of the IJ Driver sources). Ignore those sources, download the latest versions of Gutenprint and IJ Driver.