Brother DCP-7055W on Apple Silicon without Rosetta (brlaser)
Brother never shipped an Apple Silicon driver for the DCP-7055W (a cheap, reliable mono laser from ~2012). Its macOS “CUPS driver” is an x86_64-only binary, so on an M-series Mac it only works through Rosetta 2. After upgrading to macOS 27, printing silently stopped: jobs sat in the queue forever and the page counter never moved.
The fix: replace Brother’s filter with the open-source brlaser driver compiled natively for arm64. No Rosetta, same queue, same network connection.
Symptoms
Section titled “Symptoms”- Jobs show as pending in
lpstat -o, printer shows “Looking for printer.”, nothing comes out. /var/log/cups/error_log(with debug logging) has the real reason:
execv of /Library/Printers/Brother/Filter/rastertobrother2130.bundle/Contents/MacOS/rastertobrother2130 failed. err:86, Bad CPU type in executable- The queue carries the alert
com.apple.badarch-error. - Confirm Rosetta is gone:
arch -x86_64 /usr/bin/true→Bad CPU type in executable.
Quick fix: softwareupdate --install-rosetta --agree-to-license brings Rosetta back and the Brother driver runs again. But Apple is phasing Rosetta out, so this breaks again eventually. The real fix is below.
Real fix: native brlaser
Section titled “Real fix: native brlaser”brlaser is an open-source CUPS driver for Brother’s host-based lasers (the HBP/“Type1” protocol). It supports the DCP-7055W and is what Debian/Ubuntu ship as printer-driver-brlaser. On Linux I already had a CUPS box printing to this printer with brlaser, which proved the driver works with this model.
1. Build (arm64)
Section titled “1. Build (arm64)”brew install cmakegit clone https://github.com/Owl-Maintain/brlaser.git # maintained fork, v6.2.8cd brlasercmake -S . -B build -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_OSX_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdkcmake --build build(cd build && ctest) # 100% tests passed out of 4file build/rastertobrlaser # Mach-O 64-bit executable arm64Gotcha: on the fresh macOS 27 install the Command Line Tools linker can’t read the 27.0 SDK (tapi error: malformed file … unknown architecture arm64e.x1-macos). Building against the bundled 26.5 SDK via CMAKE_OSX_SYSROOT works fine.
2. Generate the PPD
Section titled “2. Generate the PPD”ppdc -d ppd build/brlaser.drv # produces ppd/br7055w.ppd among othersPoint the filter at an absolute path. /usr/libexec/cups/filter is SIP-protected on macOS, so the filter lives under /Library/Printers/:
sed 's#"application/vnd.cups-raster 33 rastertobrlaser"#"application/vnd.cups-raster 33 /Library/Printers/brlaser/rastertobrlaser"#' \ ppd/br7055w.ppd > Brother_DCP_7055W-brlaser.ppd3. Dry run (no paper)
Section titled “3. Dry run (no paper)”Check the whole chain before installing anything:
cupsfilter -p ppd/br7055w-test.ppd -m application/vnd.cups-raster some.pdf > page.rasPPD=$PWD/ppd/br7055w-test.ppd ./build/rastertobrlaser 1 me test 1 "" page.ras > out.brlhead -c 200 out.brl | strings # %-12345X@PJL … @PJL SET RAS1200M … PAGE: 1 1(-test.ppd = the PPD with the filter path pointing at build/.) Valid PJL + raster out means the driver is good.
4. Install (needs sudo)
Section titled “4. Install (needs sudo)”CUPS refuses to run filters that aren’t root-owned, so:
sudo install -d -o root -g wheel -m 755 /Library/Printers/brlasersudo install -o root -g wheel -m 755 build/rastertobrlaser /Library/Printers/brlaser/# keep the existing queue name and device URI, swap only the driversudo lpadmin -p Brother_DCP_7055W -P Brother_DCP_7055W-brlaser.ppd -o PageSize=A4sudo cupsenable Brother_DCP_7055W && sudo cupsaccept Brother_DCP_7055Wlpadmin warns “Printer drivers are deprecated and will stop working in a future version of CUPS.” That’s the generic CUPS 2.x warning for PPD drivers, and it still works today.
Verify:
grep -E 'NickName|cupsFilter' /etc/cups/ppd/Brother_DCP_7055W.ppd# *NickName: "Brother DCP-7055W, using Owl-Maintain/brlaser v6.2.8"# *cupsFilter: "application/vnd.cups-raster 33 /Library/Printers/brlaser/rastertobrlaser"5. Result
Section titled “5. Result”First real print through the native driver: page counter 8097 → 8098, 600 dpi output, and printing no longer needs Rosetta.
- Confirm prints by the page counter, not the queue. CUPS happily reports a job as “done” or keeps it pending while nothing prints. The Page Counter on the printer’s built-in web page (device status/maintenance info) is the ground truth.
- Cancel stuck jobs before printing from another machine, or they’ll come out twice once the queue recovers.
- Fallback: any Linux box with
printer-driver-brlaserand a raw socket queue (socket://<printer-ip>:9100) prints to it too. - Revert: keep a copy of the old PPD (
/etc/cups/ppd/Brother_DCP_7055W.ppdbefore the swap) andsudo lpadmin -p Brother_DCP_7055W -P <old.ppd>.