How to set up a remote printer which is attached to a Raspberry Pi (or any other ARM computer)

This tutorial will guide you through the setup of a printer which has no ARM drivers and therefore leads to complications when being used with a Raspberry Pi or another ARM computer, for example a Brother printer. Also, I will assume that the Raspberry Pi is only accessible through SSH and has no GUI installed, so the server side will be doable through CLI commands only.


Server = Raspberry Pi. I will assume that it is running Raspbian but the steps should work for other distros as well.

Client = Your Manjaro machine.

Server setup:

  1. Attach your printer to the server.
  2. Connect to the server via SSH: ssh pi@raspberrypi
  3. Install CUPS: sudo apt-get install cups
  4. Find out the URI of your printer with sudo lpinfo -v |grep usb:

In my case the output is

direct usb://Brother/HL-L2300D%20series?serial=E73860G5N986807

so the URI is


  1. Now that we know the URI, we can add the printer to the system with: sudo lpadmin -p $NAME -v $URI where $NAME is an arbitrary name you want to give to your printer and $URI is the URI which we just constructed. In my case the command is:

sudo lpadmin -p HL-L2300D -v usb://Brother/HL-L2300D%20series?serial=E73860G5N986807

  1. Now the printer is known to the system but disabled. You can check the status with sudo lpstat -p $NAME -l In my case I got:
$ sudo lpstat -p HL-L2300D -l
printer HL-L2300D disabled since Sun 02 Sep 2018 16:22:43 UTC -
	reason unknown

We now have to enable the printer with sudo cupsenable $NAME, which in my case translates to

sudo cupsenable HL-L2300D

It is now enabled:

$ sudo lpstat -p HL-L2300D -l
printer HL-L2300D is idle.  enabled since Sun 02 Sep 2018 16:23:17 UTC
  1. Finally we have to tell CUPS that it may accept print tasks for this printer with sudo cupsaccept $NAME, in my case

sudo cupsaccept HL-L2300D

Hint: If something goes wrong, you can remove the printer with sudo lpadmin -x $NAME and start from scratch.

Client setup:

  1. Install the appropriate driver for your printer. Many printer drivers are available through the AUR, some are also included in the preinstalled driver set. In my case I had to install the AUR package brother-hll2300d.

  2. Install the package nss-mdns with sudo pacman -S nss-mdns

  3. Enable and start Avahi:

systemctl start avahi-daemon
systemctl enable avahi-daemon
  1. Navigate to the printer settings through your desktop’s menu or with the command system-config-printer Unblock the session with the unblock button in the top left corner and add a new printer.

  2. Thanks to Avahi the printer should appear in the list of network printers in the left column (expand this list first by clicking on “Network printers”). The printer should be called $NAME @ raspberrypi, in my case HL-L2300D @ raspberrypi. Click “Next”, select the appropriate driver, click “Next” again and select the desired name and description.

Congratulations, you’re all set and can print a test page or something else!

Hint: If your printer supports duplex printing, you can duplicate the printer you just added and name the copy “MyNicePrinterDuplex”, then activate duplex printing in the copy’s settings. You will thus have two printers, one with and one without duplex, such that you don’t have to navigate to the printer settings to switch duplex on and off. Same works for other settings.


If this takes off, I should start installing and enabling cups on Manjaro-ARM too. :stuck_out_tongue:

1 Like

Well, the idea is that the printer is controlled by the driver installed on the client. So if you follow the tutorial, you will be able to print on the client (x86) but not the server (arm). :slight_smile:

I know. It could be default on my minimal editions. :slight_smile:

1 Like

Very nice tutorial. Thanks for posting. :+1:

Glad, it is useful! :slight_smile:

Forum kindly sponsored by