TWAIN, WIA, ISIS and SANE, are all scanning drivers that support acquiring physical images from scanners and storing the digital images on a computer. Although they are trying to achieve the same task basically, a popularity search shows that TWAIN is leading the game. TWAIN, WIA, ISIS and SANE, are all scanning drivers that support acquiring physical images from scanners and storing the digital images on a computer. Although they are trying to achieve the same task basically, a popularity research I did recently shows that TWAIN is leading in the game (you can open an interactive view by clicking the image).
Sharing a scanner over the network using SANE isfairly straightforward. Here's how I shared a scanner on a server (runningDebian jessie) with a client (running Ubuntu trusty).
The packages you need on both the client and the server are:
You should check whether or your scanner issupported by the latest stable release orby thelatest development version.
In my case, I needed to get aCanon LiDE 220working so I had to grab the libsane 1.0.25+git20150528-1 package from Debian experimental.
Once you have SANE installed, you can test it out locally to confirm that itdetects your scanner:
Note that you may need to be root for this to work. We'll fix that inthe next section.
This should give you output similar to this:
If that doesn't work, make sure that the scanner is actually detected by theUSB stack:
and that its USB ID shows up in the SANE backend it needs:
To do a test scan, simply run:

and then take a look at the (greyscale) image it produced (test.pnm
).
In order for users to be able to see the scanner, they will need to be inthe scanner
group:
with the second one being for remote users.
Next, you'll need to put this in /etc/udev/rules.d/55-libsane.rules
:
and then restart udev:
That 04a9
ID is the first part of what you saw in lsusb
, but you canalso see it in the output of sane-find-scanner
.
Finally, test the scanner as your normal user:
to confirm that everything is working.
With the scanner working locally, it's time to expose it to network clientsby adding the client IP addresses to /etc/sane.d/saned.conf
:
and then opening the appropriate ports on your firewall(typically /etc/network/iptables
in Debian):
Then you need to ensure that the SANE server is running by setting thefollowing in /etc/default/saned
:
if you're using the sysv init system, or by running this command:
if using systemd.
I actually had to reboot to make saned visible to systemd, so if you stillrun into these errors:
you're probably just one reboot away from getting it to work.
On the client, all you need to do is add the following to/etc/sane.d/net.conf
:
where myserver
is the hostname or IP address of the server running saned.
If you have a firewall runnning on the client, make sure you allowSANE traffic from the server:
With everything in place, you should be able to see the scanner from theclient computer:
and successfully perform a test scan using this command:
If you see the following error in your logs (systemctl status saned.socket
):
Twain Sane Drivers
then you can work around this bug in the systemdunit byoverriding the systemd unit that comes with thepackage:
then replace:
with:
before finally restarting the service:

Sharing a scanner over the network using SANE isfairly straightforward. Here's how I shared a scanner on a server (runningDebian jessie) with a client (running Ubuntu trusty).
The packages you need on both the client and the server are:
You should check whether or your scanner issupported by the latest stable release orby thelatest development version.
In my case, I needed to get aCanon LiDE 220working so I had to grab the libsane 1.0.25+git20150528-1 package from Debian experimental.
Once you have SANE installed, you can test it out locally to confirm that itdetects your scanner:

Note that you may need to be root for this to work. We'll fix that inthe next section.
This should give you output similar to this:
If that doesn't work, make sure that the scanner is actually detected by theUSB stack:
and that its USB ID shows up in the SANE backend it needs:
To do a test scan, simply run:
and then take a look at the (greyscale) image it produced (test.pnm
).
In order for users to be able to see the scanner, they will need to be inthe scanner
group:
with the second one being for remote users.
Next, you'll need to put this in /etc/udev/rules.d/55-libsane.rules
:
and then restart udev:
That 04a9
ID is the first part of what you saw in lsusb
, but you canalso see it in the output of sane-find-scanner
.
Finally, test the scanner as your normal user:
to confirm that everything is working.
With the scanner working locally, it's time to expose it to network clientsby adding the client IP addresses to /etc/sane.d/saned.conf
:
and then opening the appropriate ports on your firewall(typically /etc/network/iptables
in Debian):
Then you need to ensure that the SANE server is running by setting thefollowing in /etc/default/saned
:
if you're using the sysv init system, or by running this command:
if using systemd.

I actually had to reboot to make saned visible to systemd, so if you stillrun into these errors:
you're probably just one reboot away from getting it to work.
On the client, all you need to do is add the following to/etc/sane.d/net.conf
:
where myserver
is the hostname or IP address of the server running saned.
If you have a firewall runnning on the client, make sure you allowSANE traffic from the server:
Twain Vs Sane
With everything in place, you should be able to see the scanner from theclient computer:
and successfully perform a test scan using this command:
If you see the following error in your logs (systemctl status saned.socket
):
then you can work around this bug in the systemdunit byoverriding the systemd unit that comes with thepackage:
then replace:

with:
Twain Sane Download
before finally restarting the service:
