How to install a Canon MF633Cdw on a modern Debian

Installing printers can be a pain. Installing printers on Linux results in an even bigger pain. Installing printers with wrong and crappy drivers and no open-source alternative is an endless amount of pain.

Kudos to Canon for hitting the trifecta.

So I've set out to get the drivers for my Canon MF633Cdw to work over the network. I've set up CUPS and everything else as it's supposed to be but I could not select the correct driver.

I therefore resorted to the Canon driver page and downloaded the Linux drivers. The tar archive comes with drivers for 32-bit and 64-bit. I obviously and naively installed the 64-bit drivers.

As it turns out, the Canon 64-bit driver have dependencies on 32-bit code and 32-bit programs. To get the driver to work, you need to:

$ tar xvzf linux-UFRII-drv-v360-uken-02.tar.gz
$ cd inux-UFRII-drv-v360-uken
$ cd 64-bit-Driver/Debian
$ sudo dpkg -i *.deb
$ sudo apt -f install
$ cd ../../32-bit-Driver/Debian
$ sudo dpkg --add-architecture i386
$ sudo dpkg -i *.deb
$ sudo apt -f install
$ cd ../../64-bit-Driver/Debian
$ sudo dpkg -i *.deb
$ cd ../../PPD/Debian
$ sudo dpkg -i *.deb
$ sudo service cups restart

Then you can add your fancy printer over the printer dialog. Now just make sure to not uninstall the i386 packages that apt thinks are no longer needed, because they are. Thanks to crappy drivers with 32-bit dependencies.

$ sudo apt-mark manual libatk1.0-0:i386 libavahi-client3:i386 \
  libavahi-common-data:i386 libavahi-common3:i386 libbsd0:i386 \
  libcairo2:i386 libcups2:i386 libdatrie1:i386 libdbus-1-3:i386 \
  libexpat1:i386 libffi6:i386 libfontconfig1:i386 libfreetype6:i386 \
  libgail-common:i386 libgail18:i386 libgcrypt20:i386 \
  libgdk-pixbuf2.0-0:i386 libglade2-0:i386 libglib2.0-0:i386 libgmp10:i386 \
  libgnutls30:i386 libgpg-error0:i386 libgraphite2-3:i386 \
  libgssapi-krb5-2:i386 libgtk2.0-0:i386 libharfbuzz0b:i386 \
  libhogweed4:i386 libicu57:i386 libidn11:i386 libjbig0:i386 \
  libjpeg62-turbo:i386 libk5crypto3:i386 libkeyutils1:i386 libkrb5-3:i386 \
  libkrb5support0:i386 liblz4-1:i386 libnettle6:i386 libp11-kit0:i386 \
  libpango-1.0-0:i386 libpangocairo-1.0-0:i386 libpangoft2-1.0-0:i386 \
  libpixman-1-0:i386 libpng16-16:i386 libstdc++6:i386 libsystemd0:i386 \
  libtasn1-6:i386 libthai0:i386 libtiff5:i386 libx11-6:i386 libxau6:i386 \
  libxcb-render0:i386 libxcb-shm0:i386 libxcb1:i386 libxcomposite1:i386 \
  libxcursor1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 \
  libxfixes3:i386 libxi6:i386 libxinerama1:i386 libxml2:i386 \
  libxrandr2:i386 libxrender1:i386