Printing & Scanning
Good news: printing on Linux is way better than it used to be. Most modern printers from HP, Brother, and Epson work automatically or with minimal setup. Here's how to get everything running.
How Printing Works on Linux
Linux uses a system called CUPS (Common Unix Printing System) to handle all printing. Think of it as the engine running behind the scenes whenever you hit "Print." The great thing is that CUPS comes pre-installed on virtually every Linux distro, so you don't need to set it up yourself. When you plug in a printer or connect to one over your network, CUPS is what makes it work.
In most cases, you just plug in your printer and it shows up ready to go. If it doesn't, this guide will walk you through getting it working.
Setting Up a Printer
Automatic detection (USB printers)
The simplest scenario: plug your printer into a USB port, wait a few seconds, and try printing something. Many printers from HP, Brother, and Epson are detected and configured automatically. You might see a notification that a new printer was added. That's it — you're done.
Through your desktop settings
If your printer wasn't detected automatically, or you need to add a network printer, use the built-in settings app:
- GNOME (Ubuntu, Fedora, Pop!_OS): Open Settings > Printers > click Add a Printer
- KDE Plasma (Kubuntu, Fedora KDE, Manjaro KDE): Open System Settings > Printers > click Add Printer
- Linux Mint (Cinnamon): Open Printers from the system menu > click Add
Your system will search for available printers. If yours shows up in the list, select it and follow the prompts. The system will usually pick the right driver for you.
Adding a network printer by IP address
If your printer is on the network but doesn't show up in the automatic search, you can add it manually using its IP address. You can usually find the IP address on your printer's display screen or by printing a network configuration page from the printer itself.
- Open the Printers settings (as described above)
- Choose Add Printer and look for an option like "Network Printer" or "Enter URI"
- Type in the address. Common formats:
ipp://192.168.1.100/ipp/print— for most modern printers that support IPPsocket://192.168.1.100:9100— for printers using raw/JetDirect protocollpd://192.168.1.100/queue— for older printers using LPD
- Select the correct driver (or use the generic "IPP Everywhere" driver for modern printers)
If Your Printer Isn't Detected
Some printers need manufacturer-specific drivers. Here's what to install depending on your printer brand:
HP printers — install HPLIP
HP has the best Linux support of any printer manufacturer. They provide an official package called HPLIP (HP Linux Imaging and Printing) that covers most HP printers and scanners. It's often pre-installed, but if your HP printer isn't working, install or update it:
Ubuntu / Debian / Mint
sudo apt update
sudo apt install hplip
# For the graphical setup tool:
sudo apt install hplip-gui
# Run the setup wizard:
hp-setup
Fedora
sudo dnf install hplip hplip-gui
# Run the setup wizard:
hp-setup
Arch / Manjaro
sudo pacman -S hplip
# Run the setup wizard:
hp-setup
openSUSE
sudo zypper install hplip
# Run the setup wizard:
hp-setup
The hp-setup command opens a wizard that walks you through adding your HP printer. It detects USB and network printers and installs the right driver automatically.
.run file with sh hplip-*.run and follow the prompts.
Brother printers — download from Brother
Brother provides Linux drivers for most of their printers, but they aren't included in distro repositories. You need to download them from Brother's website:
- Go to Brother's Linux driver page
- Search for your exact printer model
- Select "Linux" as the OS
- Download the "Driver Install Tool" — it's a shell script that handles everything
- Run it:
# Make the script executable and run it sudo bash linux-brprinter-installer-*
The installer will ask for your printer model and whether it's USB or network-connected, then download and set up the correct driver.
# Ubuntu / Debian / Mint
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32stdc++6
# Fedora
sudo dnf install glibc.i686
Epson printers — install the ESC/P-R driver
Epson provides a Linux driver package for their inkjet printers. It's available in most distro repositories:
Ubuntu / Debian / Mint
sudo apt update
sudo apt install printer-driver-escpr
# For newer Epson printers, also try:
sudo apt install printer-driver-escpr2
Fedora
sudo dnf install epson-inkjet-printer-escpr
# For newer models:
sudo dnf install epson-inkjet-printer-escpr2
Arch / Manjaro
# Available in the AUR
yay -S epson-inkjet-printer-escpr
yay -S epson-inkjet-printer-escpr2
openSUSE
sudo zypper install epson-inkjet-printer-escpr
After installing the driver, go to your Printers settings and add the printer. It should now be detected with the correct driver.
For Epson laser printers or models not covered by the package, check Epson's Linux download page for your specific model.
Canon printers — limited but possible
Canon's Linux support is unfortunately the weakest of the major brands. Some models work with generic drivers, but many need Canon's proprietary drivers which can be tricky to install.
Here's what to try, in order:
- Try the generic IPP Everywhere driver first. Many newer Canon printers support driverless printing and this might be all you need.
- Check the Gutenprint drivers — these are community-made drivers that cover many Canon models:
Ubuntu / Debian / Mint
sudo apt install printer-driver-gutenprintFedora
sudo dnf install gutenprint gutenprint-cupsArch / Manjaro
sudo pacman -S gutenprintopenSUSE
sudo zypper install gutenprint - Download Canon's official driver from Canon's support page. Look for "Linux" in the OS filter. Canon provides
.deband.rpmpackages for some models. - Search community resources. The Arch Wiki CUPS page has detailed notes on many Canon models and is useful regardless of your distro.
Scanning
If your printer doubles as a scanner (most all-in-one models do), Linux can handle that too. Here's what you need to know:
Scanning apps
Most Linux desktops come with a scanning app pre-installed:
- Document Scanner (also called "Simple Scan") — the default on GNOME-based desktops (Ubuntu, Fedora, Pop!_OS). Dead simple to use: open it, place your document, and click Scan.
- Skanlite — the default scanner app on KDE Plasma desktops. Similar idea, lightweight and easy.
- XSane — a more advanced option with extra controls for resolution, color settings, and batch scanning. Good if you need more fine-grained control.
If you don't have a scanning app installed:
# GNOME / Cinnamon / MATE desktops
sudo apt install simple-scan # Ubuntu / Debian / Mint
sudo dnf install simple-scan # Fedora
sudo pacman -S simple-scan # Arch / Manjaro
# KDE Plasma desktops
sudo apt install skanlite # Ubuntu / Debian / Mint
sudo dnf install skanlite # Fedora
sudo pacman -S skanlite # Arch / Manjaro
SANE — the scanning system
Behind the scenes, Linux uses a system called SANE (Scanner Access Now Easy) to communicate with scanners. It's the scanning equivalent of CUPS. You usually don't need to think about it, but if your scanner isn't being detected, installing the SANE backends can help:
# Install SANE backends (scanner drivers)
sudo apt install sane-backends libsane-extras # Ubuntu / Debian / Mint
sudo dnf install sane-backends sane-frontends # Fedora
sudo pacman -S sane # Arch / Manjaro
sudo zypper install sane-backends # openSUSE
# Check if SANE can see your scanner
scanimage -L
If scanimage -L lists your scanner, your scanning app should be able to use it.
Scanner drivers by brand
- HP scanners: HPLIP handles both printing and scanning. If you installed
hplipfor your HP printer, scanning should already work. - Epson scanners: Install the
iscanpackage from Epson's website, or use theepkowabackend included in some distros. - Brother scanners: The Brother driver install tool (mentioned above) also sets up scanning support. Run
brsaneconfig4 -qto check if your scanner is configured. - Canon scanners: Varies by model. Check Canon's website for "ScanGear" Linux packages, or try the SANE generic backend.
Common Problems
Printer shows up but won't print
Your printer appears in the list but nothing comes out when you print? This is usually a CUPS issue. Try these steps:
# Check CUPS service status
systemctl status cups
# If it's not running, start it:
sudo systemctl start cups
sudo systemctl enable cups
# Restart CUPS (fixes most issues)
sudo systemctl restart cups
Also check if your printer is paused or in an error state:
# List all printers and their status
lpstat -p -d
# If your printer shows as "paused" or "disabled":
sudo cupsenable YourPrinterName
sudo cupsaccept YourPrinterName
# Clear the print queue (if jobs are stuck)
sudo cancel -a
Poor print quality or garbled output
If your prints come out looking wrong — garbled text, wrong colors, misaligned, or just garbage characters — the problem is usually the driver or PPD file (the file that tells CUPS how to talk to your printer).
- Make sure you have the right driver installed for your specific printer model (see the brand-specific sections above)
- Try a different PPD file: Go to your Printers settings, open your printer's properties, and try switching to a different driver. Sometimes the "recommended" driver isn't the best one.
- Try the generic driver: If your printer supports IPP, switch to the "IPP Everywhere" driver and see if that helps
- Check the print settings: Make sure the paper size matches what's actually loaded in the printer (A4 vs. Letter is a common mismatch)
Scanner not detected
If your scanning app says "No scanners detected," try the following:
# Install SANE backends if not already present
sudo apt install sane-backends # Ubuntu / Debian / Mint
sudo dnf install sane-backends # Fedora
sudo pacman -S sane # Arch / Manjaro
# Check if SANE can detect your scanner
scanimage -L
# If it's a USB scanner, check if the system sees the hardware
lsusb | grep -i -E 'scan|print|hp|brother|epson|canon'
# Make sure your user is in the scanner group
sudo usermod -aG scanner $USER
sudo usermod -aG lp $USER
# Log out and back in for group changes to take effect
If scanimage -L shows nothing, install the manufacturer-specific driver (HPLIP for HP, Brother's installer for Brother, etc.) and try again.
Network printer keeps disappearing
If your network printer shows up sometimes but then vanishes, it's usually a network discovery issue:
# Make sure Avahi (network discovery) is running
sudo systemctl start avahi-daemon
sudo systemctl enable avahi-daemon
# If the printer keeps disappearing, add it manually by IP
# instead of relying on auto-discovery (see "Adding a network printer" above)
Adding the printer by IP address is more reliable than automatic discovery because it doesn't depend on mDNS/Bonjour broadcasts, which can be flaky on some networks.
CUPS web interface — advanced printer management
CUPS has a built-in web interface that gives you full control over your printers. It's especially useful for debugging or for advanced configuration that your desktop settings app doesn't expose.
To access it, open your browser and go to:
http://localhost:631
From here you can:
- Add, remove, or modify printers — sometimes this works when the desktop settings app doesn't
- View the print queue and cancel or restart stuck jobs
- Check error logs — click Troubleshooting or look at the error log for detailed info about what went wrong
- Set default options — paper size, quality, duplex printing, etc.
- Share a printer on your network so other computers can print to it
To increase CUPS logging for debugging:
# Set log level to debug
sudo cupsctl --debug-logging
# View the error log
sudo tail -f /var/log/cups/error_log
# Turn debug logging off when you're done (it fills up fast)
sudo cupsctl --no-debug-logging