I've recently bought a new Printer model Brother DCP 1610W and as in my home I have already a small Linux router and a web server where this blog and a couple of other websites runs and I need multiple PC / notebook / mobile phone enabled people to print on the Printer easily pretty much like a Printing server for a Small Office environment.
To do that of course I needed it configured to be accessible remotely for print via LAN and Wireless network. The task is not a complex one and printing remotely over the network is a standard thing many company organizations / universities and univerities does for quite some time and hence nowadays most printers are network connect ready so you just have to place them inside your home or corporate network and use the time to configure them via their web configuration interface or even some have their own embedded wifi adapter, as well as many printers nowdays can even be ready to print directly by just connecting the Printer to the Wi-Fi network and installing its drivers on a Win host.
Anyhow the most common way for both home printer configurations and corporate I'm aware of still is to Share the printer via Windows Server or Win Server Domain so anyone connected to the Network to be able to Add the printer via Winblows.
In the case i'm going to describe below my home the Wi-Fi router is connected to an 5 Port Network Switch (HUB) which on its hand is connected to the Linux router which serves multiple things (a Linux router, a hosting server (web server and a database server hosted, a mail server, traffic proxy server, a firewall and a NAT router), I decided to Share the printer to Wi-Fi connected and LAN clients directly switched via an UTP cable to the switch by using the good old Linux Samba Sharing server.
I did not actually do that for a really long time hence before I started I did some quick research to get an idea on the general steps to partake to succeed in Sharing the Printer over the network of this Debian's Wiki SystemPrinting Guide was mostly helpful.
1. Downloading and Installing necessery Brother Printer deb packages
A small remark to make here is my Linux server is running Debian GNU / Linux and hence this article is giving details on how Printer can be Shared on Debian though a minor adaptation of the article should make it possible to install also on any RHEL / CentOS / SuSE etc. Redhat based RPM Linux distribution.)
First step to do is to download Brother printer vendor provided drivers as of moment of writting this article they're here
To download the drivers get the proper links and use wget or curl to download all the necessery .deb archives in lets say in /root/brother-printer-drivers e.g. before that create the folder with:
root@linux:/root# mkdir /root/brother-printer-drivers
Also it might be helpful for those who need some other Brother Printer Linux driver complete list of Brother Printer all Linux drivers as of time of writting this post is found on this URL here
Next you need to install following Brother printer driver deb packages brscan-skey brscan4 dcp1610wcupswrapper dcp1610wlpr
root@linux:/root# cd brother-printer-drivers
root@linux:/root/brother-printer-drivers# dpkg -i –force-all brscan-skey-0.2.4-1.amd64.deb
…
root@linux:/root# dpkg -i –force-all brscan4-0.4.4-1.amd64.deb
…
root@linux:/root# dpkg -i –force-all dcp1610wcupswrapper-3.0.1-1.i386.deb
…
root@linux:/root# dpkg -i –force-all dcp1610wlpr-3.0.1-1.i386.deb
…
root@linux/root# cd ../
Once installed dpkg -l should show like so:
root@linux:/root# dpkg -l |grep -i brother
ii brscan-skey 0.2.4-1 Brother Linux scanner S-KEY tool
ii brscan4 0.4.4-1 Brother Scanner Driver
ii dcp1610wcupswrapper 3.0.1-1 Brother DCP-1610W CUPS wrapper driver
ii dcp1610wlpr 3.0.1-1 Brother DCP-1610W LPR driver
Brother's vendor provided packages will install drivers under /opt/brother
root@linux:/root# ls -al /opt/brother/
общо 16
drwxr-xr-x 4 root root 4096 яну 26 13:58 ./
drwxr-xr-x 3 root root 4096 яну 26 13:55 ../
drwxr-xr-x 3 root root 4096 яну 26 13:58 Printers/
drwxr-xr-x 4 root root 4096 яну 26 13:58 scanner/
2. Installing CUPS Printing Service and related Filters and Postscript packages necessery for PDF processing on CUPS server side
root@linux:/root# apt-get install –yes cups cups-client cups-common cups-pdf cups-ppdc foomatic-db foomatic-db-engine foomatic-filters foomatic-filters-ppds openprinting-ppds lpr hp-ppd hpijs cups-pdf ghostscript-cups
Your printing should work normally without cups-pdf and ghostscript-cups packages installed but I install them just in case if PDF processing is problematic you can skip that.
It is also useful to install sane and sane-utils packages if you're going to use the brother's scanner capabilities.
root@linux:/root# apt-get install –yes sane sane-utils
Note that considering that all packages installed fine and the CUPS service is running, this should have set a proper printer into /etc/printcap a short database used to describe printers. printcap file is being used by UNIX's spooling system and allows you to dynamic addition and deletion of printers, for Linux / *Nix hosts which have more than one printer connected and added in CUPs records for the various printer goes there.
With a single Brother DCP-1610W Printer like my case is you should have records similar to these:
root@linux:~/brother-printer-drivers# cat /etc/printcap
DCP1610W:\
:mx=0:\
:sd=/var/spool/lpd/DCP1610W:\
:sh:\
:lp=/dev/usb/lp0:\
:if=/opt/brother/Printers/DCP1610W/lpd/filter_DCP1610W:
3. Adding a Printer in CUPS the easy way through CUPS Printing System Web Interface
CUPS has a nice web interface for setting up and administering printers and print queues.
Below is a selfexplanatory screenshot of Add Printer screen
.
Use your favourite browser (Firefox, Opera, Chromium, lynx, elinks – yes the great news is console / terminal browsers are also supported well by cups web iface) to display interface and add a printer via the Administration screen. If you are asked for a username and password see here.
There are three sections. The first is for local printers; that is, printers which are usually attached to the machine you are using. These are very often printers using a USB connection but can be parallel or serial port printers.
Adding a USB printer is a common occurance and one should automatically be detected as a local printer and a URI (Unified Resource Indicator) for its connection displayed on the next page.
The Other Network Printers section requires you to specify the destination for the remote print queue/printer, which could be on the local network or many kilometres away. AppSocket is almost always available on a network printer and other devices and requires only the IP address of the printer and a port number. An Internet Printing Protocol (IPP) URI is the preferrred choice for connecting to another CUPS server because it is CUPS' native protocol. ipp14 is the ipp backend from CUPS 1.4 and Debian-specific. It is provided because some devices do not work with the current ipp backend, which has a stricter adherence to the IPP standard. A Line Printer Daemon (LPD) URI could be considered if the remote printing service does not support IPP satisfactorily or at all. As before, when a remote print queue is doing the filtering choose RAW as the Make/Manufacturer.
4. Printer Status and Control testing whether CUPS printing is up and running
Once cups is installed and hopefully up and running you should see the cups process up and running to check it do:
root@linux:/root# /etc/init.d/cups status; ps axuwwf|grep -i cups|grep -v grep
Status of Common Unix Printing System: cupsd is running.
root 2815 0.0 0.0 75364 2912 ? Ss Mar17 0:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf
To get some further testing you can also use lpstat command and should get ouput similar to belows:
root@linux:/root# lpstat -t
scheduler is running
no system default destination
device for DCP1610W: usb://Brother/DCP-1610W%20series
DCP1610W accepting requests since Fri Mar 17 23:03:37 2017
printer DCP1610W disabled since Fri Mar 17 23:03:37 2017 –
Unplugged or turned off
At the moment of issuing above command it shows printer is disabled because of moment of execution the printer was turned off for a while cause I was not needing it you should get usually an output of enabled and ready to print.
lpstat is also about to report whether a queue is accepting jobs and what is yet to be printed you can do
5. Install and Configure Samba Sharing Server on the Linux server
You can setup CUPS to allow Windows machines to print to a CUPS server using an http address.
First, install the samba package. When you are asked to use WINS, say yes.
root@linux:/root# apt-get install samba
Next you might want to set setup your /etc/cups/cupsd.conf file by default CUPS would listen to LPD's port 631 if you don't have a strong firewall isolating you from the Internet on port 631 you might want to change that port to another one lets say to Port 49651.
I personally prefer keep the default port 631 and do use a robust firewall. If you want to change it modify config to something like:
# Our private connection we listen to Listen *:49651 # Allow machines on local network to use printers <Location /printers> Order allow,deny Allow 192.168.0.* Allow 192.168.1.* </Location>
If you like to filter access to CUPs daemon to receive Printing requests to be originating only from the local network place in smb.conf also something with your private network ranges:
# Allow machines on local network to use printers
<Location /printers>
Order allow,deny
Allow 192.168.0.*
Allow 192.168.1.*
Allow 192.168.2.*
</Location>
<Location />
# Allow remote administration…
Order allow,deny
## Allow all
Allow 192.168.0.*
Allow 192.168.1.*
Allow 192.168.2.*
</Location>
<Location />
# Allow remote administration…
Order allow,deny
## Allow all
Allow 192.168.0.*
Allow 192.168.1.*
Allow 192.168.2.*
</Location>
<Location /admin>
# Allow remote administration…
Order allow,deny
## Allow all
Allow 192.168.0.*
Allow 192.168.1.*
Allow 192.168.2.*
</Location>
This will listen on port 49651 from any network. You may use some other port number besides 631. Note that the dynamic and/or private ports as specified by the IANA are in the range 49152 through 65535. Also, this will only allow computers from the local network to print to the CUPS printers.
6. Use CUPS Printing server to print over the network directly
Next you need to restart the CUPS daemon once again as it will be used for samba printing
# service cups restart
Now on each Windows machine, Choose that you want to install a network printer and that you want to install a printer on the Internet or home/office network. The URL you will use should be smth like:
http://<cups_server_hostname>:49651/printers/DCP1610W
Lastly, select the Brother downloaded from Internet or the one that's available on the Install CD, for any other vendor printer if it is lets say HP Printer or Canon to install use the respective provided driver or as a last resort use the Generic section driver labeled MS Publisher Color Printer.
7. Configure Samba to Share CUPS network enabled printer
I've done a minor changes in default installed /etc/samba/smb.conf to make the printer accessible from The Samba server here is the main things to consider changing:
# Change this to the workgroup/NT-domain name your Samba server will part of
workgroup = WORKGROUP
# security = user
security = share
[printers]
comment = PC Freak Printer
browseable = yes
path = /var/spool/samba
printable = yes
guest ok = yes
read only = yes
create mask = 0700
# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = yes
Next restart Samba server to make the new setting take affect:
root@linux:/# /etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
root@linux:/# ps axu|grep -E "smb|nmb"
root 21887 0.0 0.0 169588 1904 ? Ss 16:53 0:00 /usr/sbin/nmbd -D
root 21892 0.0 0.0 197560 3272 ? Ss 16:53 0:00 /usr/sbin/smbd -D
root 21894 0.0 0.0 197560 1564 ? S 16:53 0:00 /usr/sbin/smbd -D
root 21899 0.0 0.0 112368 840 pts/6 S+ 16:53 0:00 grep -E smb|nmb
root@linux:/#
Complete current smb.conf configuration I use to make the Brother Printer DCP 1610W accesible via network share is here
This section needs updating as you can setup print server via samba print sharing just by uploading drivers.
When printing to windows printers in an NT domain using SMB the Device URI should use similar to:
smb://username:password@domain/server/printername
This allows Samba to authenticate against a domain controller for acces to the printer queue.
In my case as you can see in below smb.conf configuration I've configured Samba security = share which will allow anyone to access the samba server without authentication so you can omit username:password@ part
One good way to determine the printername (in case you are not sure of) is to use smbclient command line tool. computername refers to the name of the machine that shares the printer:
smbclient -L copmputername
computername is the name of the samba server machine or its IP address
E.g.
hipo@linux:~$ smbclient -L //192.168.0.1/
Enter Attitude's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]
Sharename Type Comment
——— —- ——-
print$ Disk Printer Drivers
IPC$ IPC IPC Service (pcfreak server)
DCP1610W Printer DCP1610W
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]
Server Comment
——— ——-
PCFREAK pcfreak server
Workgroup Master
——— ——-
WORKGROUP WORKGROUP
Check the ouput for entries of Type "Printer":
The resulting (Linux / Mac OS) Samba Share access URL from the output above would be
smb://192.168.0.1/DCP1610W
8. Adding Printer to your Windows machines to enable actual Remote Samba Sharing printing
Assuming you already know the Printer share name, here is what I needed to do to have the Printer Added on each of Windows Desktop PCs and Notebooks:
Control Panel -> Devices and Printers -> Add a printer -> (Add a Network wireless or bluetooth printer)
Then instead of Searching the printer to click on:
The printer that I wasn't listed
Then type in the URL or IP (as in my case) leading to the printer as you see in below screenshot:
9. Printer Samba Sharing Using Macintosh notebook as the Client and Debian as the Server
1. Assuming you have cups to set up the printer on Debian as described above.
2. On the Mac (OS X 10.4+) start Print and Fax from System Preferences. Use the + button to add a printer.
3. Look first in the "Default" tab. If the automagic printer-sharing has worked, and your Mac is connected to the local network properly, then the Debian-based printer should already be visible in the list.
Just select it and use the recommended print driver. If you face problems you can try to play with
Gutenprint Printer drivers to make it printing.
4. If your printer is not visible in the Default tab, then try adding it on the "IP" tab.
Pick IPP as the protocol, give the plain IP address of the server in the address box (in my case that's 192.168.0.1, and in the Queue box put
"printers/DCP1610W"
Put whatever helps you identify the printer in the Name and Location boxes (fields), and choose a printer driver than matches Brother DCP1610W or with another printer installed whatever you used to set up the printer on Debian .
Finally Pray that God help you to make it work and press the Add button. If you prayed honestly and repenting for your sins perhaps you will have mercy and it will work, of course if not try to research online on how to fix it further by God's grace.
Note that making printing work on Mac is a little bit of tricky and it might cause you some extra effort / nerves to complete.
10. Some other Useful maintanance commands you might need in future CUPS Printer queue jobs maintance
For displaying or setting print queue options and defaults:
lpoptions -p <print_queue_name> -l
Stopping and starting print queues. Acceptance and rejection of jobs sent to a destination:
cupsdisable <print_queue_name>
cupsenable <print_queue_name>
cupsaccept <print_queue_name>
cupsreject <print_queue_name>
To Cancel all jobs on a destination and additionally delete job data files:
cancel -a <print_queue_name>
cancel -a -x <print_queue_name>
That's all folks, Thanks God the printer should be working. Enjoy!