Penguin
Note: You are viewing an old revision of this page. View the current version.

Some notes on printing and samba.

Neat things you can do with samba and printing

  • For a way to get samba to print to a pdf then email you the result, see SambaPDFPrinter

Setting up samba and CUPS

This covers Samba 3.x, it might be similar in 2.x but be warned.

Your samba binary needs to be linked against libcups. To check this, run the following command and check that your output looks similar:

root# ldd `which smbd`
        libldap.so.2 => /usr/lib/libldap.so.2 (0x4001b000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x400c3000)
        libcups.so.2 => /usr/lib/libcups.so.2 (0x400c6000)
         .....

The 'libcups.so.2' line is the important one. Yours might be slightly different - that's ok.

To configure samba for printing, you need to make sure the following config options are set in the [global] section of /etc/samba/smb.conf:

 load printers = yes
 printing = cups
 printcap name = cups

In the [printers] section, you should have something like the following:

[printers]
 comment = All Printers
 path = /var/spool/samba
 browseable = no
 public = yes
 guest ok = yes
 writeable = no
 printable = yes
 printer admin = root, @ntadmins

As long as your cups printers are set up, you can now set them up on your windows clients and print to them via samba. You might want to investigate uploading client drivers to Samba, using the notes below.

Using samba and CUPS - troubleshooting

Do not, whatever you do, set your cups spool directory and your samba printer spool directory to the same location. Printing via Samba to Cups will not work if you do this!

Your cups spool dir should be /var/spool/cups, and you samba printing spool dir should probably be /var/spool/samba


NOTE - In redhat 9 users have reported needing to add the following 3 lines to the printer section of the smb.conf

This fixes the problem where the windows clients can see the printer and connect to it, but not print to it or see the print queue. This is because CUPS apparently uses a slightly different syntax than the older BSD-based lp* programs.

  print command = lpr -P %p -o raw %s -r
  lpq command = lpstat -o %p
  lprm command = cancel %p-%j

Drivers for Windows clients

There are a few ways you can arrage for your samba server to automagically have windows drivers for the printers it shares. I'll describe one of them below (Add Printer Wizard); there are other ways however!

RPCClient

-- needs work

Imprints

-- needs work

Add Printer Wizard

Win2k and WinNT have an Add Printer Wizard. You can use this to add printer drivers to your (cunningly disguised) Samba server.

I am using Samba 2.999+3.0.alpha21-3 (one of the Samba 3 Alpha's)

Steps:

  • Configure your smb.conf appropriately. You'll want to add a section that looks like this:
 [PRINT$]
    path = /home/samba/printers
    guest ok = yes
    browseable = yes
    read only = yes
    write list = @wheel,root,daniel,admin
    admin users = @wheel,root,daniel,admin
    create mask = 0644
    directory mask = 0755

Note that the path can be anywhere, really. All that matters is that the permissions are set appropriately. I set them to 777 for the purpose of this exercise: this may not be neccesary

  • Join the Win2k or WinNT machine to your domain. This is covered elsewhere - see SambaAsPDC. This machine is referred to after this as the 'NT machine' for brevity.
  • Find a user you can use that has an (effective) uid of 0 on the samba server. Note: This doesn't mean you have to use the root user, its actually ok to set a printer admin and use that.
  • Login as this user to the NT machine.
  • Fire up the APW (Add Printer Wizard) and run through the wizard, adding appropriate drivers. You'll note that the

APW prompts you with 'The server doesn't have drivers for this printer, would you like to upload them now?'

  • After you've correctly added the drivers on the NT machine, right-click on the printer icon and select sharing. Make sure that sharing is enabled for this printer.
  • Magic time. Not sure if this is neccesary - a reboot of the NT machine may do the job instead. Remove the printer you just added.
  • Re-add the printer you just added. If things go well, it'll remember you already had the drivers intalled, and it'll just load up straight away
  • Go to the properties page for the printer you just added, and go to the 'ports' section. After going through the above removal-readd rigmoral, I have only one port listed - a 'Samba Printer Port' one. Make sure this is checked.
  • You can now add extra drivers - go to the sharing tab, and click 'Additional Drivers', then select the architectures you wish to export drivers for, and it should - if its behaving - prompt for the location of the new drivers.
  • Done.

You can have a look at whats happening on the server side of things with the rpcclient program

 # rpcclient kiakaha -U root -c "enumdrivers"
 Password:

 [Windows 4.0]
 Printer Driver Info 1:
        Driver Name: [Mita PointSource Vi300]

 Printer Driver Info 1:
        Driver Name: [HP Color LaserJet 4550 PS]

 Printer Driver Info 1:
        Driver Name: [Kyocera Mita KM-1810 KX]


 [Windows NT x86]
 Printer Driver Info 1:
        Driver Name: [Kyocera Mita KM-1810 KX]

 Printer Driver Info 1:
        Driver Name: [Mita PointSource Vi300]

 Printer Driver Info 1:
        Driver Name: [HP Color LaserJet 4550 PS]

 # rpcclient kiakaha -U root -c "enumprinters"
 Password:
        flags:[0x800000]
        name:[\\kiakaha\km1810]
        description:[\\kiakaha\km1810,Kyocera Mita KM-1810 KX,lp]
        comment:[lp]

        flags:[0x800000]
        name:[\\kiakaha\mita]
        description:[\\kiakaha\mita,Mita PointSource Vi300,lp1]
        comment:[lp1]

        flags:[0x800000]
        name:[\\kiakaha\hpcolor]
        description:[\\kiakaha\hpcolor,HP Color LaserJet 4550 PS,lp2]
        comment:[lp2]
  • Gotchas: For one of my drivers, it wouldn't let me upload a Win95/98 driver. No idea why, but it refused to let me do this. In the end, I right clicked on the background of the printers control panel app, and went to server properties, then manually added the printer driver there. I then removed and re-added the printer, and it now recognises the new driver.

Its also worth pointing out that for the APW to work, you NEED NT or 2K drivers for the printer, even if you only want to share to Win98 Clients.


Part of CategoryPrinting