Package Details: brother-hl2140 2.0.2_1-3

Git Clone URL: (read-only)
Package Base: brother-hl2140
Description: LPR and CUPS driver for the Brother HL2140
Upstream URL:
Keywords: 2140 brother driver hl2140 printer
Licenses: custom:brother commercial license
Submitter: louipc
Maintainer: FacuTuesca
Last Packager: FacuTuesca
Votes: 14
Popularity: 0.023056
First Submitted: 2009-06-05 12:58
Last Updated: 2015-06-08 16:30

Latest Comments

FacuTuesca commented on 2014-10-20 22:52


I'm currently using it without hplip installed.

GreenRaccoon23 commented on 2014-10-20 19:58

This package also depends on hplip.

FacuTuesca commented on 2014-08-25 01:37

Adopted and updated PKGBUILD

Anonymous comment on 2014-03-14 19:23


Anonymous comment on 2014-03-10 17:50


Anonymous comment on 2011-09-17 00:27

To whom it may concern.

I did a fresh install and the following steps were necessary in order to make this printer work properly:
- make sure usblp module is not loaded (e. g. issue ``modprobe -r usblp'' command and add line ``blacklist usblp'' to ``/etc/modprobe.d/modprobe.conf'');
- make device node readable/writable by user, on whose behalf CUPS runs the usb backend (e. g. put ``SUBSYSTEMS=="usb", ATTR{idVendor}=="04f9", ATTR{idProduct}=="0033", OWNER="daemon"'' to ``/etc/udev/rules.d/99-printers.rules'' (ids can be obtained from ``lsusb'', if using other product), then ``udevadm control --reload-rules'' and replug);
- tell Brother's lpr/CUPS wrapper about the printer: put ``HL2140'' (or other model strings) into ``/usr/share/Brother/inf/brPrintList'' (be sure to remove anything else from that file: .install script puts irrelevant contents there!);
- allow that user to modify the ``brHL2140rc'' file (e. g. say ``chown daemon /usr/share/Brother/inf/brHL2140rc'').

I have an ordinary Arch system and the user running filters and backends is "daemon". The first 2 steps let CUPS to detect the printer. The last 2 steps make printing options apply.

Anonymous comment on 2011-07-08 21:31

Is this package broken? My printer does not seem to be doing anything anymore.

Anonymous comment on 2011-04-16 12:53

And I forgot to remind: /usr/share/Brother/cupswrapper/brcupsconfig* (the exact name could be model-dependent) is run by daemon:lp (not root!), so the file /usr/share/Brother/inf/br${MODEL}rc should be writable by that user (for CUPS options to apply). Thus
chown daemon "/usr/share/Brother/inf/br${MODEL}rc"
should be added to post_install() and post_upgrade() of .install script
(that file is being rewritten in place and there is no need to make the inf directory writable).

Also pre_remove() of .install script must remove brPrintList file if it eventually becomes empty:
[ `cat '/usr/share/Brother/inf/brPrintList' | wc -l` = 0 ] && rm '/usr/share/Brother/inf/brPrintList'
so that there are no leftover files when the last brother-* package is removed. This is not affecting the functionality though.

Hope this helps. However the whole thing is very ugly and cries for rewrite. But since it is working, I don't feel enthusiastic enough to do this. I have not found all the sources either, e. g. brprintconf* binaries have hardcoded paths to brPrintList, so even pulling mutable files out of /usr seems to be not that simple.

louipc commented on 2011-04-15 23:30

The patch is mainly to disable the code that does screwy stuff so we can just extract the ppd file and lpdwrapper.
I got kind of fancy with it though. See this wiki page:

Anonymous comment on 2011-04-15 22:48

@xav and others:
Brother drivers are designed for LPD. When you use CUPS, files in /usr/share/Brother/inf get updated by /usr/share/Brother/cupswrapper/brcupsconfig3 on every print to pass the current options. In order to make the printer configurable you should put its alphanumeric model name into file: /usr/share/Brother/inf/brPrintList. E. g. I have Brother HL-2140 (there is file /usr/share/Brother/inf/brHL2140rc) and I must have "HL2140" in /usr/share/Brother/inf/brPrintList (I have no idea why my old comments clarifying this here have disappeared). Thus the current .install script is wrong. Instead of
cat /usr/share/Brother/inf/brHL2140rc >> /usr/share/Brother/inf/brPrintList
it should have something like
grep --quiet "^$MODEL\$" '/usr/share/Brother/inf/brPrintList' || echo "$MODEL" >> '/usr/share/Brother/inf/brPrintList'
in post_install() and also something like
echo `cat '/usr/share/Brother/inf/brPrintList'` | grep --invert-match "^$MODEL\$" > '/usr/share/Brother/inf/brPrintList'
in pre_remove().

All comments