When you have a usb multifunction printer like I do and you are trying to use the scanner in linux, you may encounter the following behaviour:
When you try to use your scanner using sane (scanimage, xsane, kooka, ...) it seems that nothing happens or you
may receive an error message "error starting printer: invalid argument".
This is normally caused by one of two things:
- missing permission to use the usb device
- usb device is blocked by another driver
The first case is easy:
udev creates the device node with default permissions, what is not good in this case.
You can fix this by creating/editing the file "/etc/udev/rules.d/010_local.rules":
Add lines similar to these ones to the file (this is debianish syntax, see
[1] for others) :
#Brother
SYSFS{idVendor}=="04f9",MODE="664",GROUP="scanner"
Instead of the 04f9 above, insert the vendor id of your device as shown by lsusb.
Now simply add all users allowed to use the scanner to the group scanner using adduser and restart the OS.
(this is a transcript of
[1].)
The second case is more tricky:
As your device is also a printer (or even worse, has a card reader included), the modules usblp and usb_storage may claim the device.
In this case, you have two options:
Call
modprobe -r usblp usb_storage before scanning and
modprobe usblp usb_storage after scanning
-or-
Update your sane-backend:
The native backends since libsane 1.0.17-1 are fixed to ignore the "EBUSY" state of the device and simply try scanning, but when you have
other backends such as the one provided by Brother, you have to compile it yourself with the fixed libsane code or wait until your manufacturer releases updates backends. (
do send him an email and ask for it! 
)
[1] Brother's description about udev scanner permissions