First, install Avahi and SANE on the server:

sudo apt install avahi-daemon libnss-mdns sane-utils

Then edit the SANE daemon configuration:

# Set to yes to start saned

Add user saned to the lp and scanner groups.

sudo usermod -a -G lp,scanner saned

Check whether your scanner is recognized. If it’s not, you’re probably missing a driver, such as hplip. Or worse.

scanimage -L

The output will look something like this:

device 'hpaio:/usb/Photosmart_C4500_series' is a Hewlett-Packard Photosmart_C4500_series all-in-one

If all is well, edit the SANE server configuration and add your subnet to the access list.

# The hostname matching is not case-sensitive.

If you’re using a firewall (ufw in this case), you’ll have to open some ports:

sudo ufw allow from to any port 5353 proto udp
sudo ufw allow from to any port 6566 proto tcp
sudo ufw allow from to any port 40000:40100 proto tcp

Then set the port range in /etc/sane.d/saned.conf accordingly:

# Port range for the data connection.
data_portrange = 40000 - 40100

Finally, start saned:

sudo systemctl start saned.socket
sudo systemctl enable saned.socket

All that’s left to do now is having the client computers look for the SANE server. Unlike CUPS, this isn’t autodetected.
Edit /etc/sane.d/net.conf and add your server’s hostname or IP address to the bottom.


Launch Simple Scan (or another SANE front-end), and your network scanner should be found within a few seconds.