Got a Pi in a drawer? It makes an excellent EZPrint host: silent, tiny, and it uses about as much power as a phone charger. Setup is one command.
Use Raspberry Pi Imager and choose Raspberry Pi OS Lite. There is no need for a desktop. Pick the 64-bit build on a Pi 3 or newer, or the 32-bit build on a Pi 2. Before writing the card, open the settings (the gear icon) and set a hostname, tick Enable SSH, create a username and password, and enter your Wi-Fi details if you are not using an Ethernet cable. Doing it here saves needing a monitor and keyboard later.
Put the card in, plug your printer into a USB port, and power it on. Give it a minute, then connect from another computer. Replace the name with whatever hostname you chose.
ssh pi@raspberrypi.local
Open your dashboard, click Generate a pairing code, and copy it. Codes last 15 minutes and work once.
One command. It installs CUPS and printer drivers, a recent Node, and the EZPrint agent as a service that starts on boot, then pairs the Pi with your account.
curl -fsSL https://ezprint.to/pi/setup.sh | sudo bash -s -- XXXX-XXXX
Your printer appears within a few seconds. Open it, copy the printer address, and add it on any computer you want to print from. Plug a different printer in later and it is picked up automatically, so there is nothing to re-run.
curl -fsSL https://ezprint.to/pi/setup.sh -o setup.sh
less setup.sh
sudo bash setup.sh XXXX-XXXX
Installs CUPS and a set of printer drivers, including the rules that make a USB printer appear by itself when you plug it in. Installs Node if the version on the Pi is too old. Installs the EZPrint agent from npm and registers it as a service so it comes back after a power cut. Then it locks CUPS down to local access only, so nothing on your network can reach it, and nothing needs to. It changes nothing else on the Pi and is safe to run twice.
CUPS creates the print queue itself when a USB printer is plugged in and switched on, but it can take a few seconds and some printers need to be power-cycled after the Pi has booted. Check what it can see:
lpstat -p
lpinfo -v
Add it to CUPS by hand, then the agent will pick it up on its next scan. Most printers made in
the last decade work with the everywhere driver:
sudo lpadmin -p MyPrinter -E -v ipp://192.168.1.50/ipp/print -m everywhere
lpstat -p
Worth proving before blaming EZPrint. This prints a CUPS test page directly, with nothing else involved:
lp -d YourPrinterName /usr/share/cups/data/testprint
Check the agent paired and can reach us, then look at what it is doing:
ezprint-agent status
sudo journalctl -u ezprint-agent -f
A Pi 2 or newer is fine, including the Pi 2, 3, Zero 2 W, 4 and 5. On a Pi 2 use the 32-bit build of Raspberry Pi OS and the installer handles the rest. A Pi 1 or the original Pi Zero will not work: they are ARMv6, which modern Node no longer supports, and no amount of patience fixes that. Check which you have with:
uname -m # armv7l or aarch64 is fine, armv6l is not
They last 15 minutes. Generate a new one and pair without re-running the whole installer:
ezprint-agent pair NEW-CODE
sudo systemctl restart ezprint-agent
The installer sets up a service that should start automatically. Confirm it is enabled:
systemctl is-enabled ezprint-agent
sudo systemctl enable --now ezprint-agent
One printer free forever. Still stuck? Reply to any email from us and a human will answer.