Shani OS ships a comprehensive printing and scanning stack that handles most modern hardware without any driver installation. The CUPS print system, ipp-usb for driverless USB printing, sane-airscan for driverless network scanning, and manufacturer-specific drivers for HP, Epson, Brother, and Canon are all pre-installed.
Printer and scanner configuration persists across every OS update and rollback via bind mounts from @data — you set up your printer once and it stays set up forever.
Full reference: docs.shani.dev — Printing & Scanning.
---
Driverless Printing (Most Modern Printers)
Any printer manufactured after roughly 2016 that supports IPP Everywhere (AirPrint, Mopria) works without any driver installation. Plug in via USB or connect to your network and CUPS discovers it automatically.
USB Printers
ipp-usb is pre-installed and enabled. When you plug in a modern USB printer, ipp-usb creates a network-accessible IPP endpoint for it. CUPS then sees the printer as a network printer.
# Check if ipp-usb detected your printer
systemctl status ipp-usb
journalctl -u ipp-usb -n 20
# List detected ipp-usb devices
ippusbxd --list # if available
ls /dev/usb/
Most USB printers appear automatically in GNOME Printers or KDE Print Manager.
Network Printers
Network printers (Wi-Fi and Ethernet) are discovered via Avahi (mDNS/DNS-SD), which is active from first boot. Printers on the same network appear automatically in GNOME Printers (Settings → Printers) and KDE System Settings → Printers.
# Manually discover network printers
avahi-browse -r _ipp._tcp
avahi-browse -r _ipps._tcp # secure IPP
# Add a printer by its network address (when auto-discovery fails)
lpadmin -p "MyPrinter" -E -v "ipp://192.168.1.100/ipp/print" -m everywhere
Adding Printers via GUI
GNOME: Settings → Printers → Unlock → click +
KDE: System Settings → Printers → Add Printer
Both interfaces show discovered printers. Select one, confirm the settings, and print a test page.
---
Manufacturer-Specific Drivers
For older printers or printers that need a proprietary driver, the following are pre-installed:
HP Printers (hplip-minimal)
# HP printer setup tool
hp-setup
# Check HP device status
hp-check
# HP print and scan tool
hp-toolbox
# List detected HP devices
hp-info
For full HP functionality including ink levels and alignment, hp-setup handles most HP LaserJet and DeskJet models.
Epson Printers (epson-inkjet-printer-escpr2)
Epson's ESC/P-R2 driver covers most modern Epson inkjet printers. The driver is pre-installed — connect your printer and it should be detected.
# Check if Epson driver is loaded
lpinfo -m | grep -i epson
Brother Printers (brlaser)
# Check available Brother models
lpinfo -m | grep -i brother
# Add a Brother printer with the brlaser driver
lpadmin -p "BrotherHL" -E -v "usb://Brother/..." -m brother/brhl1110.ppd
Canon Printers (cnijfilter2)
# List available Canon models
lpinfo -m | grep -i canon
Generic PCL Printers
foo2zjs-nightly and splix cover many generic PCL and SPL printers. If your printer is not covered by a specific driver, try:
lpinfo -m | grep -i "postscript\|pcl\|generic"
---
CUPS Web Interface
CUPS provides a web administration interface at http://localhost:631:
# Ensure CUPS is running
systemctl status cups.socket
# Open the web interface
xdg-open http://localhost:631
From the CUPS web interface you can add printers, manage print queues, view job history, and configure printer options.
---
Command-Line Printing
# Print a file
lpr document.pdf
lpr -P "PrinterName" document.pdf
# Print with options
lpr -o sides=two-sided-long-edge document.pdf # duplex
lpr -o media=A4 document.pdf # paper size
lpr -o number-up=2 document.pdf # 2 pages per sheet
# List available printers
lpstat -p
# Check print queue
lpq
lpq -P "PrinterName"
# Cancel a job
lprm <job-id>
lprm -P "PrinterName" -
# List available printer options
lpoptions -p "PrinterName" -l
---
Scanning with SANE
SANE (Scanner Access Now Easy) is the Linux scanning backend. sane-airscan extends it with support for network scanners that use IPP Scan (AirScan) — most modern multi-function printers.
Discovering Scanners
# List all detected scanners
scanimage -L
# List network scanners discovered by sane-airscan
sudo journalctl -u saned -n 20
GNOME: Simple Scan is pre-installed. Open it from your application launcher — it detects available scanners automatically.
KDE: Skanlite is pre-installed. Open it from your application launcher.
Command-Line Scanning
# Scan to a file (auto-detects the first available scanner)
scanimage > scan.pnm
# Scan to PNG
scanimage --format=png > scan.png
# Scan at 300 DPI
scanimage --resolution=300 > scan.pnm
# Scan a specific area (in mm)
scanimage --scan-area="A4" > scan.pnm
# List available scanner options
scanimage --help -d "SCANNER_DEVICE_NAME"
---
Network Scanning (sane-airscan)
sane-airscan discovers and uses network scanners automatically, no configuration required for most devices. If auto-discovery does not work:
# Create manual configuration
sudo nano /etc/sane.d/airscan.conf
# Add your scanner manually
[devices]
"My Scanner" = http://192.168.1.100:9095/
---
Troubleshooting Printing
Printer Appears Offline
# Check CUPS status
lpstat -r
# Restart CUPS
sudo systemctl restart cups
# Enable a printer that shows as disabled
sudo cupsenable "PrinterName"
sudo cupsaccept "PrinterName"
USB Printer Not Detected
# Check if the kernel sees the printer
lsusb | grep -i "printer\|hp\|epson\|brother\|canon"
# Check ipp-usb
systemctl restart ipp-usb
journalctl -u ipp-usb -n 30
# Check CUPS permissions
ls -la /dev/usb/
Scanner Not Detected
# Check scanner permissions
lsusb | grep -i "scanner\|hp\|epson"
# Try with sudo to rule out permissions
sudo scanimage -L
# If found with sudo but not as user, add yourself to the scanner group
# (Shani OS does this automatically for new users, but check)
groups | grep scanner
Full troubleshooting reference: docs.shani.dev — Printing & Scanning.
---
Persistence Across Updates
CUPS printer configuration lives in /var/lib/cups/ and /etc/cups/. Both persist via Shani OS's bind mount system:
/var/lib/cupsis bind-mounted from/data/varlib/cups/etc/cupschanges persist via the OverlayFS
You configure your printer once. OS updates and rollbacks leave your printer configuration completely untouched.
---
Resources
- Shani OS Troubleshooting Guide — when things go wrong
- docs.shani.dev — Printing & Scanning — troubleshooting reference
- CUPS documentation
- Telegram community
---
Built in India 🇮🇳 · Immutable · Atomic · Zero Telemetry