Search:  
Gentoo Wiki

HOWTO_Samsung_ML-1710_with_Samba/CUPS

Contents

Introduction

Connecting a Samsung ML-1710 (now a legacy product) is much simpler than one would expect. This particular model uses USB 1.1, so everyone owning this product should be able to easily use this printer with any linux system using a 2.6 series kernel.

Aside from this HOWTO being specific to the Samsung ML-1710 printer, the network sharing aspect of this HOWTO is the same for all printers and should work for any printer being used.

Synopsis

What this HOWTO will do

  1. Install a Samsung ML-1710 legacy printer locally
  2. Configure node as print server to share printer via Samba to Windows Windows 2k/XP/2k3 clients
  3. Configure node as print server to share printer via CUPS to other local networked *NIX and Windows 2k/XP/2k3 clients

Required packages

Step by Step

  1. Install packages
  2. Configure Samba
  3. Configure CUPS
  4. Final Steps

Gentoo environment

System environment

This ML-1710 printer was configured on a stable x86 platform using kernel 2.6.10.

It is assumed, if you wish to implement this HOWTO, that you have a fully functioning Gentoo Linux system and some basic knowledge of networking and printers.

The Linux Kernel

First, you will need to verify whether you will need OHCI OR UHCI support. Because my board has the VIA chipset, I need UHCI support. To verify, you'll need to run the following command:

Code: sample lspci output
# lspci
0000:00:00.0 Host bridge: VIA Technologies, Inc. VT8375 [KM266/KL266] Host Bridge
0000:00:01.0 PCI bridge: VIA Technologies, Inc. VT8633 [Apollo Pro266 AGP]
0000:00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
0000:00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
0000:00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
0000:00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82)
0000:00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge
0000:00:11.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06)
0000:00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 50)
0000:00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
0000:01:00.0 VGA compatible controller: S3 Inc. VT8375 [ProSavage8 KM266/KL266]

Next, you will need to make sure USB support is compiled into your kernel. This printer supports USB 1.1 so you do not need to worry about having USB 2.0 support (unless you have other devices that can take advantage of the 2.0 technology). I prefer compiling support into my kernel as opposed to making modules. The choice is yours.

Linux Kernel Configuration: Required Kernel options

For USB print support

Device Drivers -> USB Support
<*> Support for Host-side USB
<*> EHCI HCD (USB 2.0) support
[ ]   Full speed ISO transactions (EXPERIMENTAL)
[ ]   Root Hub Transaction Translators (EXPERIMENTAL)
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
<*> USB Printer support

After making your changes, you will need to reboot if you compiled USB support into the kernel, otherwise you do not need to reboot. Instead, load the printer module:

Code: Load Module
modprobe usblp

USE flags

There are a few choices that can be implemented for this printer. You can set it up to be used only by the local computer to which it is connected or you can share it over your local network to other linux clients as well as Windows clients. Since this HOWTO covers setting up the printer for network access, we have to install Samba (for print sharing with Windows 9x clients). CUPS is required. Footmatic and dependencies are also required.

You will need to enable the following USE flags. In the file below, add the following variables to USE="":

File: /etc/make.conf
-acl cups -debug -doc -kerberos -ldap -libclamav -mysql -oav pam -postgres-python -quotas readline -selinux -winbind -xml -xml2 nls samba slp ssl ppds

The best USE flag customisation can be done by editing /etc/portage/package.use. Should this file not exist, simply create it. This is my method. My USE variable in /etc/make.conf is unset.

File: /etc/portage/package.use
net-fs/samba -acl cups -debug -doc -kerberos -ldap -libclamav -mysql -oav pam -postgres-python -quotas readline -selinux -winbind -xml -xml2
net-print/cups -debug nls pam samba slp ssl
net-print/foomatic-filters cups samba
net-print/foomatic-db cups ppds

Optionally, if you have gentoolkit installed, you can enable/disable the above flags using the command euse. For more information on euse, type euse --help

Verify Printer Presence

After making changes to your kernel, if needed, you will need to verify that the kernel recognizes your printer, otherwise, this HOWTO will not help you. The best method, IMO, is the disconnect the printer from the USB port, wait 10 seconds, plug it back in and run the following command:

Code: dmesg|grep usb
# dmesg | grep usb
usbcore: registered new driver usblp
drivers/usb/class/usblp.c: v0.13: USB Printer Device Class driver

If your printer is recognised, as above, continue with this HOWTO, otherwise, you will need to troubleshoot at the hardware level.

Install Packages

This is probably the easiest step. It is good practice to always do a pretend/verbose before installing any package. This way you know what is going to be installed (focusing on dependencies, if any). Kick back for a while as it takes about 30 minutes to install the packages, depending on hardware/optimizations. It will take longer if any dependencies need to be installed.

Code: Install Samba, CUPS and foomatic
su root
emerge --sync
emerge hotplug samba cups foomatic-db -pv
emerge hotplug samba cups foomatic-db

Configure Samba

The [global] service section

File to edit

/etc/samba/smb.conf

netbios name sets the NetBIOS name by which a Samba server is known. This is what you will see in network neighborhood. workgroup controls what workgroup your server will appear to be in when queried by clients. server string controls what string will show up in the printer comment box in print manager and next to the IPC connection in net view.

netbios name = COMPUTER_NAME
workgroup = YOUR_DOMAIN
server string = PDC [on Gentoo :: Samba server %v]

hosts allow is a comma, space, or tab delimited set of hosts which are permitted to access a service. security affects how clients respond to Samba and is one of the most important settings in the smb.conf file. encrypt passwords controls whether encrypted passwords will be negotiated with the client. socket options allows you to set socket options to be used when talking with the client. It is for performance fine tuning. If you find more/better options, drop me an email as I would love to know of them. interfaces allows you to override the default network interfaces list that Samba will use for browsing, name registration and other NBT traffic. bind interfaces allows the Samba admin to limit what interfaces on a machine will serve SMB requests.

hosts allow = 192.168.4.0/24 127.0.0.0/8
security = user
encrypt passwords = yes
socket options = TCP_NODELAY
interfaces = lo eth0
bind interfaces only = yes

To make your Samba server the PDC, the following 4 parameters are required. Setting your OS level to 30 ensures your server WILL NOT BE a PDC in a network where there are other DCs. local master allows nmbd to try and become a local master browser on a subnet. os level controls what level Samba advertises itself as for browse elections. domain master enables WAN-wide browse list collation. Setting this option causes nmbd to claim a special domain specific NetBIOS name that identifies it as a domain master browser for its given workgroup. preferred master controls if nmbd is a preferred master browser for its workgroup.

local master = no
os level = 30
domain master = no
preferred master = no

null passwords allows or disallows client access to accounts that have null passwords. hide unreadable prevents clients from seeing the existance of files that cannot be read. hide dot files controls whether files starting with a dot appear as hidden files.

null passwords = no
hide unreadable = yes
hide dot files = yes

printcap name may be used to override the compiled-in default printcap name used by the server. load printers is a boolean variable that controls whether all printers in the printcap will be loaded for browsing by default. printing controls how printer status information is interpreted on your system.

printcap name = cups
load printers = yes
printing = cups

The [printers] service section

If a [printers] section occurs in the configuration file, users are able to connect to any printer specified in the local host's printcap file. Here, the important syntax is the last one. The "'print command'" used here will require Windows clients to have the Samsung ML-1710 drivers installed locally. Additionally, path should point to samba's spool. In our case, it's /var/spool/samba.

comment = All Printers
path = /var/spool/samba
browseable = no
public = yes
guest ok = yes
writable = no
printable = yes
printer admin = root
print command = lpr -P %p -o raw %s -R

The [print$] service section

The [print$] section actually makes the printer available on the network. This section is for printers as [share] sections are for file shares. Additionally, path should point to samba's installed drivers. In our case, it's /etc/samba/drivers. Please note that in our case, since we'll be using a specific file for our driver, the path below is useless but the statement is required.

comment = ML1710
path = /etc/samba/drivers
browseable = yes
guest ok = no
read only = yes
write list = root

Adding Samba users

The final step in configuring Samba is to add users. You will need to create a unique samba user for each person that wants to use the printer.

Code: Add Samba users
smbpasswd -a username

Replace username with the login name that users log into their local Windows client. In addition, the password should also be the same. These users DO NOT need to have a real UNIX system account.

Configure CUPS

Server Side

Configuring a CUPS server is really quite simple. In fact, it is really nice since the cups configuration file can pretty much be left with defaults with the exception of a few parameters. The options that must be set are listed below with a brief explaination that follows:

File: /etc/cups/cupsd.conf
ServerName host.domain.tld
ServerAdmin admin@domain.tld
Listen 127.0.0.1:631
Listen 10.0.0.1:631
#Port 631
HostNameLookups On
BrowseAddress 10.0.0.255
BrowseShortNames Yes
BrowseAllow 127.0.0.0/8 10.0.0.0/24
BrowseDeny ALL
BrowseOrder allow,deny
<Location />
Order Deny,Allow
Deny From All
Allow From 10.0.0.0/24
Allow From 127.0.0.0/8
</Location>
<Location /admin>
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.0/8
Allow From 10.0.0.0/24
</Location>

While most lines of configuration here are quite clear in what they set, a few need additional explaining.

Listen tells CUPS what IP addresses to listen on. It is required to have 127.0.0.1:631 as this is localhost and CUPS will not start without it. In addition, you can specify the IP address(es) assisgned to your NIC. Port can be diabled here since we declare the port in the Listen statement. Set HostNameLookups to on so that you can accesses CUPS via host names. BrowseAddress is the network CUPS will broadcast it's presence to. This is set to the your subnet's broadcast address, the last, non-usable, IP in the subnet.

<Location /> dictates what clients can connect to it and print. One address/network per Allow From line. <Location /admin> dictates what clients can connect to it to administer it. One address/network per Allow From line. Both directives require Allow From 127.0.0.0/8 or Allow From 127.0.0.1

The following steps is required only for the server. This does not apply to any CUPS client.

File: /etc/cups/mime.convs

Uncomment the following

application/octet-stream       application/vnd.cups-raw        0       -
File: /etc/cups/mime.types

Uncomment the following

application/octet-stream

Client Side

Surprisingly, there is no configuration required for a remote CUPS client to access the printer. When you install CUPS on the server and set BrowseAddress in /etc/cups/cupsd.conf, this will advertise to the network, that a printer exists on the network. The CUPS client will pick up on this and add this printer to it's list.

The only thing that needs to be done here is run level configuration:

Code: Start Services
/etc/init.d/cupsd start
Code: Add services to run level
rc-update add cupsd default

Obtain PPD file, start services and install printer

The next step requires a visit to LinuxPrinting.org. Here, you will need to aquire the PPD file associated with the ML-1710 printer. This PPD file is nothing more than the driver for the ML-1710.

First, download the PPD file. It is the last link in the top grey box under Recommended driver. After downloading, move the file to /usr/share/cups/model.

Code: Move Samsung-ML-1710-gdi.ppd file
mv /path/to/Samsung-ML-1710-gdi.ppd /usr/share/cups/model/

Once you have downloaded and moved the PPD file, it is time to start the services.

Code: Start Services
/etc/init.d/samba start
/etc/init.d/cupsd start
/etc/init.d/coldplug start
Code: Add services to run level
rc-update add samba default
rc-update add cupsd default
rc-update add coldplug default

After starting CUPS, from the node that the printer is installed on, open up your favorite web browser and point it to http://localhost:631. You will see 6 links at the top, Administration being the first. Click Administration to get started. You will need root access.

The CUPS web interface

This section covers the step by step proccess of the CUPS web interface.

  1. Click Administration link at the top
  2. Provide root password
  3. Click Add Printer
  4. Populate the Name, Location and Description fields
  5. Click Continue
  6. Select device -> USB Printer #1 (Samsung ML-1710)
  7. Click Continue
  8. Select Make -> Samsung
  9. Click Continue
  10. Select Model -> Samsung ML-1710 Foomatic/gdi (Recommended)
  11. Click Continue

That is it. Your printer should now be installed. You can click on the Printers link at the top of the page to verify it was installed. I suggest printing a test page to verify the installation actually works. Click on the Print Test Page link. If it works, continue with this HOWTO.

NOTE: The Name input field of step #4 requires NO SPACES. The best bet in this case is to put ML1710 as the name. The other 2 fields allow spaces. Also to be noted is that in step 8, you should have very few makes to choose from and in step 10, you should have only one choice as that is all that is installed.

Final Steps

Once you have verified that your printer works locally, it is time to verify that other *NIX clients as well as Windows clients can see and use the shared printer.

*NIX clients

In addition to starting the CUPS service on the client, you will need to follow the same steps outlined in the CUPS Web Interface section. If you configured the server correctly, the client should just see the printer. So, before actually procceeding with the CUPS Web Interface section, verify that the client sees the printer by clicking on the Printers link at the top of the page. If it sees it, it'll be there. Otherwise, you will need to add the device as outlined above. However, instead of selecting the USB selection for device, you will need to select IPP (Internet Printing Protocol) and point it to the address of the server (either IP or name based).

You can click on the Printers link at the top of the page to verify the client sees the printer. I suggest printing a test page to verify the installing actually works. Click on the Print Test Page link. If it works, continue with this HOWTO.

Windows clients

The steps outlined below is how to add a network printer to Windows:

  1. Click Start -> Control Panel -> Printers -> Add Printer
  2. Click Next
  3. Select Network Printer
  4. Click Next twice
  5. Browse for you printer
  6. Add it

You'll most likely be prompted to install the drivers for this printer. Make sure you have the driver disk, or download the newest drivers from Samsung's site, readily available. Once installed, print a test page to verify it works.

Alternatively, Windows XP supports direct printing to CUPS printers. Go through the Add Printer method as per usual, select "Connect to a printer on the Internet" and enter the path to the printer: http://hostname:631/printers/PrinterName.

Notes

CUPS must be installed on the server as well as any AND all *NIX clients that will access this printer.

The foomatic package must be installed on the server. It depends on and will install the following:

net-print/foomatic-filters
net-print/foomatic-db-engine
net-print/foomatic-db

The hotplug package must be installed on the server. It depends on and will install the following:

sys-apps/pciutils
sys-apps/usbutils
sys-apps/hotplug-base

It also works for the Samsung ML-1740 printer

Requires an gdi-enabled ghostscript (ESP GhostScript), emerge it using

 emerge app-text/ghostscript

Resources

The file /etc/cups/cupsd.conf is very well documented. No additional resources were needed to configure CUPS.

See also

Retrieved from "http://www.gentoo-wiki.info/HOWTO_Samsung_ML-1710_with_Samba/CUPS"

Last modified: Sat, 23 Aug 2008 14:33:00 +0000 Hits: 33,510