Some notes on printing and samba.
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.
Note: on Debian, you don't seem to get a /var/spool/samba by default. Create it, and set the permissions appropriately on it - so far I haven't found any evidence that you shouldn't use 777.
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
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!
-- needs work
-- needs work
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:
[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
APW prompts you with 'The server doesn't have drivers for this printer, would you like to upload them now?'
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]
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.
This can probably be done via some GUI tool, but I only tried via the CommandLine.
1) Make sure the file /usr/lib/cups/backend/smb exists. If not, do ln -s / ln -s /usr/bin/smbspool /usr/lib/cups/backend/smb
2) get the right driver. For me, the Epson 460 Colour printer that is attached to the WinXP machine needs the escp2-460.ppd file in the cupsys-driver-gimpprint-data Debian package. I don't know if I really need this, or if cups/winxp is smart enough to convert arbitrary print data to the correct format.
3) I created the print queue via lpadmin -p Shared_Epson -v smb://ip.ad.dre.ss/shared_name -P esdp2-460.ppd
4) Restart cups, and manually enable the queue: cupsenable Shared_Epson
5) when printing, cups told me that the printer wasn't accepting jobs. Turns out I had to do cupsaccept Shared_Epson as well. How stupid.
6) Now when trying to print, cups logged an NT_STATUS_ACCESS_DENIED error when contacting the WinXP machine. The solution to this (as found
here) is to add a username in the URI, so smb://guest@ip.ad.dre.ss/shared_name and restart cups.
7) wasn't that nice and straight-forward?
Part of CategoryPrinting
4 pages link to SambaPrinting: