Updated: January 25, 2018
This is a happy day! I finally managed to get the scanner of the Brother DCP-7040 working in Ubuntu 17.10. Way back in 2016, when migrating to Linux, I had chosen to install Ubuntu 14.04 LTS. While 16.04 was available, it would not do for one reason: I could not get the scanner installed correctly in the newer version. Last November, when Ubuntu had to be reinstalled because of a "little mishap" that was entirely my fault, I crossed my fingers hoping that the scanner would work in Ubuntu 17.10. It didn't. But now it does! Impatient to find out how? Skip ahead.
Two nights ago, as I was falling asleep I had the brilliant idea to use
my remaining Raspberry Pi Model B as a printer/scanner server. Hopefully, it
would be possible to get around the problem of setting up the scanner
in a Debian system. Some reading on the Web yesterday sort of convinced me
that it looked feasible, there were lots of links to instructions although they
were for the most part about 3 or 4 years old. Today, I tackled the problem
seriously. It took a while to find the old Raspberry Pi. Then I decided to
install DietPi on the SD card. I even installed
Samba with the distribution utility, which is needed to connect a
Windows system to a print server on Linux. That took quite a while,
DietPi is very lean, so that many, many dependencies
had to be installed. But that is ok, it was all done automatically and
DietPi is so much nicer for setting up a headless
ssh out of the box and WiFi with just
a simple edit of a configuration file on the boot partition of the SD card.
Then reality crashed in: I did not have drivers for the printer/scanner. A search of the Support and Downloads page for the DCP-7040 on the Brother web site turned up source code for the printer.
There was no mention of the scanner to be found in the archive. Even if it were possible to compile the source on the ARM architecture, I would be no further ahead, the scanner would not be available. Turns out that looking through the source code was a good thing.
As can be seen on the screen capture, there was a Christmas gift from the manufacturer, a new version of the driver installer. So I downloaded it. Before using it, I tried to undo everything I had done back in November trying to install the scanner. First I used the uninstall scripts that had been created by the installer.
/lib/udev/rules.d/60-libsane1.ruleswere removed. Finally, I deleted the file
As you can see, I was trying to apply various Scanner Setting for normal user
fixes found on the Brother site. These have to do with file permissions and
udev rules. Such a fix had been necessary to get the scanner
working in Ubuntu 14.04.
Once I rebooted, the system was hopefully back to its initial state
as far as printing and scanning is concerned. I followed the
installation instructions provided by Brother when I downloaded the
new installer. It is a
bash script, so all I had to do
was to execute it as a superuser after extracting it from the archive.
At each step, I answered "y(es)" when asked if the package was to be installed. However when asked for the URI, I answered "n(o)"
because the printer is a USB device without network capabilities.
The test print page printed without problems, but
could not find the scanner. I rebooted to make sure, and then ascertained
sane-find-scanner found the
USB connection to the device. However
scanimage -L could not
find the scanner. The same thing happened when I tried as
and this time the penny dropped. The problem was probably not related to
file permissions and
udev rules. The problem is that
is not finding the Brother library. It was reading Elder Geek's answer
in the ask ubuntu forum on the topic of "Simple Scan cannot find
scanner" that I put the pieces together. There was a link to a list
of files in the
labesane-dev package and looking at it, I
/usr/lib/x86_64-linux-gnu/sane/ did not contain
a shared library from Brother; there was no file named
libsane-brotherxxxx.so in the directory. I remembered seeing
something like that in the source code, so I looked at it again and found
the correct name
libsane-brother3.so.xxx so that it was a simple
matter to locate the file with
find. It turns out that the Brother
installation program had put it in
/usr/lib64/sane all by its
lonesome. Thinking that there might be a reason for that choice, I
decided to put a symbolic link to the library in the
/usr/lib/x86_64-linux-gnu/sane/ directory instead of
With a bit more fiddling with the configuration of SANE as explained by Elder Geek and in the Ubuntu Community Help Wiki page entitled SANE - Installing a scanner that isn't auto-detected everything finally worked.
Completing the Installation of the Scanner in Ubuntu 17.10
To cut to the chase, after installing the newest driver from Brother, three things had to be done to complete the installation of the scanner.
- Verify that
brother3is in the file
/etc/sane.d/dll.conf. I found the line at the end of the file, so I moved to its "rightful" alphabetical position in the list but I am pretty sure that it is not necessary. If you do need to modify that file, it will have to be done as a "superuser" as in michel@hp:~$ sudo nano /etc/sane.d/dll.conf
I think that step is what is entailed by configuring the "front end" of SANE.
- Create a file named
/etc/sane.ddirectory which contains the USB vendor and product ID of the printer/scanner. #Brother DCP-7040 usb 0x04f9 0x01e9
The directory belongs to
rootso the file must be created using the
sudoprefix. However, it turned out that I did not even have to create the file, it was there but named
brother3_conf_attempt. Given its date, I assume it was created the first time I installed the drivers from Brother. So all I had to do wasmichel@hp:~$ sudo mv /etc/sane.d/brother3_conf_attempt /etc/sane.d/brother3.conf
This is what is called configuring the "back end" of SANE.
- Finally, add the symbolic link to the Brother SANE library.
michel@hp:~$ sudo ln -s /usr/lib64/sane/libsane-brother3.so.1.0.7 /usr/lib/x86_64-linux-gnu/sane/libsane-brother3.so.1
scanimage was gratifying:
From there, it was obvious that
Simple Scan would work
when I found the scanner in its
preferences. The final test
was to reboot and check that everything still worked. And it did.
Others had found the solution before me. And it looks
like all that is really needed after installation is adding the symbolic link.
I can use the scanner without a
brother3.conf file in the
/etc/sane.d/ directory. But I decided to put it back, it looks
Brother scanner not detected in ubuntu 16.04 on ubuntu forums.
This is just an ad hoc solution. There is probably a correct way of fixing the installation, but to paraphrase Rhett Buttler, "I frankly don't give a damn". I do not want to spend any more time on this vexing problem; the solution works for me, perhaps it will work for others.
So now, I may not have a printer/scanner server, but I am happy that the scanner connected to my Ubuntu box works.