I'm having trouble getting the scanner of my Brother DCP-7055W working over WLAN. I've already installed the official drivers from Brother, and the printer itself is working fine.
I've set up the scanner to use a static IP address (192.168.002.150). Using Brother's brsaneconfig4
I've added the scanner as follows (using 002
instead of 2
following this tip):
brsaneconfig4 -a name=DCP-7055W model=DCP-7055W ip=192.168.002.150
Pinging the scanner works fine:
$ brsaneconfig4 -p
test DCP-7055W
ping 192.168.002.150 -w 10
PING 192.168.002.150 (192.168.2.150) 56(84) bytes of data.
64 bytes from 192.168.2.150: icmp_req=1 ttl=255 time=9.21 ms
64 bytes from 192.168.2.150: icmp_req=2 ttl=255 time=5.67 ms
64 bytes from 192.168.2.150: icmp_req=3 ttl=255 time=6.01 ms
64 bytes from 192.168.2.150: icmp_req=4 ttl=255 time=3.33 ms
I've also made sure that the issue with 64bit drivers is fixed:
$ ls -l /usr/lib/sane/libsane-brother4*
lrwxrwxrwx 1 root root 35 Sep 25 07:18 /usr/lib/sane/libsane-brother4.so -> /usr/lib/sane/libsane-brother4.so.1
lrwxrwxrwx 1 root root 39 Sep 25 07:18 /usr/lib/sane/libsane-brother4.so.1 -> /usr/lib/sane/libsane-brother4.so.1.0.7
-rwxr-xr-x 1 root root 129376 Sep 25 07:18 /usr/lib/sane/libsane-brother4.so.1.0.7
I've also fixed the UDEV rules according to this answer:
$ grep saned /lib/udev/rules.d/40-libsane.rules
ENV{DEVTYPE}=="usb_device", MODE="0664", OWNER="root", GROUP="saned"
However, I cannot actually scan: Whatever tool I try, I get the following error:
$ scanimage -T
scanimage: open of device brother4:net1;dev0 failed: Invalid argument
This happens both as normal user and when using sudo
, so it shouldn't be a permission problem.
What am I missing?
UPDATE 1: Now with some more verbose debug output:
# SANE_DEBUG_BROTHER4=255 scanimage
[sanei_debug] Setting debug level of brother4 to 255.
[brother4] brother init
[brother4] brother version: 1000001
[brother4] starting bus scan
[brother4] scanning bus 005
[brother4] found dev 0483/2016
[brother4] found dev 1D6B/0001
[brother4] scanning bus 004
[brother4] found dev 1D6B/0001
[brother4] scanning bus 003
[brother4] found dev 1D6B/0001
[brother4] scanning bus 002
[brother4] found dev 1D6B/0001
[brother4] scanning bus 001
[brother4] found dev 18A5/0302
[brother4] found dev 1D6B/0002
scanimage: open of device brother4:net1;dev0 failed: Invalid argument
UPDATE 2: I now also tried using the scanner via USB. I get the same error ("Invalid argument"), but at a later point in the scanning process:
# SANE_DEBUG_BROTHER4=255 scanimage -T
[sanei_debug] Setting debug level of brother4 to 255.
[brother4] brother init
[brother4] brother version: 1000001
[brother4] starting bus scan
[brother4] scanning bus 005
[brother4] found dev 0483/2016
[brother4] found dev 1D6B/0001
[brother4] scanning bus 004
[brother4] found dev 1D6B/0001
[brother4] scanning bus 003
[brother4] found dev 1D6B/0001
[brother4] scanning bus 002
[brother4] found dev 1D6B/0001
[brother4] scanning bus 001
[brother4] found dev 04F9/02CE
[brother4] found dev 1D6B/0002
scanimage: rounded value of br-x from 215.9 to 215.88
scanimage: rounded value of br-y from 355.6 to 355.567
scanimage: sane_start: Invalid argument
[brother4] cancel called...
A Brother scanner FAQ mentions that this could be due to the scanning area being to small, but passing -x 100 -y 100
to scanimage
doesn't change anything. I also tried to explicitly pass all other arguments that scanimage -h
returned for the scanner, but without success.
Installing libsane-extras
, as suggested here did not change anything.
Following the troubleshooting of a similar problem, I've run
# strace -o strace.out -f scanimage -T
At the end of the output, there's the following:
4019 ioctl(151, USBDEVFS_SUBMITURB or USBDEVFS_SUBMITURB32, 0xbfbfe0a8) = -1 ENOENT (No such file or directory)
4019 gettimeofday({1387487538, 170759}, NULL) = 0
4019 ioctl(151, USBDEVFS_SUBMITURB or USBDEVFS_SUBMITURB32, 0xbfbfe0a8) = -1 ENOENT (No such file or directory)
4019 gettimeofday({1387487538, 170926}, {4294967236, 0}) = 0
4019 gettimeofday({1387487538, 171013}, {4294967236, 0}) = 0
4019 gettimeofday({1387487538, 171104}, NULL) = 0
4019 ioctl(151, USBDEVFS_SUBMITURB or USBDEVFS_SUBMITURB32, 0xbfbfe068) = -1 ENOENT (No such file or directory)
4019 write(2, "scanimage: sane_start: Invalid a"..., 40) = 40
4019 ioctl(151, USBDEVFS_CONTROL or USBDEVFS_CONTROL32, 0xbfbfe2e0) = 5
4019 ioctl(151, USBDEVFS_RELEASEINTERFACE, 0xbfbfe304) = 0
4019 semop(1245186, {{0, 1, SEM_UNDO}}, 1) = 0
4019 semctl(1245186, 0, IPC_64|IPC_RMID, 0xbfbfe2b8) = 0
4019 close(151) = 0
4019 munmap(0xb755a000, 134532) = 0
4019 munmap(0xb7525000, 104424) = 0
4019 munmap(0xb751b000, 38084) = 0
4019 munmap(0xb74ef000, 176256) = 0
4019 exit_group(4) = ?
The whole log is full of ioctl
calls referring to USBDEFVS_SUBMITURB
and getting a No such file or directory
. However I don't know enough about the Linux USB internals to make sense of that.
UPDATE 3: My kernel:
# uname -r
3.2.0-57-generic-pae
Relevant output from dmesg
:
[10210.399432] usb 1-1: usbfs: interface 0 claimed by usblp while 'scanimage' sets config #1
[10210.399446] usb 1-1: usbfs: process 5347 (scanimage) did not claim interface 1 before use
[10211.428906] usb 1-1: usbfs: interface 0 claimed by usblp while 'scanimage' sets config #1
[10213.519554] usb 1-1: usbfs: interface 0 claimed by usblp while 'scanimage' sets config #1
[10213.519567] usb 1-1: usbfs: process 5352 (scanimage) did not claim interface 1 before use
[10214.549025] usb 1-1: usbfs: interface 0 claimed by usblp while 'scanimage' sets config #1