macOS has included CUPS (Common UNIX Printing System) as its print subsystem since Mac OS X 10.2, and it is still how every print job on macOS is processed today. Enabling printer sharing exposes your locally-attached printer to other machines on the network using IPP (Internet Printing Protocol) over TCP port 631 — the same standard that Linux and Windows clients speak natively. This guide walks you through enabling printer sharing from the GUI, the CUPS web interface, and the command line, then connecting Mac, Linux, and Windows clients.
Before You Begin
You will need:
- Administrator access on the Mac hosting the printer
- A printer already installed and working locally on the host Mac
- The hostname of the host Mac (check System Settings > General > About)
- Network connectivity between the host and client machines
Method 1: Enable Sharing in System Settings
The simplest option uses the graphical Sharing pane.
- Open System Settings
- Click General > Sharing
- Toggle Printer Sharing on
- Click the Info (i) button next to Printer Sharing
- Check the box next to each printer you want to share
- Optionally restrict which users can print under the Users list (default is Everyone)
macOS automatically opens TCP port 631 in the application firewall and begins advertising the printer over Bonjour.
Method 2: Use the CUPS Web Interface
CUPS ships with a browser-based administration UI at http://localhost:631/. On macOS 13 and later it is disabled by default and must be re-enabled before you can use it.
- Open Terminal from Applications > Utilities
- Enable the web interface:
sudo cupsctl WebInterface=yes - Open a browser and visit
http://localhost:631/ - Click the Administration tab
- Under Server, check Share printers connected to this system
- Click Change Settings and authenticate with your administrator account
- Go to the Printers tab, click a printer name, then choose Administration > Set Default Options to review sharing
When you are finished, turn the interface back off:
sudo cupsctl WebInterface=no
If you see a Forbidden error when clicking administrative links, your user is not in the _lpadmin group. Add it with:
sudo dseditgroup -o edit -a $(whoami) -t user _lpadmin
Method 3: Share From the Command Line
The lpadmin tool is the scriptable way to manage CUPS. To mark an existing printer as shared:
sudo lpadmin -p PrinterName -o printer-is-shared=true
Replace PrinterName with the queue name shown by lpstat -p. You can also use lpadmin to install a new printer and share it in one step.
Common lpadmin Options
| Option | Purpose |
|---|---|
-p <name> | Name of the printer queue to create or modify |
-E | Enable the printer and accept jobs |
-v <device-uri> | Device URI (USB, IPP, socket, etc.) |
-m everywhere | Use the driverless IPP Everywhere profile |
-L <location> | Human-readable location string |
-o printer-is-shared=true | Mark the printer as shared over the network |
-o printer-is-shared=false | Stop sharing the printer |
-x <name> | Delete the printer queue |
List your current printers and their sharing status with:
lpstat -v && lpoptions -p PrinterName
Connecting From Client Machines
From Another Mac
- Open System Settings > Printers & Scanners
- Click Add Printer, Scanner, or Fax
- Select the IP tab
- Choose Internet Printing Protocol — IPP from the Protocol menu
- Enter the address:
hostname.local/printers/PrinterName - Click Add
Shared printers usually appear automatically under the Default tab via Bonjour — IPP is the reliable fallback.
From a Linux Client
Install CUPS client tools if needed (sudo apt install cups-client on Debian/Ubuntu), then add the remote queue:
sudo lpadmin -p Shared -E -v ipp://hostname.local:631/printers/PrinterName -m everywhere
Verify with lpstat -p Shared and send a test page using lp -d Shared /etc/hostname.
From a Windows Client
- Open Settings > Bluetooth & devices > Printers & scanners
- Click Add device, then Add manually
- Choose Select a shared printer by name
- Enter:
http://hostname.local:631/printers/PrinterName - Select a driver that matches the printer model
Firewall Considerations
- TCP/UDP 631 — IPP traffic for print jobs and queue management
- UDP 5353 — Bonjour/mDNS for automatic discovery by Macs and Linux
- TCP 9100 — Only needed if clients use the raw JetDirect protocol instead of IPP
- Enabling Printer Sharing in System Settings opens port 631 in the macOS application firewall automatically
- On a custom
pfctlruleset or a third-party firewall, add the rules manually before clients can connect
Troubleshooting
Printer does not appear on clients
- Confirm Printer Sharing is enabled in System Settings and the target printer has a checkmark
- Verify the host is reachable:
ping hostname.local - Check that
cupsdis listening on port 631:sudo lsof -i :631 - On the client, bypass Bonjour by adding the printer by explicit IPP URL
"Forbidden" errors in the CUPS web UI
The current user is not a member of the _lpadmin group. Add it with sudo dseditgroup -o edit -a $(whoami) -t user _lpadmin and sign out/in.
Print jobs stuck in the queue
- Open the queue in Printers & Scanners and click Resume
- From Terminal, run
cancel -a PrinterNameto clear stuck jobs - Check the CUPS error log:
tail -f /var/log/cups/error_log - Restart CUPS to recover from a hung scheduler:
sudo launchctl kickstart -k system/org.cups.cupsd