scanning only works under "sudo"

When I try to scan, using simple-scan, the UI says Failed to scan -- Unable to connect to scanner. When I run it from the command line I get:

joel@home:/usr/bin$ simple-scan -d
** (simple-scan:6554): DEBUG: Starting Simple Scan 2.32.0.1, PID=6554
** (simple-scan:6554): DEBUG: Restoring window to 600x400 pixels
** (simple-scan:6554): DEBUG: sane_init () -> SANE_STATUS_GOOD
** (simple-scan:6554): DEBUG: SANE version 1.0.22
** (simple-scan:6554): DEBUG: Requesting redetection of scan devices
** (simple-scan:6554): DEBUG: Processing request
** (simple-scan:6554): DEBUG: Requesting scan at 300 dpi from device '(null)'
** (simple-scan:6554): DEBUG: scanner_scan ("(null)", 300, SCAN_SINGLE)
** (simple-scan:6554): DEBUG: sane_get_devices () -> SANE_STATUS_GOOD
** (simple-scan:6554): DEBUG: Device: name="brother2:bus4;dev1" vendor="Brother" model="MFC-210C" type="USB scanner"
** (simple-scan:6554): DEBUG: Processing request
** (simple-scan:6554): DEBUG: sane_open ("brother2:bus4;dev1") -> SANE_STATUS_IO_ERROR

** (simple-scan:6554): WARNING **: Unable to get open device: Error during device I/O

FYI, I have already done:

joel@home:~$ sudo chmod a+rwx /dev/bus/usb
joel@home:~$ sudo chmod a+rwx /dev/bus/usb/*

If I run under sudo:

joel@home:~$ sudo simple-scan

it works.

How can I get simple-scan to work without sudo?


Solution 1:

Chances are that saned doesn't think you're allowed to connect to it. See the Permissions Issues section of the Ubuntu Scanning How-to for details.

Solution 2:

I had a similar problem (Ubuntu 11.04 - Natty Narwhal): Scanning as root works fine, scanning as user – no go. scanimage -L and sane-find-scanner found and identified the the scanner correctly, even when run as normal user. `simple-scan -d both as root and normal user didn't show up anything useful in terms of missing group right, missing files or drivers.

Eventually this link worked for me.

The solution was editing these files:

  • /lib/udev/rules.d/40-libsane.rules
  • /etc/udev/rules.d/55-libsane.rules

Not sure if both needed to be edited, I applied all changes as described. Very important: REBOOT after editing.

Solution 3:

I solved it by adding this line to /etc/rc.local (before exit 0):

chmod -R a+w /dev/bus/usb

and editing/creating the following 2 files:

/etc/xinetd.d/saned:

service saned 
{
socket_type = stream
server = /usr/sbin/saned
protocol = tcp
user = root
group = root
wait = no
disable = no
}

/etc/default/saned:

# Defaults for the saned initscript, from sane-utils

# Set to yes to start saned
RUN=yes

# Set to the user saned should run as
RUN_AS_USER=root

then rebooting.

It's working, but I still would like a more secure way of solving this.

Solution 4:

Edit the following:

/etc/default/saned

And change the:

RUN_AS_USER=saned

to

RUN_AS_USER=root

Restart and test again – this should be working.