A family member has a Canon PIXMA MP250 printer, originally released in 2009. It has been a very reliable piece of hardware, especially for a printer.

Then came Windows 10. The printer would not work out of the box with it and the official drivers got stuck during installation. Fiddling with the printer in device manager, trying to install drivers via Windows Update and stars aligning got the printer to work again.

Then came Windows 11. Nothing I did could get it working now, and the printer is not even officially supported by Canon on this version of Windows.

This printer works out of the box on any mainstream Linux distribution, and the family member had been using the printer with Ubuntu for years, but a certain piece of important software in Estonia was not working properly a lot of the time, which triggered a switch to Windows.1

Quick searches online suggested that I could turn this printer into a network printer, as long as I had some patience and a spare computer.

The idea is simple: take a spare computer, hook it up to the printer, install CUPS on it, configure it and you’re good to go!

I initially tested this setup with a Zimaboard running Fedora Server, but the final solution used an old Raspberry Pi B+ running the latest version of Raspberry Pi OS.

How to set it up

The steps will be similar with other pieces of hardware and Linux distributions, you may just need to adjust a few commands and package names.

The steps are roughly based on these two guides:

If you’re following along with a Raspberry Pi, set up your OS first. A minimal installation with no graphical interface will be just fine.

Next, install CUPS and optionally the right printer drivers for your printer. The Canon PIXMA MP250 requires the package printer-driver-gutenprint.

sudo apt install -y cups printer-driver-gutenprint

Make sure that CUPS is running.

sudo systemctl enable --now cups.service

Next, allow your user to manage printing. In this example, the username is pi.

sudo usermod -a -G lpadmin pi

Next, make sure that CUPS allows connections from other machines in your network, and then restart it.

sudo cupsctl --remote-any
sudo systemctl restart cups

Find out the IP address of the Pi and navigate to it in your browser. It will look something like https://192.168.0.49:631. The browser will likely warn you about a self-signed certificate. It’s safe to proceed.

If you haven’t already connected your printer to the Raspberry Pi via USB, then do so now.

Use the graphical interface to add a new printer under the Administration section. You’ll need to enter the username and password for your user here. It’s the same user we used earlier, so in this example it’s pi.

If you can’t find your printer model listed in the Add printer view, then you are probably missing the proper driver package, or your printer simply isn’t supported.

You should be able to find your printer in this view.
You should be able to find your printer in this view.

After adding your printer, you can use the CUPS web interface to print a test page.

If that worked, then you should now be able to use any other device on the network to print!

On Linux and Windows, open the settings section that handles printing, and add a new printer. This networked printer should appear automagically, no additional configuration required.

I also did testing using a Fairphone 5 running Android 13, and an iPhone X running iOS 16. In both cases the printing just worked.

Test page printed using Windows 11.
Test page printed using Windows 11.
Test page printed using Fedora. Yes, most of the colors in the colored ink
cassette have run out.
Test page printed using Fedora. Yes, most of the colors in the colored ink cassette have run out.

I’ve used the scanning functionality of this particular printer on Linux and it has worked, however I forgot to test this out using this setup. I’ll try to test that out once I get the chance to try the printer out again.

Hardware tech tips

I first ran this setup with a Zimaboard to test the idea out. It worked very well, but as a simple print server it is a bit overkill.

I then replaced it with a Raspberry Pi B+, and while the printing works, I discovered that a single ARM CPU core is apparently a limiting factor during printing. A simple test page print pegged the CPU at 100%, and that’s with the 700->1000 MHz overclock applied.

Raspberry Pi B+ struggling during printing.
Raspberry Pi B+ struggling during printing.

If you don’t mind a slower printing speed, then any Raspberry Pi will be absolutely OK. More performant versions of Raspberry Pi will likely fare even better.

If you already have a small home server running, then you may want to hook the printer up to that and set up the printer there. It’s already running 24/7, so it would be a perfect match.

One useful aspect of this setup is that you can queue up print jobs even when the printer itself is powered off. Once you turn it on, the print jobs will start, assuming that you have enough paper and ink.

Free open source software prolongs the useful life of hardware once again. See y’all in October 2025!

2024-06-15 update

This post got featured on:

And even the leader of OpenPrinting, Till Kamppeter, chimed in! They also held a talk about OpenPrinting at FOSDEM 2024.

Regarding scanning, seems like there’s a separate project for that called SANE - Scanner Access Now Easy.

Find out more about OpenPrinting here.

2024-11-14 update

A reader shared with me the p910nd project that can be used for a similar purpose. I have not yet tried this myself.

There’s even an OpenWRT page that describes its use on a router!


  1. that might be about to change as there is an unofficial Flatpak version out there. ↩︎