TITLE : Printing to a windows shared printer using Samba OS LEVEL : AIX 4.x DATE : 05/02/2002 VERSION : 1.0 ---------------------------------------------------------------------------- Subject: 1.624: Printing from AIX to WinNT/95/3.1 From: Charles J. Fisher 1. On your Windows system, share the printer. Assuming that you are running NT, make a user "root" with some password. 2. Get the Samba distribution from http://www.samba.org If you have a C compiler, get the source and compile it. If you don't have a C compiler, get a binary distribution for AIX. 3. Install Samba on AIX under /usr/local/samba. Specifically, make sure that /usr/local/samba/bin/smbclient is installed with execute rights for everyone. 4. You must also install a Samba configuration file under /usr/local/samba/lib/smb.conf If you intend to use your AIX as a file server for windows clients, you should modify smb.conf to accomplish this (see the Samba documentation). If you will be printing only, just use the sample smb.conf. 5. Make the directory /usr/local/samba/lib/printers 6. In that directory, install the following shell script as file "winprint": #!/bin/sh # This is a modification of the samba provided smbprint script # changed to work under AIX as the backend for a queue. It does # not read a config file. # # Variables below define the server and service. They are # the content of the .config file when printing from # /etc/printcap. # server="winserver" service="winprinter" user="root" password="root" # # Debugging log file, change to /dev/null if you like. # #logfile=/tmp/${USER}-print.log # # Some debugging help, change the >> to > if you want to save space. # #echo "server $server, service $service" >> $logfile #cat $1 | /usr/local/samba/bin/smbclient "\\\\$server\\$service"$password \ # -N -P -c 'print -' >> $logfile ( # NOTE You may wish to add the line `echo translate' if you want automatic # CR/LF translation when printing. echo translate echo "print -" cat $* ) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password \ -U "$user" -N -P > /dev/null 7. The above file assumes that you are using \\winserver\winprinter as the printer share, and that the user is "root" and the password is "root". If this is not the case, modify the shell variable declarations. 8. Mark the file with execute permissions with "chmod 755 winprint" 9. Test the script with the command: "./winprint /etc/passwd" If everything is ok, your password file should be spooled to your windows printer. If it doesn't work, remove the "> /dev/null" from the last line of the script and rerun it. Examine the output of smbclient for clues. Clue #1: The Windows printer server is on the other side of a router. AIX is sending broadcast packets to find the Windows machine, which the router will not forward. You must find the Windows server's IP address and specify it with the "-I" parameter to smbclient, i.e. "-I 1.2.3.4". DHCP makes this situation even more complex. Clue #2: You username or password is wrong. smbclient will tell you about this if you free its output from > /dev/null. Clue #3: You might be violating shell quoting rules if you use special characters in the server or share name, password, etc. Don't use $, ", ', etc., or escape them properly. A password of ";rm -rf /" could be catastrophic. 10. Once the script can print files, it must be defined as a printer in the /etc/qconfig file. Add the following lines to the end of your /etc/qconfig: winprint: device = dwinprint up = TRUE discipline = sjn dwinprint: backend = /usr/local/samba/lib/printers/winprint 11. Test the printer with the following command: "lp -d winprint /etc/passwd" (Your password file should be printed again.) 12. You might examine the queue with the command "lpq -P winprint" or "lpstat -t"