Packaging Brother printer drivers

From ArchWiki
Revision as of 04:49, 14 October 2011 by Jstjohn (talk | contribs) (added formatting; cleaned up grammar; improved AUR links)
Jump to: navigation, search

Really short overview of CUPS

Basically CUPS needs two things to handle printers properly: a .ppd file and a filter binary. If you have those two in the right places, then you must register the printer in CUPS. You can do this in the CUPS web interface at: http://localhost:631/

or using the command line:

 URL=$(lpinfo -v | grep -i 'Brother')	#  if you have more than one Brother printer, you must be more precise in grep
 lpadmin -p HL2030 -E -v $URL -P

Look at this Samsung driver from the AUR: Template:Package AUR. It is quite simple. It does not even have automatic printer registration, but that AUR package shows exactly what is being referred to.

About Brother drivers

Three problems with Brother drivers are:

  1. The cups driver is built on top of the lpr driver.
  2. The cups driver package contains a single installation shell script with an embedded *.ppd and a filter. It is executed by rpm during installation. It extracts *.ppd and a filter and performs some installation procedures in a Red Hat-specific way.
  3. It uses paths that are not compliant to Arch Packaging Standards.

Preparing PKGBUILD

You can deal with each of the above problems as follows:

  1. Extract the lpr driver's RPM file. You do not have to mimic the lpr driver installation procedure in your PKGBUILD because it is not needed. The cups driver just needs the files in place.
  2. Extract the cups driver's RPM. There should be single shell script. If you look in the patch of my HL-2030 driver (Template:Package AUR), you can see that I have made three kinds of changes in this script:
    1. I have changed the paths.
    2. I have disabled all commands except "Template:Codeline" or "Template:Codeline" or whatever there is that emits *.ppd or filter to separate file. It was done by wrapping irrelevant instructions by Template:Codeline.
    3. I have changed target file names for *.ppd and filter so they are emitted to the directory your PKGBUILD is working in (relative path not absolute). Note that paths were changed also in the source of the embedded filter.
  3. This is optional if you do not care about the Arch Packaging Standards. Just change all of the paths. You can use Template:Package Official on all text files unpacked from both the lpr and cups Brother drivers. Look at the patch in the Template:Package AUR package to check which files are affected.

Effectively after changes described above you will receive a script that will just emit embedded *.ppd and filter to some known location. All you need to do is to copy them to the proper CUPS directories in $stardir/pkg:

 install -m 644 -D ppd_file "$pkgdir/usr/share/cups/model/HL2030.ppd"
 install -m 755 -D wrapper  "$pkgdir/usr/lib/cups/filter/brlpdwrapperHL2030"

Remember also to copy lpr driver files to Template:Codeline!

Other changes

Below are some other changes you may need in your patch.


 -#PSTOPSFILTER=`which pstops`

I have just hard-coded the path to "pstops", because it will not be found by the algorithm that is present there.

There is also this change:


I cannot tell you what it does because I do not remember. Probably I have encountered some problem during tests and found a solution on the Internet. You also may need it.


The driver can be used on Arch64 as long as the 32 bit version of glibc (Template:Package Official) is installed.