Why Trying to Make My HP Laser Printer Work Over the Network Was a Terrible Idea (and What I Learned)

Or: How I Fought a Printer and the Printer Won

I just wanted to print.
Simple, right?
Little did I know I was about to fall into the deepest Linux rabbit hole of my life.


The Setup

I had a HP Laser 107a — cheap, compact, perfect for my light office needs.
And I had a spare Raspberry Pi sitting around.

My thinking was simple:

  • Connect printer via USB to the Pi ✅
  • Run CUPS server on the Pi ✅
  • Share printer over the network ✅
  • Live happily ever after ✅

Easy, right?

WRONG.


The First Attempt: CUPS on Raspberry Pi

I installed CUPS on Raspberry Pi, plugged the printer in via USB,
and expected it to just appear in the web interface.

It didn't.

After some digging, I realized:

  • HP Laser 107a is a GDI-only printer (needs special driver).
  • HP only provides drivers for x86 (Intel/AMD) platforms — NOT ARM (like Raspberry Pi).

✅ No ARM drivers
✅ No rastertospl filter
✅ No love for Raspberry Pi

At that moment, I had two choices:

  • Give up
  • Or find a way to "move" the USB printer to another machine.

The Second Attempt: USBIP and Madness

I discovered USBIP — a Linux technology to share USB devices over network.

Idea:

  • Raspberry Pi keeps USB cable connection to the printer
  • My PC (running CUPS) connects over network as if the printer was local

Sounds smart, right?

Well, in theory...

In practice:

  • Kernel modules (vhci-hcd) needed.
  • Permissions on /dev/bus/usb/... constantly broke.
  • CUPS couldn't find the printer properly.
  • Device files randomly disappeared or reattached.
  • USBIP over Docker containers needed --privileged mode, USB forwarding, and custom backends.

I spent hours writing fake CUPS backends, setting up socket listeners,
and trying to "trick" CUPS into seeing the USBIP device as a real printer.


VirtualHere: Almost a Solution

Then I found VirtualHere — a user-space USB over network tool.

Way easier than USBIP!
But still:

  • Needed manual IP adding (auto-discovery blocked by firewalls)
  • Needed running client software outside Docker
  • Needed careful device mapping into containers

At this point, it felt like every solution created 2 new problems.


The Realization

Sometimes, the smartest move is to stop fighting the hardware.

Instead of wasting more days:

✅ I bought a long USB extension cable.
✅ Plugged the printer directly into my PC.
✅ Installed the HP driver normally.
✅ Printed happily.

Zero Docker.
Zero Raspberry Pi.
Zero USBIP.
Zero VirtualHere.

Peace.


What I Learned

  • HP’s cheap printers are not "real" printers — they are Windows-GDI boxes pretending.
  • ARM platforms (like Raspberry Pi) get no love for exotic USB printers.
  • USBIP is an amazing but overcomplicated technology for home use.
  • Brother printers have a massive fanbase in Linux communities for a reason.
  • Sometimes a €10 USB cable solves €1000 of engineering pain.

My Recommendations

If you are building a home or office printing setup:

✅ Buy a real network printer (with built-in Ethernet/Wi-Fi + IPP support).
Avoid cheap GDI-only HP printers if you want Linux happiness.
✅ If you must keep a GDI printer, plug it directly into a real PC.
✅ Value your time more than saving €10 on hardware.


Closing Thought

I don't regret this experience.
It taught me more about Linux, CUPS, USB, and network printing internals than any guide could.

But if I could go back, I'd slap the printer out of my own hands and whisper:

"Spend €50 more. Save 50 hours of your life."

TL;DR:

  • Printing is easy.
  • Until you buy the wrong printer.

😂🖨️🔥