Brother fortunately provides Linux printer drivers for their printers, but – at least for older models – these are only available for 32bit systems and in an outdated packaging format with broken RPMs. You can still get the driver installed on a modern Fedora 43 though.
The guide might work for other models as well, but I have only tested with this one.
Download RPMs
From the Brother website, download RPMs:
- LPR printer driver (rpm package)
- CUPSwrapper printer driver (rpm package)
- Scanner driver 64bit (rpm package)
Install RPMs
Because the drivers are 32bit, you need some 32bit libraries:
sudo dnf install glibc.i686 libgcc.i686 libstdc++.i686
The RPMs are not properly signed, so you need to enforce installation with an invalid signature:
sudo rpm --define '_pkgverify_level none' -ivh \
mfc9330cdwlpr-1.1.2-1.i386.rpm \
mfc9330cdwcupswrapper-1.1.4-0.i386.rpm \
brscan4-0.4.11-1.x86_64.rpm
Then restart CUPS or alternatively restart your computer.
Add Printer and SELinux Policy
Add printer as JetDirect printer. Device URL: socket://<hostname-or-ip>:9100.
Replace <hostname-or-ip> with the actual hostname or IP.
Unfortunately SELinux interferes with the printer driver, which is old and insecure. Thus, we need an exception policy for the driver.
Add this content to a file called brother_printer_policy.te:
module brother_printer_policy 1.0;
require {
type cupsd_t;
class process execmem;
}
#============= cupsd_t ==============
#!!!! This avc can be allowed using the boolean 'cups_execmem'
allow cupsd_t self:process execmem;
Compile it:
checkmodule -M -m -o brother_printer_policy.mod brother_printer_policy.te
semodu_package -o brother_printer_policy.pp -m brother_printer_policy.mod
Then install it:
sudo semodule -i brother_printer_policy.pp
Print a test page to ensure it's working.
Add Scanner
Run this in your terminal:
sudo brsaneconfig4 -a name=Brother-MFC9330CDW model=MFC9330CDW ip=<printer-ip>
Replace <printer-ip> with the actual IP.