Ubuntu – How to get a Brother DCP-350C scanner working

brotherdriverssanescannersimplescan

Downloaded and installed the linux drivers from the Brother site here.

But the scanner still wasn't recognised.

You can see here, the drivers installed successfully:

$ dpkg  -l  |  grep  Brother
ii  brother-cups-wrapper-common                          1.0.0-10-0ubuntu6                                        amd64        Common files for Brother cups wrapper packages
ii  brother-udev-rule-type1                              1.0.0-1                                                  all          Brother udev rule type 1
ii  brscan-skey                                          0.2.4-1                                                  amd64        Brother Linux scanner S-KEY tool
ii  brscan2                                              0.2.5-1                                                  amd64        Brother Scanner Driver
ii  printer-driver-brlaser                               3-5~ubuntu1                                              amd64        printer driver for (some) Brother laser printers
ii  printer-driver-ptouch                                1.4-1                                                    amd64        printer driver Brother P-touch label printers

And here, you can see the installed driver thinks it is not 'registered':

$ brscan-skey -l

 DCP-350C          : brother2:bus3;dev1  : USB                  Not registered

When I open Simple Scan, it tells me I have a Brother scanner but that I need to install the drivers.

$ lsusb
Bus 003 Device 002: ID 04f9:01d0 Brother Industries, Ltd DCP-350C

$ sudo dpkg -l | grep Brother
ii  brother-cups-wrapper-common                          1.0.0-10-0ubuntu6                                        amd64        Common files for Brother cups wrapper packages
ii  brother-udev-rule-type1                              1.0.0-1                                                  all          Brother udev rule type 1
ii  brscan-skey                                          0.2.4-1                                                  amd64        Brother Linux scanner S-KEY tool
ii  brscan2                                              0.2.5-1                                                  amd64        Brother Scanner Driver
ii  printer-driver-brlaser                               3-5~ubuntu1                                              amd64        printer driver for (some) Brother laser printers
ii  printer-driver-ptouch                                1.4-1                                                    amd64        printer driver Brother P-touch label printers

Brother seems to have removed the linux o/s config instructions from its support pages – i.e. here and here, which had been the source of earlier solutions to this problem given here and here. The OS support information page in its FAQS and Troubleshooting section refer only to Windows and Macintosh. If you look elsewhere, you will find a page of linux information. It says "The Brother Linux scanner driver works only with a superuser by default". It points to a page where it says is given the means to make the scanner work for non-sudo users – perhaps, then, SimpleScan. That page contains fix downloads for numerous OSs, but nothing later than Ubuntu 13.10. Downloading and installing that file all the same does nothing to make the scanner work. If you grub around long enough you will find there is a linux troubleshooting FAQ after all – just not in the place where you would expect to find it. Getting this Brother scanner to work is like threading a needle in a wind tunnel. The first item on the linux FAQ is 'I'm using Ubuntu 16.10. I cannot scan from my Brother Machine'. That is close enough. It says 'Install libusb-0.1-4'. (The Brother driver had dependencies but it did not bother to check them). I do have this usb lib installed already anyway.

One of the earlier solutions (for a different Brother scanner – and the Brother support page with the solution has since disappeared), is quite helpful. It says to put a line in '/lib/udev/rules.d/40-libsane.rules', though in fact it should, on my 16.04 at least, be /lib/udev/rules.d/60-libsane.rules. And the line it asks you to add includes a reference to a product ID for a different Brother scanner. Looking on the sane website for a DCP-350C product ID (it wouldn't be DCP-350C — that would be too easy — the earlier solution is for a DCP-7030 and that has a product ID of "01ea")… so where were we?… looking on the sane website for a DCP-350C product ID. The sane page for Brother scanners has no entry for the DCP-350C. It says if your device isn't there it's not supported. It says the page was last updated on Oct 05 2003. That's fourteen and a half years ago. I believe the 350C came out a few years later, in 2007.

So the old solution for the DCP-7030 said to add edit the sane config thus:

sudo gedit /lib/udev/rules.d/40-libsane.rules

And to add this (in the right place):

# Brother scanners
ATTRS{idVendor}=="04f9", ATTRS{idProduct}=="01ea", ENV{libsane_matched}="yes"

Since my config appears to be in 60-libsane.rules and I don't have a product code, I edited the config thus:

sudo gedit /lib/udev/rules.d/60-libsane.rules

And added:

# Brother scanners
ATTRS{idVendor}=="04f9", ENV{libsane_matched}="yes"

And restarted the machine. This did not work.

I also moved some files the Brother intsall routine seems to put in the wrong place – at least, according to reports elsewhere such as here.

That involved copying Brother files from cp /usr/lib64/ to /usr/lib. (I had downloaded and installed the 64-bit version of the Brother driver).

The instructions to do this seemed out of date. And since Brother's website says its Brscan2 driver must be used with the DCP-350C, the filenames may differ. I copied mine thus:

sudo cp /usr/lib64/libbrscandec2.so /usr/lib
sudo cp /usr/lib64/libbrscandec2.so.1 /usr/lib
sudo cp /usr/lib64/libbrscandec2.so.1.0.0 /lib/lib
sudo cp /usr/lib64/sane/libsane-brother2.so /usr/lib/sane
sudo cp /usr/lib64/sane/libsane-brother2.so.1 /usr/lib/sane
sudo cp /usr/lib64/sane/libsane-brother2.so.1.0.7 /usr/lib/sane
sudo cp /usr/lib64/libbrcolm2.so /usr/lib
sudo cp /usr/lib64/libbrcolm2.so.1 /usr/lib
sudo cp /usr/lib64/libbrcolm2.so.1.0.1 /usr/lib

This blind alley was suggested by Brother itself. It's linux FAQ for the DCP-350C (if you can find it), says (for "Ubuntu 11.10 or higher"):

Copy the following files under /usr/lib64/ to /usr/lib/.

Another tip was to actually run the brscan-skey file that is offered as download with the driver, by simply entering brscan-skey at the command line.

At some point, something must have gone right because the Brother driver now tells me the device is recognised:

$ brscan-skey -l

 DCP-350C          : brother2:bus3;dev1  : USB                  Not registered

However, SimpleScan still says no devices are recognised.

Also, Brother says that brscan-skey allows scanning to be performed from the scanner's own console, using its 'scan-to-file' and 'scan-to-image' options. When I do so, the scanner says 'Connecting to PC', but nothing more happens.

I can get the 350C to scan when I call it from a trial version of a commercial linux scanning tool called VueScan. But the trial version puts water marks across the scanned image, making it useless to me. Moreover, the full version is expensive, and demands an annual subscription. And I only came across it while trying to find a way to get SimpleScan to work – or indeed, any open source scanning software.

The point is that VueScan just works. (But it does so in a way that leaves the scanner dysfunctional to other tools). It proves the scanner can be used with open source tools on Ubuntu. The question is how.

Best Answer

Short Answer

The drivers you found are old versions:

$ dpkg  -l  |  grep  Brother
ii  brother-cups-wrapper-common                1.0.0-10-0ubuntu6                                        amd64        Common files for Brother cups wrapper packages
ii  brother-udev-rule-type1                    1.0.0-1                                                  all          Brother udev rule type 1
ii  brscan-skey                                0.2.4-1                                                  amd64        Brother Linux scanner S-KEY tool
ii  brscan2                                    0.2.5-1                                                  amd64        Brother Scanner Driver
ii  printer-driver-brlaser                     3-5~ubuntu1                                              amd64        printer driver for (some) Brother laser printers
ii  printer-driver-ptouch                      1.4-1                                                    amd64        printer driver Brother P-touch label printers

The newest versions are:

$ dpkg -l | grep -i brother
ii  brother-udev-rule-type1                    1.0.2                                        all          Brother udev rule type 1
ii  brscan-skey                                0.2.4-1                                      amd64        Brother Linux scanner S-KEY tool
ii  brscan4                                    0.4.4-3                                      amd64        Brother Scanner Driver
ii  cupswrapperdcp7065dn:i386                  2.0.4-2                                      i386         Brother DCP7065DN CUPS wrapper driver
ii  dcp7065dnlpr:i386                          2.1.0-1                                      i386         Brother DCP-7065DN LPR driver
ii  printer-driver-brlaser                     3-5~ubuntu1                                  amd64        printer driver for (some) Brother laser printers
ii  printer-driver-ptouch                      1.4-1                                        amd64        printer driver Brother P-touch label printers
  • udev rule upgraded from 1.0.0-1 to 1.0.2
  • brscan2 version 0.2.5-1 upgraded to brscan4 version 0.4.4-3

Also you have a generic cups-wrapper where as mine is model specific.


TL:DR; Very, very LONG ANSWER

Much of the long answer is trial and error. You need only follow Step 1, Step 2, the first part of Step 3 (stop at selecting scanner only). Then skip down to Step 6 and Step 7.


Background

I have a Brother DCP-7065DN which is a nice monochrome double sided laser printer. I've had it for three years but have never used the scanner feature primarily because "whose got paper to scan in an electronic world?". Due to your question I thought it was time to get the scanner function working.

Comparing DCP-7065DN to DCP-350C

According to this post in Ubuntu Forums the same Brother Driver tool works for both your DCP-350C and my DCP-7065DN printer.


Current installation tools

Your question contains no less than 15 links and I noticed the site of your first link is out-dated:

Brother Scanner Old

The Ubuntu Forums Q&A I linked above contains a more current installation tool link:

Brother Scanner New

Notice the Release Date is Christmas 2017, only a few months old.

Rather than repeating your steps I'll start a fresh install (of the scanner only) using the Ubuntu Forums link above.


Installation Step 1 - Select Printer

Start by selecting the right product. In the printer icon for MFC-J410W, click the link Not your product? and a selection page appears:

Brother Scanner Model Select

Your printer can be found in the first icon which has a sub-menu for "DCP 3 Series" which leads to your specific model:

Brother Scanner Model DCP-350C

My printer is the fourth icon in the panel, which being 3 icons wide is immediately below yours. I'll select that and it has a sub-menu for "DCP 7 Series" which after clicking presents:

Brother Scanner Model DCP-7065DN

I'll click on DCP-7065DN. You would have already selected DCP-350C on the previous screen shot.


Installation Step 2 - Select Operating System (OS)

After selecting the printer model you are asked for your OS. It defaults to Linux and ".rpm". The default is ".rpm" which stands for Red Hat or Arch Linux or something like that. Change the distro to ".deb" which stands Debian which is really Ubuntu.

Brother Scanner Select OS.png

Click the Search button.


Installation Step 3 - Download Software

Now that the preliminaries are finished and the Command Line aficionados and GUI haters in Ubuntu-Verse have put my name on their dart boards we get to select the software to download:

Brother Scanner Software Select.png

The model icon in the top-left corner should be DCP-350C for you but it is DCP-7065DN for me.

The first section is for printer drivers but we don't need that as both our printers print fine. The last section is for source code but we don't need that. If we did we probably wouldn't be on this website. The middle section contains the scanner drivers:

Brother Scanner Select Arch.png

Here we need to select the architecture: 32-bit or 64-bit.

I've read a 32-bit driver won't work on my 64-bit arch so I'm only going to download #3 & #4 for now. I may come back and grab #1 if I need the driver?

Installation Step 3-A)

Download Scan-key-tool 64bit (deb package)

After selecting #3 scanner option we see your model number on line #2 and my model number on the last line (of the screen shot)...:

Brother Scanner scan-tool-key-64bit.png

...So assuming all works well for me it should all work well for you!

You need to agree to the EULA (End User License Agreement) and then download the .deb file.

The file downloaded is:

  • brscan-skey-0.2.4-1.amd64.deb, size 50.9 KB, date 03/12/2014

The follow-up instructions on the web page says:

brscanX should be installed first

Installation Step 3-B)

Download Scanner driver 32bit (deb package)

So we have to go back a screen and download #1 (** Scanner driver 32bit (deb package)**). The file downloaded is:

  • brscan4-0.4.4-4.i386.deb, size 63.9 KB, date 09/22/2017

Notice the date is only a 6 months old!

Installation Step 3-C)

Download Scanner Setting file (deb package)

At the same time #1 is downloaded, we'll download #4 (Scanner Setting file (deb package)). The file downloaded is:

  • brother-udev-rule-type1-1.0.2-0.all.deb, size 1.6 KB, date 11/25/2016

Notice this the version number is different than yours!


Installation Step 4 - sudo dpkg -i ...

To summarize the packages downloaded:

    1. brscan4-4.4-4.i386.deb
    1. brscan-skey-0.2.4-1.amd64.deb
    1. brother-udev-rule-type1-1.0.2.0.all.deb

We will first install #1, then #4, reboot and finally install #3:

───────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ sudo dpkg -i brscan4-0.4.4-4.i386.deb
Selecting previously unselected package brscan4:i386.
(Reading database ... 1147453 files and directories currently installed.)
Preparing to unpack brscan4-0.4.4-4.i386.deb ...
Unpacking brscan4:i386 (0.4.4-4) ...
Setting up brscan4:i386 (0.4.4-4) ...
This software is based in part on the work of the Independent JPEG Group.
───────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ sudo dpkg -i brother-udev-rule-type1-1.0.2-0.all.deb
Selecting previously unselected package brother-udev-rule-type1.
(Reading database ... 1147495 files and directories currently installed.)
Preparing to unpack brother-udev-rule-type1-1.0.2-0.all.deb ...
Unpacking brother-udev-rule-type1 (1.0.2) ...
Setting up brother-udev-rule-type1 (1.0.2) ...
ls: cannot access '/etc/udev/rules.d/*.rules': No such file or directory
───────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ 

Ohh No! Error on the last line.

No idea why ls was generating an error because the directory is there and three rules exist. We can see one of them has just been set up:

$ ll /etc/udev/rules.d/*brother*.rules
-rw-r--r-- 1 root root 1004 Mar 10 16:59 /etc/udev/rules.d/60-brother-libsane-type1.rules

Oh well... let's proceed anyway. Looking at the new Brother udev rule all it does after a whole bunch of code is set:

ENV{libsane_matched}="yes"

Now it's time to post this answer as is and reboot.

After rebooting let's install the last file:

$ sudo dpkg -i brscan-skey-0.2.4-1.amd64.deb
Selecting previously unselected package brscan-skey.
(Reading database ... 1147499 files and directories currently installed.)
Preparing to unpack brscan-skey-0.2.4-1.amd64.deb ...
Unpacking brscan-skey (0.2.4-1) ...
Setting up brscan-skey (0.2.4-1) ...

Interesting that there is more than a million files on my system. Those 25 kernels add up over time.


Installation Step 5 - Testing

I cheated a bit and found this: Brother DCP-7065DN, Ubuntu 14.04 64bit: Can print to network printer but cannot use the scan function which recommended these steps:

───────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ brscan-skey
───────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$ brscan-skey -l

 DCP-7065DN        : brother4:bus4;dev7  : USB                  Active

───────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads$

So far, so good. The answer (no long sure if it's sure valid) says you need to put brscan-skey into your Startup Applications and you need gimp installed. Comment below if you need help doing this.

Apparently xsane is needed for scanning:

$ sudo apt install xsane
Reading package lists... Done
Building dependency tree       
   (...BLAH, BLAH, BLAH...)
Setting up xsane-common (0.999-3ubuntu1) ...
Setting up xsane (0.999-3ubuntu1) ...

xsane = extremely insane

After installing type xsane in the terminal and get:

xsane as user.png

After closing the error message, xsane tries to scan for devices and eventually replies there are none. Oh Joy, Oh Bliss. The Brother website says scanning is designed to be done as root so we'll type sudo xsane and now we see:

xsane as sudo.png

Sounds scary but regular user couldn't find a scanner so let's see if sudo does. Select Continue at your own risk button. After window greys out for a few momments the same response as regular user appears: No devices available.

Software method doesn't work, try hardware method

Using the scan key on the Brother MFC generates this message:

scan button on brother.png

Well at least there is communication between scanner and computer because gimp started up automatically.

I never rebooted after installing brscan-skey so do it now out of hope / desperation.


Step 6 - Go back and download CUPS Wrapper

Rebooting didn't work so I'll go back and install the CUPS Wrapper tool dated 12/25/2017 which has not been installed on my system. You have an older version of on your system:

Brother CUPS wrapper download.png

There are five download packages. When downloading the first one (CUPSwrapper) this dialog box appears:

Brother CUPS wrapper download open_save.png

  • Change option from Open to Save!
  • Click OK

Open terminal, change to ~/Downloads and verify file exists:

rick@alien:~/Downloads$ ll *.gz*
-rw-rw-r-- 1 rick rick    24666 Mar 11 08:24 linux-brprinter-installer-2.2.0-1.gz

After downloading these instructions appear on the website. Abbreviated format follows:

rick@alien:~/Downloads$ gunzip linux-brprinter-installer-2.2.0-1.gz
rick@alien:~/Downloads$ sudo su
root@alien:/home/rick/Downloads# 

root@alien:/home/rick/Downloads# bash linux-brprinter-installer-2.2.0-1 DCP-7065DN # Change DCP-7065DN to DCP-350C
You are going to install following packages.
   dcp7065dnlpr-2.1.0-1.i386.deb
   cupswrapperDCP7065DN-2.0.4-2.i386.deb
   brscan4-0.4.4-3.amd64.deb
   brscan-skey-0.2.4-1.amd64.deb
OK? [y/N] ->

Uh-Oh... It's selecting brscan4-0.4.4-3.amd64.deb but earlier I had installed brscan4-0.4.4-4.i386.deb which was a newer version but the wrong architecture. This could explain the errors I had!

Select y to proceed. Big license agreement pops up. Select y to proceed. Another license agreement pops up. Select y to proceed. The script runs apt install on it's own.

A prompt appears:

Will you specify the Device URI? [Y/n] ->

For yours and mine USB Printer we select n.

Next it prompts for a test print. To kill another tree select y. Yeah the test print works and I now have a printed page I can scan later!

A third big license agreement now appears so, select y to proceed.

It's all finished so reboot.


Step 7 - Test simple-scan

After reboot check the installation in terminal and perform simple scan:

───────────────────────────────────────────────────────────────────────────────
rick@alien:~$ brscan-skey
───────────────────────────────────────────────────────────────────────────────
rick@alien:~$ brscan-skey -l

 DCP-7065DN        : brother4:bus4;dev7  : USB                  Active

───────────────────────────────────────────────────────────────────────────────
rick@alien:~$ dpkg -l | grep -i brother
ii  brother-udev-rule-type1                    1.0.2                                        all          Brother udev rule type 1
ii  brscan-skey                                0.2.4-1                                      amd64        Brother Linux scanner S-KEY tool
ii  brscan4                                    0.4.4-3                                      amd64        Brother Scanner Driver
ii  cupswrapperdcp7065dn:i386                  2.0.4-2                                      i386         Brother DCP7065DN CUPS wrapper driver
ii  dcp7065dnlpr:i386                          2.1.0-1                                      i386         Brother DCP-7065DN LPR driver
ii  printer-driver-brlaser                     3-5~ubuntu1                                  amd64        printer driver for (some) Brother laser printers
ii  printer-driver-ptouch                      1.4-1                                        amd64        printer driver Brother P-touch label printers
───────────────────────────────────────────────────────────────────────────────
rick@alien:~$ simple-scan

After all the hard work we are rewarded with a scan:

Brother simple scan sans sudo