Skip to content

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.

  • 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.

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.

Terminal window
brew install cmake
git clone https://github.com/Owl-Maintain/brlaser.git # maintained fork, v6.2.8
cd brlaser
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdk
cmake --build build
(cd build && ctest) # 100% tests passed out of 4
file build/rastertobrlaser # Mach-O 64-bit executable arm64

Gotcha: 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.

Terminal window
ppdc -d ppd build/brlaser.drv # produces ppd/br7055w.ppd among others

Point the filter at an absolute path. /usr/libexec/cups/filter is SIP-protected on macOS, so the filter lives under /Library/Printers/:

Terminal window
sed 's#"application/vnd.cups-raster 33 rastertobrlaser"#"application/vnd.cups-raster 33 /Library/Printers/brlaser/rastertobrlaser"#' \
ppd/br7055w.ppd > Brother_DCP_7055W-brlaser.ppd

Check the whole chain before installing anything:

Terminal window
cupsfilter -p ppd/br7055w-test.ppd -m application/vnd.cups-raster some.pdf > page.ras
PPD=$PWD/ppd/br7055w-test.ppd ./build/rastertobrlaser 1 me test 1 "" page.ras > out.brl
head -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.

CUPS refuses to run filters that aren’t root-owned, so:

Terminal window
sudo install -d -o root -g wheel -m 755 /Library/Printers/brlaser
sudo install -o root -g wheel -m 755 build/rastertobrlaser /Library/Printers/brlaser/
# keep the existing queue name and device URI, swap only the driver
sudo lpadmin -p Brother_DCP_7055W -P Brother_DCP_7055W-brlaser.ppd -o PageSize=A4
sudo cupsenable Brother_DCP_7055W && sudo cupsaccept Brother_DCP_7055W

lpadmin 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:

Terminal window
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"

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-brlaser and 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.ppd before the swap) and sudo lpadmin -p Brother_DCP_7055W -P <old.ppd>.