1 |
#!/bin/sh |
2 |
# This script is an input filter for printcap printing on a unix machine. It |
3 |
# uses the smbclient program to print the file to the specified smb-based |
4 |
# server and service. |
5 |
# For example you could have a printcap entry like this |
6 |
# |
7 |
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint |
8 |
# |
9 |
# which would create a unix printer called "smb" that will print via this |
10 |
# script. You will need to create the spool directory /usr/spool/smb with |
11 |
# appropriate permissions and ownerships for your system. |
12 |
|
13 |
# Set these to the server and service you wish to print to |
14 |
# In this example I have a WfWg PC called "lapland" that has a printer |
15 |
# exported called "printer" with no password. |
16 |
|
17 |
# |
18 |
# Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton) |
19 |
# so that the server, service, and password can be read from |
20 |
# a /usr/var/spool/lpd/PRINTNAME/.config file. |
21 |
# |
22 |
# In order for this to work the /etc/printcap entry must include an |
23 |
# accounting file (af=...): |
24 |
# |
25 |
# cdcolour:\ |
26 |
# :cm=CD IBM Colorjet on 6th:\ |
27 |
# :sd=/var/spool/lpd/cdcolour:\ |
28 |
# :af=/var/spool/lpd/cdcolour/acct:\ |
29 |
# :if=/usr/local/etc/smbprint:\ |
30 |
# :mx=0:\ |
31 |
# :lp=/dev/null: |
32 |
# |
33 |
# The /usr/var/spool/lpd/PRINTNAME/.config file should contain: |
34 |
# share=PC_SERVER |
35 |
# user="user" |
36 |
# password="password" |
37 |
# |
38 |
# Please, do not modify the order in the file. |
39 |
# Example: |
40 |
# share=\\server\deskjet |
41 |
# user="fred" |
42 |
# password="" |
43 |
|
44 |
# |
45 |
# The last parameter to the filter is the accounting file name. |
46 |
# Extract the directory name from the file name. |
47 |
# Concat this with /.config to get the config file. |
48 |
# |
49 |
eval acct_file=\${$#} |
50 |
spool_dir=`dirname $acct_file` |
51 |
config_file=$spool_dir/.config |
52 |
|
53 |
# Should read the following variables set in the config file: |
54 |
# share |
55 |
# hostip |
56 |
# user |
57 |
# password |
58 |
|
59 |
eval `cat $config_file` |
60 |
|
61 |
share=`echo $share | sed "s/[\]/\//g"` |
62 |
|
63 |
if [ "$user" != "" ]; then |
64 |
usercmd="-U" |
65 |
else |
66 |
usercmd="" |
67 |
fi |
68 |
|
69 |
if [ "$workgroup" != "" ]; then |
70 |
workgroupcmd="-W" |
71 |
else |
72 |
workgroupcmd="" |
73 |
fi |
74 |
|
75 |
if [ "$translate" = "yes" ]; then |
76 |
command="translate ; print -" |
77 |
else |
78 |
command="print -" |
79 |
fi |
80 |
#echo $share $password $translate $x_command > /tmp/smbprint.log |
81 |
|
82 |
cat | /usr/bin/smbclient "$share" "$password" -E ${hostip:+-I} \ |
83 |
$hostip -N -P $usercmd "$user" $workgroupcmd "$workgroup" \ |
84 |
-c "$command" 2>/dev/null |