Brother MFC 3820CN and Linux

7-Nov-03: I just bought a Brother MFC 3820CN. It's a scanner / printer / scanner / fax machine / pc fax machine / photo printer. It has a USB interface and an Ethernet interface. Also has memory card reader, for photo printing. They don't claim Linux support, but I fully expect that we can do anything from Linux that the Windows software can do. It's just TCP/IP, right? Here's what NMAP says:

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on internal-13.crynwr.com (192.168.0.13):
(The 1596 ports scanned but not shown below are in state: closed)
Port       State       Service
21/tcp     open        ftp                     
23/tcp     open        telnet                  
25/tcp     open        smtp                    
515/tcp    open        printer                 
9100/tcp   open        jetdirect               

9-Nov-03: spent some time this evening trying to get printing to work. In theory, it's just a JetDirect printer. In theory, you can telnet to port 9100 on the printer and emit data to be printed. In practice, it says "Receiving Data" on the LCD, and then ignores whatever it received.

Another possibility for printing is to use the LPD protocol.

Another possibility for printing is to use Brother Internet Print, which seems to use MIME to carry a print job to the machine. Haven't played with that yet.

Send mail if you have questions or have gotten this machine to work with your Linux desktop.

12-Nov-03: you can telnet to the printer. The default password is 'access'. Hit enter when you connect. Type the password at the '#' prompt. Enter return when it asks you for a username. Once you've got a prompt, you can view and set all sorts of parameters.

14-Nov-03: been fiddling all along. It just completely refuses to print anything that comes from Linux, whereas Windows stuff it prints just fine over the network using LPD. I'm starting to suspect that it only accepts print files of a certain format. That's confusing, given that it lists this for services:

Local> show service

 * 1 Service Name : BRN_430300_P1     Port Name : P1
       Filter=0  BOT=1  EOT=1  Option : BQ
       Protocol :  IP   TCP Port : 9100

   2 Service Name : BINARY_P1     Port Name : P1
       Filter=0  BOT=1  EOT=1  Option : BQ
       Protocol :  IP NBI   TCP Port : 9100

   3 Service Name : TEXT_P1     Port Name : P1
       Filter=1  BOT=1  EOT=11  Option : BQ
       Protocol :  IP   TCP Port : 9100

   4 Service Name : POSTSCRIPT_P1     Port Name : P1
       Filter=0  BOT=5  EOT=4  Option : BQ
       Protocol :  IP   TCP Port : 9100

   5 Service Name : PCL_P1     Port Name : P1
       Filter=0  BOT=9  EOT=4  Option : BQ
       Protocol :  IP   TCP Port : 9100

   6 Service Name : BRN_430300_P1_AT     Port Name : P1
       Filter=4  BOT=1  EOT=1  Option : BQ
       Protocol :  IP   TCP Port : 9100

Brother doesn't seem to have any documentation for the remote console commands, but the Troy Group does. There's a page for commands, and for services. Clearly, their software is related to ours. Equally clearly, they have features we don't. However, much is the same and much can be learned. Same for a Kodak Printer Server.

15-Nov-03: Paydirt! Brother Internet Printing has a Linux client! Also see a previous article by Greg Jenkins. Brother has some information on Linux printing. The linuxprinting.org website has a web forum (gatewayed to a mailing list) for Brother printers

16-Nov-03: I've also had success emailing a .JPG image to the printer. It happily printed it, centered horizontally and top-justified, at 300DPI. Bad news. If you try to print an 8.5x11 image at 300 dpi, the printer rescales it so that it entirely fits on the page. Rather than not printing the parts that don''t fit, it doesn't print every nth row and column of pixels.

20-Nov-03: Got a reply from Brother's tech support. They say that the printer doesn't implement GDI. Sounds like, then, it accepts a bitmap of some sort. I tried sending it the output of *every* printer that GhostScript understands. Nada. Nothing. It ignored every one of them.

28-Nov-03: Somebody's got a SF page for "Brother MFC", by which they mean the Brother MFC-4600 and similar devices. Haven't updated that page in two months, so their progress may be slow. Also, since I last checked, Brother updated their Linux page. Unfortunately, they say "If you don't see it listed here, it's not supported." I sent email to the address they give, offering to write a driver for them.

I tried sending two different images from Windows via Brother Internet Print to my email address. They differed by only one pixel, and yet they differ in size by 180 bytes. Even though the print files don't appear to be compressed (lots of redundancy), it sure looks like they're using some kind of Lempel-Ziv compression. The dictionary changes because of that one changed pixel, and thereafter everything is different.

6-Dec-03: Played with the scanner a bit. Finally figured out how to scan to email. Works just fine with Linux. I'd prefer to be able to use their interface if only because it's easier. Did some packet tracing. They're using a funky protocol for setting the parameters. They seem to send three packets via TCP to port 54921, and then wait for the scanner to send. I've sent that same data to the scanner, but it isn't working for me.

Heard back from Brother Linux Support. They have refused my offer to write a printer driver for them, and they say that they have no plans to write one. Send them mail and encourage them to take up my offer: Brother Linux Support.

19-Dec-03: Cool! It seems that the sheet feeder doesn't care if the page it's scanning is very long. I tried scanning a full-height (22") newspaper first, and the paper was so light that it didn't get fed through the feeder properly. I taped a regular weight leader to it, and it fed just fine.

20-Jan-04: This shell script will create printable images. This generates images which are 8x10 inches. The printer will print them without shrinking them. Unfortunately, it leaves unprintable borders of 3mm on the top, 9mm on the right, 8mm on the left, and (the killer) 21mm on the bottom. Also, there seems to be no way to set the resolution to anything other than 300 dpi.

20-Feb-04: This program takes postscript on standard input, and sends it to mailimage:

#!/bin/sh

gs -g2800x3300 -r300 -dNOPAUSE -q -dBATCH -sDEVICE=ppm -sOutputFile=/tmp/print%d.ppm  -
for i in /tmp/print*.ppm; do
    pnmcut 103 38 2400 2999 $i | pnmtojpeg | mailimage
    rm $i
done

This should also work, but I haven't tried it:

#!/bin/sh

gs -g2800x3300 -r300 -dNOPAUSE -q -dBATCH -sDEVICE=ppm -sOutputFile='|pnmcut 103 38 2400 3000 $i | pnmtojpeg | mailimage'  -

This program mails a jpeg image to brother@dhcp54.crynwr.com:

#!/usr/bin/python

# Import smtplib for the actual sending function
import smtplib

# Here are the email pacakge modules we'll need
from email.MIMEImage import MIMEImage
from email.MIMEMultipart import MIMEMultipart

COMMASPACE = ', '

# Create the container (outer) email message.
msg = MIMEMultipart()
# me == the sender's email address
# family = the list of all recipients' email addresses
msg['From'] = 'root'
msg['To'] = 'brother@dhcp54.crynwr.com'
# Guarantees the message ends in a newline
msg.epilogue = ''

file = '/dev/fd/0'

# Open the files in binary mode.  Let the MIMEImage class automatically
# guess the specific image type.
fp = open(file, 'rb')
img = MIMEImage(fp.read())
fp.close()
msg.attach(img)

# Send the email straight to the printer
s = smtplib.SMTP()
s.connect('dhcp54.crynwr.com')
s.sendmail('root', 'brother@dhcp54.crynwr.com', msg.as_string())
s.close()

14-May-04: I've seen a message from Brother Linux Support saying that they're going to write an LPR driver. Excellent news!

7-Jun-04: Their printer driver is released and is available on their website. I haven't tested it myself because I toasted my printer configuration and .... will give Gentoo a try on my desktop as soon as I have a spare minute. I have it on good authority that it works, though.

7-Sep-04: I've had paper feeding problems with my printer for quite some time now. I finally called the Brother Solutions Center at 1-800-284-4FAX, and explained the problem. The woman asked for my serial number (underneath the paper receiving tray in the front), and asked me to look at the paper feed roller in the back. Mine is grey. She said that the mechanism with the black roller is the one that works. So, if you have a grey roller, and have paper feeding problems, you can get a free in-warranty repair.

10-Sep-04: David Dollar reports that he has gotten it to work through CUPS (Common Unix Printing System):

10-Dec-04: Upgraded my desktop to Fedora Core 2. FC2 runs foomatic in addition to cups, and system-config-printer really only knows about foomatic printers. Brother doesn't support foomatic. Therefore, you have to do this for FC2. Update from Jaoudat Moussa: also works for FC3.

I got a note from "Danny" saying that in addition to the above steps he needed to copy filterMFC3820CN and rastertobrij into /usr/lib/cups/filter for Mandrake 10.1.

3-Feb-05: Alex Hafey reports that the Brother MFC5840CN works with the above instructions on Fedora Core 2 by substituting 584 for 382.

12-Jun-05: I see that Brother has a new URL for their printer support page, and they have a new driver. Good. The older driver segfaulted on some kinds of pages. I upgraded thusly:

rpm --upgrade http://solutions.brother.com/Library/sol/printer/linux/rpmfiles/lpr_others/MFC3820CNlpr-1.0.4-1.i386.rpm

14-Apr-06: Ruud Schramp is doing some work on network scanning for his Brother MFC.


Russell Nelson
Last modified: Fri Apr 14 10:53:14 EDT 2006