Update lfs-uefi.txt
[linux_from_scratch_hints.git] / printing_with_samba+cups.txt
blobb1f1d164548e07b1c8555e79b5f998960581f34a
1 AUTHOR: Mike Hernandez <mike@culmination.org>\r
2 \r
3 DATE: 2003-09-28\r
4 \r
5 LICENSE: GNU Free Documentation License Version 1.2\r
6 \r
7 SYNOPSIS: Printing with samba and cups\r
8 \r
9 ALTERNATE LOCATION: http://www.culmination.org/Mike/printing_with_samba+cups.txt\r
11 DESCRIPTION:\r
12 This hint will help you configure CUPS to work with samba.\r
13 It includes directions to help you:\r
15 1)Print from your LFS box on a windows domain without a samba server running on the domain.\r
17 2)Print to a shared printer that is directly attatched to a windows machine\r
18 on your network, with or without a domain.\r
20 The hint now covers HP and Epson printers.\r
22 PREREQUISITES:\r
23 This hint assumes that:\r
24 1)You have root access to the linux box you are trying to print from.\r
26 2a)If you intend to print to a printer that is on a windows domain, that you\r
27 have an account on that domain, which grants access to the printer which is \r
28 shared on the domain.\r
30 2b)If you intend to print to a shared printer that is attatched to a machine\r
31 directly, you have a username and password that will grant you access to the\r
32 printer. (e.g. The printer in my house is attatched to a machine running\r
33 Windows XP. I do not have a domain, but I have the computers attatched to my\r
34 router. Samba can access the printer, but requires that I use an account name\r
35 and password that is valid for the Windows XP machine.)\r
37 3)You have the following installed according to BLFS instructions:\r
38 1.Samba (version 2.2.8a and 3.0.0 definitely work, not sure about others)\r
39 2.Cups-1.1.19\r
40 3.ESP Ghostscript-7.07.1rc2\r
41 *note* I also added the --with-ijs option to esp ghostscript\r
42 4.which-2.14 or an alternative\r
44 You will need to download and install the following, preferably with the\r
45 same --prefix as cups, samba, and esp ghostscript:\r
46 1.The Foomatic print filters \r
47 (http://www.linuxprinting.org/download/foomatic/foomatic-filters-3.0.0.tar.gz)\r
48 2.The Foomatic database engine\r
49 (http://www.linuxprinting.org/download/foomatic/foomatic-db-engine-3.0.0.tar.gz)\r
50 3.The HPIJS Drivers (if you plan on using an HP printer)\r
51 (http://hpinkjet.sourceforge.net/install.php)\r
54 HINT:\r
55 *One last reminder:\r
56 I installed all of the above, including samba, cups, and esp ghostscript with\r
57 --prefix=/usr.  All instructions below assume you did the same. It won't make\r
58 too much of a difference when running commands, but if your ppd files aren't\r
59 where cups can see them, or you dont know where the cups backend directory is,\r
60 remember this.\r
62 Ok let's get to it shall we?\r
64 First of all, please make sure you have networking capabilities on your box.\r
65 It might seem silly, but if you downloaded this at home, and are trying it at\r
66 work or vice versa, you might not have networking. Check your network interface\r
67 to be sure you have an ip address by running:\r
69         ifconfig eth0\r
71 Or ifconfig eth1, etc. Then try pinging some machines that are on the network to\r
72 be sure you have basic connectivity. It is worth the time to make sure of this!\r
73 Also, please be sure that the printer you are trying to use is ON and connected\r
74 to the network. Trust me, you don't want to find out that something like that\r
75 is wrong later. \r
77 Next we check to see if samba is working, with one of the following commands:\r
78         If you are connecting to a printer on a domain:\r
79         \r
80         smbclient -U Domain/Username -L //Server\r
82         If you are connecting to a shared printer that isn't on a domain:\r
83         \r
84         smbclient -L //Server\r
86 You will be prompted to enter your password upon pressing return.\r
87 If you are on a domain, enter the password that corresponds to your username,\r
88 otherwise pressing enter should suffice.\r
90 *Question*\r
91 What if I don't know the name of the server?\r
92 If you have a windows box near you, you can find out the name of the server\r
93 by browsing the network via Network Neighborhood or My Network Places, etc.\r
94 Also make note of what is said in the smbclient man page:\r
96         "Note that the server name required is  NOT  necessarily  the  IP\r
97         (DNS)  host  name of the server ! The name required is a NetBIOS\r
98         server name, which may or may not be the same as the IP hostname\r
99         of the machine running the server."\r
102 For example, if your office domain is called Foo, your username is Joe, and\r
103 the server name is FooServ the command would be:\r
104         \r
105         smbclient -U Foo/Joe -L //FooServ\r
107 If your intent is to use a printer that is attached to a machine that isn't on\r
108 a domain, use the name of that machine. For example, if the box in question\r
109 is running Windows XP, you can right click on the "My Computer" icon and\r
110 select properties, then check for the name on the "Computer Name" tab. The\r
111 workgroup name is not needed.\r
113 If this command works you will get a list of services available on the domain.\r
114 Though there are many interesting things listed here, what you are looking for\r
115 is a service of the type Printer. If you don't see any printers listed, there\r
116 is a problem. Be sure the printer is available on the network, possibly using\r
117 a windows machine nearby to browse the network if you can. Once you know the\r
118 name of the printer, you are ready to continue to the next step.\r
120 CUPS has a directory called backend where it stores spoolers for various\r
121 devices. If you installed cups with the --prefix=/usr option then the backends\r
122 will be in /usr/lib/cups/backend. If you keep your locate database up to date,\r
123 you can find this directory with the command:\r
125         locate backend | grep cups\r
127 Once you know where the backend directory is, change to it.\r
128 On my laptop the command is:\r
130         cd /usr/lib/cups/backend\r
132 Once inside, ls -al to see everything that is there. We will be creating a \r
133 symbolic link in this directory that points to the samba spooler. If you have\r
134 samba and which installed accorinding to the BLFS instructions, then the \r
135 following command will create the symbolic link:\r
137         ln -s `which smbspool` smb\r
139 Notice that which smbspool is enclosed in back ticks, not single quotes!\r
140 The backticks will execute the command within and use the result in the\r
141 ln command. On my system this is the equivalent of entering:\r
143         ln -s /usr/bin/smbspool smb\r
145 Now that we have made this link to the samba spooler, we have to restart CUPS\r
146 so that we can be sure the change we made will take effect:\r
148         /etc/rc.c/init.d/cups restart\r
150 Once you are sure CUPS has been restarted, you can proceed to add and configure\r
151 your printer. There are a few possible ways to do this:\r
153 Method #1 - using the lpadmin command\r
154 --------------------------------------\r
155 If you're comfortable using the command line to get things done, the lpadmin\r
156 command will allow you to add/remove and configure your printers. It is a very\r
157 powerful command and I *strongly* recommend you read the man page to learn\r
158 about all of its options.\r
160 The trick to using lpadmin to add a printer is that you need to know which\r
161 ppd file corresponds to your printer. For example, if I want to add the\r
162 Epson Stylus Color 660 that I have, I will use stcolor.ppd. If you aren't sure\r
163 which ppd to use, check linuxprinting.org or if you are a good detective maybe\r
164 you can look at the ppd files, which should be in /usr/share/cups/model and \r
165 make a guess =) I'm pretty sure that the worst thing that will happen if you \r
166 guess wrong is that the printer won't print, or will print incorrectly. I am \r
167 not suggesting that you guess, however.\r
169 *note:  Foomatic ppds ought to be in /usr/share/cups/model/foomatic-ppds\r
170         and if they aren't you might run into problems later, so read the\r
171         foomatic documentation to see what might have happened.\r
173 The lpadmin command to add a samba printer is as follows:\r
175         lpadmin -p PrinterName -v smb://Username:Password@Server/Printer \\r
176         -P /path/to/yourprintermodel.ppd\r
178 The PrinterName that follows the -p is the name by which you wish to refer to\r
179 the printer on your machine.\r
181 For example, to add the HP LaserJet 6P that we use in my office, where my \r
182 username for the domain is Mike,the password is FooPaSs, the server is FooServ \r
183 and the printer name is HPLaserJ, the command is:\r
185         lpadmin -p WorkPrinter -v smb://Mike:FooPaSs@FooServ/HPLaserJ \\r
186         -P /usr/share/cups/model/foomatic-ppds/HP/HP-LaserJet_6P-hpijs.ppd.gz\r
188 Note that it's ok if the ppd has been gzipped, so long as the file name ends in\r
189 .ppd.gz.\r
191 Also, if you are adding a printer that isn't on a domain, but shared and\r
192 attatched directly to a machine, the Username:Password portion of the device\r
193 URI will be a Username and Password to an account that has access to the\r
194 shared printer.\r
196 If you received "error: client-not-possible" then chances are there is a typo \r
197 in your URI, or your link to smbspool is missing or pointing to the wrong place.\r
199 After adding the printer, you will need to enable it before it will accept\r
200 any print jobs. The default status of a printer added with the above lpadmin\r
201 command is stopped, rejecting jobs. I will not go into detail here as you ought\r
202 to have read the cups documentation, however I will mention that the state of\r
203 "stopped, rejecting jobs" describes 2 attributes of a printer. Use the\r
204 following commands to start the printer, and tell it to accept jobs.\r
206         /usr/bin/enable PrinterName\r
207         accept PrinterName\r
209 *IMPORTANT!!* - you must use the full path the the enable command!\r
210 This is because if you are using bash there is a builtin command called\r
211 enable. Due to the order bash follows when interpreting the command line\r
212 the enable builtin will be executed rather than the one in /usr/bin. You can\r
213 see the differences by entering: help enable (for the builtin) and man 8 enable\r
214 (to see the printer-related enable's man page).\r
216 Check if all is well with the command:\r
217         \r
218         lpstat -a\r
220 It should show you that your printer is accpting jobs.\r
222 At this point you should try to print using the lpr command. If it doesn't work,\r
223 try restarting cups. If you keep running into problems, set the LogLevel to\r
224 debug in the cupsd.conf file. It should be in the /etc/cups/ directory.\r
225 After doing this, restart cups and read the /var/log/cups/error_log file.\r
226 Read it carefully, as it can usually explain the problem you are having.\r
228 That's it! You can add as many printers as you need to via this method, and\r
229 print to them using the lpr -P PrinterName command to specify which printer\r
230 you want to use. Read The Fine Manual to learn more configuration options and\r
231 how to remove printers, etc. =)\r
233 Method #2 - Using the CUPS web interface\r
234 ----------------------------------------\r
235 If you want to use the CUPS web interface, open your web browser and\r
236 point it to http://localhost:631\r
238 *Note: I also tried this with lynx, and it works. I wouldn't suggest using\r
239 lynx unless you are an avid lynx user and understand the way it works. If you\r
240 don't have a graphical web browser, your best bet is probably Method #1*\r
242 From the web interface, click on Printers and then Add Printer. If you installed\r
243 CUPS according to BLFS instructions and haven't edited any configuration files,\r
244 you will be asked for a user name and password. root and the appropriate\r
245 password will allow you access.\r
247 Enter a name, location, and description of your printer, and click Continue.\r
249 The next screen is where you must choose the device. You need to select\r
250 Windows Printer via SAMBA. If you don't see this in the list of devices,\r
251 be sure you have the smb link in your /usr/lib/cups/backend directory and\r
252 check to make sure it is pointing to smbspool. YOU CAN NOT USE ANY OTHER\r
253 DEVICE TO PRINT TO A SAMBA PRINTER! If you try to you will get a message\r
254 similar to "client-not-possible".\r
256 *Note: Actually the reason you can't is because the beginning of the URI is\r
257 used by cups to determine which backend to use. I learned this is case by\r
258 using the lpd device, and making lpd a symbolic link to smbspool. DON'T DO IT!\r
259 I am just mentioning it here because it was part of the learning process that\r
260 lead to the creation of this hint*\r
262 Once the device has been selected, click continue which will move you to the\r
263 device URI entry screen. The URI for your samba printer follows the following\r
264 format:\r
266         smb://Username:password@Server/Printername\r
268 For example, smb://Joe:secret123@FooServ/HPLaserJ\r
270 When you are sure you entered it correctly, click continue. We will now select\r
271 the Model/Driver for your printer. If you are using an HP Printer, you will\r
272 select HP and click continue. If you are using a type of printer that is not\r
273 listed, I suggest search the linuxprinting.org database for guidance.\r
275 The next screen asks you to pick the specific driver. Here you have to be\r
276 careful in choosing the right one for your printer. I use\r
278         HP LaserJet 6P, Foomatic + hpijs (en)\r
280 For the printer in my office. Feel free to try different drivers until you find\r
281 the one that gives the best results.\r
283 After clicking continue you should get a message telling you the printer was\r
284 added successfully. \r
286 If you received "error: client-not-possible" then chances\r
287 are there is a typo in your URI, or your link to smbspool is missing or pointing\r
288 to the wrong place. (See the end of the Method #1 instructions for tips on how \r
289 to find the problem)\r
291 Click the Printers link again, and print a test page for your printer to make\r
292 sure everything is in working order.\r
294 If everything works, you can now print from any application that uses lpr as \r
295 its print command. You can also print from the command line using lpr. If you\r
296 install multiple printers, you can print using the format\r
298         lpr -P PrinterName\r
300 To print to a specific printer.\r
302 That's it! =)\r
304 TODO:\r
305 Constructive criticism and/or suggestions regarding this hint are welcomed.\r
306 There's lots of help out there for the gentoo and redhat folks, but running\r
307 redhat-printer-config doesn't quite work for us does it? \r
309 CHANGELOG:\r
310 [2003-09-28]\r
311   *Added command line configuration commands, cleaned up some typos\r
312 [2003-09-26]\r
313   * Initial hint.\r