How To Set Up A Web configured Print Server On Ubuntu Server Using SWAT, CUPS, And SAMBA

This how-to describes the process of setting up an intranet based print server using Ubuntu server. By using CUPS SAMBA and SWAT the final product is a web based solution to a headless print server.

This How-to has been cobbled together from assorted other how-tos and forums by me after recording as best I could the method I used after googling the various problems I had along the way. It is primarily based on

which is excellent but a little dated.

We will use PRINTSERVER for the name of the computer and USERNAME and PASSWORD where appropriate. Please use your own ones as necessary. While installing Ubuntu server select openssh and LAMP server using the space bar when requested (these parts can also be installed into an existing Ubuntu installation but that is outside the scope of this how-to). Ensure that the PRINTSERVER has access to the internet and is not locked out by your firewall or something silly (is it plugged into to your network?).

Once Ubuntu is installed and you have logged in you can  determine the local ip address that was issued by your network's DHCP server to your PRINTSERVER by typing

The PRINTSERVER local ip is the number following the first instance of inet. eg inet addr: means that the local ip address is (Note: it's not That's your loopback address.) Now go to another computer on your network where you will carry out the remainder of the installation.

Download install and run your favorite tty client on the other computer on your network that you will use to communicate with your print server. I like putty from:

Open an ssh session (port 22) to the local ip address of your print server and log in. Now install CUPS:

sudo apt-get install cupsys cupsys-client xinetd

Copy the cups settings and protect them:

sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original
sudo chmod a-w  /etc/cups/cupsd.conf.original

Edit the admin line of the conf file to your email address:

sudo nano /etc/cups/cupsd.conf

Modify /etc/cups/cupsd.conf and add the lines:

ServerAdmin [email protected]
DefaultEncryption Never
Browsing on
BrowseAllow all

By adding # at the start of the line comment out the lines:

#BrowseAllow @LOCAL
#BrowseAddress @LOCAL
#Browsing off

For the <Location /> blocks after the "Allow, deny" line add:

Allow All

Particularly the first three and the "Add printer" one eg:

<Location />
  Order allow,deny
  Allow All

Add a line to allow access to the webserver remotely:

Listen 631

Comment out all the other lines containing 631. NB: This allows ANYONE who can reach the server on port 631 to make changes to your printers. You may want to write a more restrictive Listen line (google it up or read the manual). I'm behind a router/firewall so I wanted to make it nice and easy.

Restart cups:

sudo /etc/init.d/cups restart
sudo /etc/init.d/xinetd restart

You may also like to restart your server with sudo reboot but it isn't mandatory.

Create a cups user (make sure you use a username that is already a unix user, e.g. the user name you set up at the beginning).

lppasswd -a yourusername

Attach your printer to your Linux server.

You can now browse the CUPSserver using a web browser on port 631. Open a browser and go to (for example) http://PRINTSERVER:631.

If you can't attach to the web gui remotely you'll need to debug (sorry :( ). To debug your cups installation reedit your cupsd.conf and change the line:

LogLevel warn


LogLevel debug

Then your CUPS error log is probably at /var/log/cups/error_log and you can view it using the nano text editor (alt-T to clear it before you save).

Follow the web gui as best as you can to add your printer. You may need to download drivers but my HP driver was preinstalled and worked fine. You'll have to google up the Linux drivers or possibly the Linux ppd file for your printer. I didnt need to add the ppd file but it looks easy enough on the CUPS web interface.

Now to turn your ubuntu CUPS print server in a windows friendly SAMBA print server. Install samba and swat:

sudo apt-get install samba smbfs swat

Create a Samba user (make sure you use a username that is already a unix user, e.g. the user name you set up at the beginning).

sudo smbpasswd -a username

Add SWAT to the xinet configuration and save.

sudo nano -w /etc/xinetd.d/swat
# description: SAMBA SWAT
service swat
disable = no
socket_type = stream
protocol = tcp
#should use a more limited user here
user = root
wait = no
server = /usr/sbin/swat

Reload Xinetd with the new configuration.

sudo dpkg-reconfigure xinetd

Verify that SWAT is up and running.  If you don't get any response, start Googling.

sudo netstat -tap | grep swat

Open a browser and go to http://PRINTSERVER:901 where PRINTSERVER is the network name (or local ip) of the PRINTSERVER. Enter "root" as the user and use the password you entered for the samba user.

Go to globals and enter an appropriate name for the workgroup and set security to user (some posts say share but I prefer user as shared folders are easier for me this way).

Click commit changes.

You should be able to muck about with your printers in SWAT and they should be available to your Windows network.

Good luck and remember google is your friend. ;)

Share this page:

Suggested articles

3 Comment(s)

Add comment



 Thanks for sharing this. It looks useful. 

I tried to edit this document directly like a wiki, but I didn't see an option for that. So, here's a suggestion to improve it:

 The use of the language "web gui", especially "webgui" should eliminated. WebGui is a proper name of a content-management-system, so there significant room for confusion there, since the technique is *not* based on WebGUI

 "web GUI" in the generic sense is perhaps redundant, since there is no parallel "web CLI" like there is for desktop computers. I recommend using the language "web-based" instead. 

By: Anonymous

Yes there is an issue with using webgui, as google is giving results for the search term webgui and this article has nothing to do with webgui CMS.


Fair enough. I had not heard of webgui and have made changes to protect the innocent.