Skip to content
Tech News
← Back to articles

Reviving old scanners with an in-browser Linux VM bridged to WebUSB over USB/IP

read original get USB to Ethernet Adapter → more articles
Why This Matters

This innovative approach allows users to revive and utilize old USB scanners directly within a web browser by leveraging in-browser Linux VMs and WebUSB bridging. It simplifies access to legacy hardware without needing dedicated drivers or complex setups, making it highly relevant for consumers and the tech industry seeking cost-effective hardware reuse and preservation. This development could extend the lifespan of older peripherals and enhance accessibility for users with legacy devices.

Key Takeaways

<< Home

Yes We Scan: backstory and how it works

Do you have an old USB scanner that your computer can’t talk to? If so, this is the web app for you. And this is how it came about. But first, here’s a short demo of yes-we-scan.app in action (at 3x actual speed):

It starts with a printervention

I started out wanting to make an old Canon photo printer usable by my parents and in-laws. So I made printervention.app, which I wrote about before.

While working on that app, I remembered I also had an old Canon USB scanner tucked away on a shelf. The last time I’d used that, I think I’d resorted to setting up a Windows 95 VM. But the same technology that powers printervention.app would clearly work for scanners too.

How does it work?

The core of both apps is the amazing v86, which emulates an x86 CPU — and the whole machine around it — in a browser. It compiles machine code to WebAssembly modules at runtime, which is rather clever and makes the whole thing tolerably quick.

So I set up an emulated v86 machine to run SANE (Scanner Access Now Easy) on Alpine Linux, discreetly, in your browser.

The interface between your browser and SANE is provided by a small custom C program that Claude helped write. This connects to the scanner, provides a JSON dump of its settings we can use to build a settings UI, and streams scan data over the hypervisor console (hvc0) in v86.

... continue reading