This is a brief tutorial to make the Brother DCP-7020 printer/scanner work on Arch. It is largely a duplicate of the tutorial for the Brother HL-2030, with changes specific to the Brother DCP-7020.
Download Printer drivers
If you previously tried to install the printer in CUPS, remove it.
First create a temporary directory. Then you must download the official LPR drivers from the Brother website into that directory. Click here (and agree to their terms). This is an RPM archive. You have to download the cupswrapper file here (and agree to their terms). This script creates the filters and PPD file for CUPS automatically. It's an RPM archive too.
Extracting the RPM files
Now you need a small script called rpmextract which allows you to get the files included in the RPM you've just downloaded. Log in as root and execute :
# pacman -S rpmextract
Extract both RPM files :
$ rpmextract.sh brdcp7020lpr-2.0.1-1.i386.rpm $ rpmextract.sh cupswrapperDCP7020-2.0.1-1.i386.rpm
It should give you two directories : usr and var.
Editing files to make it work with Arch
Arch Linux uses its own file system organisation, so you have to edit some files. Use your text editor (i.e. vi) to open the file named cupswrapperDCP7020-2.0.1 If you created the temporary directory "tmp" in your home, this file will be in /home/(your user)/tmp/usr/local/Brother/cupswrapperDCP7020-2.0.1
In this file, you must replace all the /etc/init.d/ occurences by /etc/rc.d/.
Once you've finished this step, copy all of the files to their corresponding directories in your file system :
# cp -r /home/user/tmp/usr/* /usr # cp -r /home/user/tmp/var/* /var
Installing the driver and printer
Go into /usr/local/Brother/cupswrapper/ and run the cupswrapper file :
# cd /usr/local/Brother/cupswrapper/ # ./cupswrapperDCP7020-2.0.1
It will stop the cups daemon if it's running, and restart it.
Now go to the CUPS page : http://localhost:631/
Under the Printers tab you should see a DCP7020 printer automatically installed and configured. This default installation seems to be optimized for a USB connected printer, which in the case of the DCP-7020 is incorrect. Click Delete Printer. Now you can add the printer using the CUPS browser interface and selecting your Brother DCP-7020 which didn't exist before. To do this :
1. Click on the Administration tab
2. Add Printer
3. Name it, Continue
4. Select LPT #1 (unless you have more than one LPT port, in which case trial and error should serve you)
5. Select Brother, Continue
6. And there's your "Brother DCP7020 for CUPS (en)" - select it and Add Printer
7. Now under the Printers tab, click to print the test page, and you can hear the sweet sound of your printer.
Thanks to the creator of the HL-2030 page for making this much easier than I expected it would be!
First, make sure you set up SANE.
You can install this manually, using the following instructions, or else there's now a package in the AUR too, here.
You'll need to extract the files to a temp path:
$ rpmextract brscan2-0.2.4-0.i386.rpm
or, for 64 bit:
$ rpmextract brscan2-0.2.4-0.x86_64.rpm
Now copy the files to their corresponding directories in your file system:
# cp -r /path/to/brscan/usr/* /usr
Now you'll need to add "brother2" to the end of /etc/sane.d/dll.conf
Brother felt it necessary to include a script to do that, so you can also run:
# /usr/local/Brother/sane/setupSaneScan2 -i
I can scan as root, but not as a normal user
Make sure your user is in the scanner group:
# gpasswd -a username scanner
then log out and back in.
If you still can't scan as a normal user, check that /usr/lib/sane (or /usr/lib64/sane for 64 bit) are readable and executable for your user/group.
64 bit caveat
The 64 bit RPM has two files in /usr/lib64/, along with two symlinks to each file. However, the Arch64 Sane package will probably look in /usr/lib/ rather than /usr/lib64/, so we'll need to create some more symlinks. And since the symlinks reference the absolute path, not the relative path, ie:
linkedfile -> /usr/lib64/originalfile
linkedfile -> ./originalfile
a simple cp -r /path/to/brscan/usr/lib64/* /usr/lib/ won't do.
# ln -s /usr/lib64/libbrcolm2.so.1.0.1 /usr/lib/ # ln -s /usr/lib64/libbrscandec2.so.1.0.0 /usr/lib/ # ln -s /usr/lib64/sane/libsane-brother2.so.1.0.7 /usr/lib/sane/ # cd /usr/lib # ln -s libbrcolm2.so.1.0.1 libbrcolm2.so.1 # ln -s libbrcolm2.so.1 libbrcolm2.so # ln -s libbrscandec2.so.1.0.0 libbrscandec2.so.1 # ln -s libbrscandec2.so.1 libbrscandec2.so # cd sane # ln -s libsane-brother2.so.1.0.7 libsane-brother2.so.1 # ln -s libsane-brother2.so.1 libsane-brother2.so
Here's all of that in a nice bash friendly string:
ln -s /usr/lib64/libbrcolm2.so.1.0.1 /usr/lib/; ln -s /usr/lib64/libbrscandec2.so.1.0.0 /usr/lib/; ln -s /usr/lib64/sane/libsane-brother2.so.1.0.7 /usr/lib/sane/; cd /usr/lib; ln -s libbrcolm2.so.1.0.1 libbrcolm2.so.1; ln -s libbrcolm2.so.1 libbrcolm2.so; ln -s libbrscandec2.so.1.0.0 libbrscandec2.so.1; ln -s libbrscandec2.so.1 libbrscandec2.so; cd sane; ln -s libsane-brother2.so.1.0.7 libsane-brother2.so.1; ln -s libsane-brother2.so.1 libsane-brother2.so