-
SANE: Network Access to a USB Scanner in Xubuntu 12.04
The missing link turns out to be assigning a device node with the proper owner, group, and permissions to let
sanedshare the scanner over the network. IIRC, this worked right out of the box in previous versions of Xubuntu, but now requires manual tweakage.That post gives the steps for my old SCSI scanner. It turns out that the
udevrule is not optional for USB scanners… at least not in 12.04, anyway.In order to build the
udevrule, you start withlsusb:Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 002: ID 0424:2504 Standard Microsystems Corp. USB 2.0 Hub Bus 002 Device 005: ID 0d8c:000c C-Media Electronics, Inc. Audio Adapter Bus 002 Device 006: ID 046d:c52f Logitech, Inc. Wireless Mouse M305 Bus 008 Device 006: ID 04a9:220e Canon, Inc. CanoScan N1240U/LiDE 30 Bus 008 Device 003: ID 413c:1003 Dell Computer Corp. Keyboard Hub Bus 008 Device 004: ID 413c:2010 Dell Computer Corp. Keyboard
That gives you the bus and device numbers, which means the corresponding device is, at least right now:
/dev/bus/usb/008/006The
udevinfocommand I used a while ago has Gone Away, replaced byudevadmwith even more syntactic sugar:udevadm info --query=all --attribute-walk --name=/dev/bus/usb/008/006Which produces a ton of information, starting with:
looking at device '/devices/pci0000:00/0000:00:1d.2/usb8/8-1': KERNEL=="8-1" SUBSYSTEM=="usb" DRIVER=="usb" ATTR{configuration}=="" ATTR{bNumInterfaces}==" 1" ATTR{bConfigurationValue}=="1" ATTR{bmAttributes}=="a0" ATTR{bMaxPower}=="500mA" ATTR{urbnum}=="18658" ATTR{idVendor}=="04a9" ATTR{idProduct}=="220e" ATTR{bcdDevice}=="0100" ATTR{bDeviceClass}=="ff" ATTR{bDeviceSubClass}=="00" ATTR{bDeviceProtocol}=="ff" ATTR{bNumConfigurations}=="1" ATTR{bMaxPacketSize0}=="8" ATTR{speed}=="12" ATTR{busnum}=="8" ATTR{devnum}=="6" ATTR{devpath}=="1" ATTR{version}==" 1.10" ATTR{maxchild}=="0" ATTR{quirks}=="0x0" ATTR{avoid_reset_quirk}=="0" ATTR{authorized}=="1" ATTR{manufacturer}=="Canon" ATTR{product}=="CanoScan"Extracting the two highlighted values lets you create a
udevrule. If yourudev-fuis strong, you can pluck them directly from thelsusboutput.I created a new file:
/etc/udev/rules.d/60-scanner.rulesWhich contains this rule:
# Canon LiDE 30 scanner ATTRS{idVendor}=="04a9",ATTRS{idProduct}=="220e",SYMLINK+="scanner",MODE="0660",OWNER="root",GROUP="saned"Based on the advice there, I added the port number to the
/etc/xinetd.d/sanedstanza, but I’m not sure it’s needed:service sane-port { port = 6566 socket_type = stream server = /usr/sbin/saned protocol = tcp user = saned group = scanner wait = no disable = no }After doing all the rest of the
sanedandxinetdsetup, unplug and replug the scanner, which should produce these devices:ll /dev/bus/usb/008/006 /dev/scan* crw-rw----+ 1 root saned 189, 901 Jan 5 21:30 /dev/bus/usb/008/006 lrwxrwxrwx 1 root root 15 Jan 5 21:14 /dev/scanner -> bus/usb/008/006
And then it should Just Work…