Linux setup for Brother MFC-L3770CDW
The two areas in which I always seem to have trouble setting up in Linux are wireless and printing. I have just changed distro from Mint to Ubuntu Budgie, mainly so I can move from an LTS release to allow me to easily access greater hardware support. I plan to buy a new laptop in the next 6 months or so and I expect that this will make initial setup easier.
A few years ago I bought a Brother MFC-L3770CDW because it appeared to have good Linux support. I have now set it up two or three times and each time it was hard. Yesterday it took several hours. Now I am an IT professional with deep experience in operating systems and have been running Linux for decades, both at home and work. So if you struggle at times, don't feel bad.
Most of the following will probably apply to other Brother printers.
Brother supply a proprietary driver based on CUPS for this printer. They also have a tutorial to install it, either direct connected to USB or network. However some of the details in the tutorial are wrong.
To set up a Linux network printer in CUPS you need two things: a URI for the printer endpoint or service and a driver for that printer. A modern Linux distribution will probably find this printer when it does a network search and say it has an address such as: BRN3C2AF4ED40E4. My experience with this address is that print jobs will fail with an "Unable to locate printer". I read that this in turn can be solved by setting up zeroconf/bonjour/avahi (choose your name).
The alternative - probably the most reliable and simplest is to give the printer a static ip address. This is done by either typing in the ip address on the printer console - ie the screen physically attached to the printer - or alter DHCP to have a fixed lease for the printer. In the first case make sure you choose an address that is not in the range managed by DHCP.
The second part of the URI you need is the service, endpoint or queue of the printer. This is the location on the printer itself you want print jobs to go to. Generally this is not called a queue just because there are also print queues in CUPS and elsewhere and it gets confusing.
This printer, like most, has a web stack that allows you to do and see various things remotely. In a browser, navigate to the ip address you have given the printer. Choose lists/reports and print the network configuration report. This will be a physical printed report from the printer. Towards the bottom of the report there is a section called: "active services". This is the list of services that the printer is listening on. The two that I am sure will work with an ip address are BINARY_P1 and PCL_P1. The others I haven't tried. If you are using the proprietary driver you need the BINARY_P1 endpoint. Note the case, this is Linux so case is important.
Now you are ready to complete setup. In your browser navigate to CUPS at http://localhost:631. If you don't see the CUPS pages, then you need to check CUPS is installed and running. Go to Administration and add printer. There are a range of protocols you can use. Simplest is LPD/LPR and that is what I selected in each case. DO NOT choose the discovered printer unless you want to solve the address translation issues above with avahi or other naming service.
Your URI will be lpd://<ip address>/BINARY_P1 if you are using the proprietary driver or - as I did - lpd://<ip address>/PCL_P1 if you want to use open drivers.
On the next page, fill in the details you want - at least the name is required. You - as a general rule - don't want to share the printer. If you share it, anyone who prints using that shared printer will be sending print jobs through your PC rather than directly to the printer. The sharing setting is used for print servers.
On the next page you will need to choose a driver. If you have installed the proprietary driver from Brother, you will find the printer type under the Brother selection. If you haven't, it won't be there. For PCL you will find "Generic PCL Color Laser LF Printer - CUPS+Gutenprint v5.3.4" under the Generic selection or equivalent.
On the next page set up any options - I for example set two sided long edge as default - and you are done.