Curs: | SambasobreLDAP |
Fitxers: | https://svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP/cups |
Repositori SVN: | https://[email protected]/svn/iceupc/SambaSobreLDAP |
Usuari: | anonymous |
Paraula de pas: | sense paraula de pas |
Autors: | Lluís Pérez Vidal Sergi Tur Badenas |
Samba pot treballar conjuntament amb CUPS. Les versions modernes de Samba porten compilat suport per a CUPS (mitjançant l'API de CUPS). L'escenari més comú és el d'un servidor que té instal·lat al mateix temps un Samba i un CUPS i que CUPS permeti imprimir des de localhost (també es pot fer però que els dos serveis estiguin en servidors diferents i permetre a Samba utilitzar un servidor remot).
A aquest article podreu trobar els detalls sobre com configurar un servidor Samba conjuntament amb CUPS.
Consulteu l'article Printing per tal de tenir una visió general dels possibles sistemes de gestió d'impressores.
Consulteu l'article Printing per tenir una visió més detallada sobre els models de gestió d'impressores.
A Samba hi ha una opció anomenada use client driver que segons el manual de Samba:
$ man smb.conf ... use client driver (S) This parameter applies only to Windows NT/2000 clients. It has no effect on Windows 95/98/ME clients. When serving a printer to Windows NT/2000 clients without first installing a valid printer driver on the Samba host, the client will be required to install a local printer driver. From this point on, the client will treat the print as a local printer and not a network printer connection. This is much the same behavior that will occur when disable spoolss = yes. The differentiating factor is that under normal circumstances, the NT/2000 client will attempt to open the network printer using MS-RPC. The problem is that because the client considers the printer to be local, it will attempt to issue the OpenPrinterEx() call requesting access rights associated with the logged on user. If the user possesses local administator rights but not root privilege on the Samba host (often the case), the OpenPrinterEx() call will fail. The result is that the client will now display an "Access Denied; Unable to connect" message in the printer queue window (even though jobs may successfully be printed). If this parameter is enabled for a printer, then any attempt to open the printer with the PRINTER_ACCESS_ADMINISTER right is mapped to PRINTER_ACCESS_USE instead. Thus allowing the OpenPrinterEx() call to succeed. This parameter MUST not be enabled on a print share which has valid print driver installed on the Samba server. Default: use client driver = no
Indica si per a una impressora compartida per Samba cal utilitzar el driver local o el driver del servidor.
Aquest paràmetre es pot indicar per a cada recurs compartit tipus impressora. El seu valor per defecte és:
use client driver = no
Abans de la versió 2.2 només es suportava el tipus d'impressió de Windows 9x/Me. Des de la versió 2.2 es suporta el tipus d'impressió de Windows NT. S'implementa amb MS-RPC (Remote Procedure Calls). MS-RPCs utilitza SPOOLSS (un conducte amb nom) per a l'impressio que inclou les següents característiques:
A benefit of updating is that Samba-3 is able to publish its printers to Active Directory (or LDAP).
A fundamental difference exists between MS Windows NT print servers and Samba operation. Windows NT permits the installation of local printers that are not shared. This is an artifact of the fact that any Windows NT machine (server or client) may be used by a user as a workstation. Samba will publish all printers that are made available, either by default or by specific declaration via printer-specific shares.
Windows NT/200x/XP Professional clients do not have to use the standard SMB printer share; they can print directly to any printer on another Windows NT host using MS-RPC. This, of course, assumes that the client has the necessary privileges on the remote host that serves the printer resource. The default permissions assigned by Windows NT to a printer gives the print permissions to the well-known Everyone group. (The older clients of type Windows 9x/Me can only print to shared printers.)
NOTA: El suport per a SPOOLSS estarà activat o desactivat depenent dels paràmetres disable spoolss o enable spoolss del la secció global del fitxer de configuració de Samba (/etc/samba/smb.conf. Per defecte el suport per a spoolss està activat.
IMPORTANT: No és necessari instal·lar un driver d'una impressora en un servidor per tal de poder utilitzar aquesta impressora des d'un client Windows. Els clients poden instal·lar les impressores en local (el driver) però configurar-la per utilitzar-la en remot (servidor d'impressió o accés directe remot)
Point'n'Print és una capacitat que permet que el driver d'un impressora compartida en xarxa a través de Samba s'instal·li en el client el primer cop que la d'utilitzar.
Els drivers es guarden al servidor al recurs compartit:
[print$]
Es poden instal·lar els drivers en aquest recurs compartit de múltiples formes ( consulteu Afegint drivers al recurs compartit print$):
IMPORTANT: Samba no utilitza els drivers pujats de cap forma per tal de processar els fitxers que s'envien al servidor d'impressió. Només s'utilitzen per ser descarregats mitjançant el mecanisme Point'n'Print
IMPORTANT: És recomanable llegir abans la configuració de CUPS per Samba
Vegeu també APW.
Segons el manual:
$ man smb.conf ... printer admin (S) This lists users who can do anything to printers via the remote administration interfaces offered by MS-RPC (usually using a NT workstation). This parameter can be set per-share or globally. Note: The root user always has admin rights. Use caution with use in the global stanza as this can cause side effects. This parameter has been marked deprecated in favor of using the SePrintOperatorPrivilege and individual print security descriptors. It will be removed in a future release. Default: printer admin = Example: printer admin = admin, @staff
Per saber si un usuari té els privilegis que calen:
$ sudo net rpc rights list sergitur -Usergitur Enter sergitur's password: SeMachineAccountPrivilege
En aquest cas l'usuari sergitur no té els privilegis necessaris per gestionar impressores:
NOTA: Qualsevol usuari (s'indica després de -U) pot consultar els privilegis de qualsevol altre usuari del sistema. Per exemple:
$ sudo net rpc rights list santifilgueira -Uhomersimpson Enter homersimpson's password: SeMachineAccountPrivilege
Només l'usuari root o els usuaris que tinguin el privilegi SeAddUsersPrivilege poden garantir/afegir privilegis a altres usuaris:
$ sudo net rpc rights grant "sergitur" SeMachineAccountPrivilege -Uroot
Consulteu també Samba#Privilegis
La majoria de distribucions modernes com per exemple Ubuntu, al instal·lar Samba ja configuren i creen aquesta carpeta (si no es així podeu fer-ho a mà seguint les instruccions de [1]).
El recurs compartit a Samba es configura al fitxer smbd.conf:
[print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no
On la carpeta /var/lib/samba/printers conté:
$ ls -la /var/lib/samba/printers total 40 drwxr-xr-x 10 root root 4096 2010-05-18 00:55 . drwxr-xr-x 5 root root 4096 2010-10-03 14:04 .. drwxr-xr-x 2 root root 4096 2010-04-09 19:33 COLOR drwxr-xr-x 2 root root 4096 2010-04-09 19:33 IA64 drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32ALPHA drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32MIPS drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32PPC drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32X86 drwxr-xr-x 2 root root 4096 2010-04-09 19:33 WIN40 drwxr-xr-x 2 root root 4096 2010-04-09 19:33 x64
Els drivers estan organitzats per arquitectures. Normalment per a Windows XP de 32 bits trobareu els drivers a la carpeta W32X86.
Els paràmetres possibles són:
comment
comment = Printer Drivers
El comentari apareix al costat del nom del recurs compartit. Sovint no es mostra al clients Windows però si el veureu am smbclient -L:
$ smbclient -L localhost -N Anonymous login successful Domain=[INSEBRE] OS=[Unix] Server=[Samba 3.4.7] Sharename Type Comment --------- ---- ------- IPC$ IPC IPC Service (Alumnat) ...
print$ Disk Printer Drivers
path
path = /var/lib/samba/printers
La carpeta del sistema on es guarden els drivers.
browseable
browseable = no
Fa que el recurs compartit aparegui o no al navegar per la xarxa de Windows. Sempre si pot accedir encara que no sigui browseable, per exemple:
C:\> net use g:\\sambaserver\print$
O amb l'eina "Connectar a unidad de red" de l'explorador de fitxers de Windows.
guest ok
guest ok= yes
Els usuaris anònims poden instal·lar impressores accedint a aquest recurs?. Si entren com usuaris al domini no cal aquest paràmetre.
write list
write list = @ntadmin, root
Permet indicar qui podrà afegir impressores al servidor. El grups de unix s'indiquen amb l'arroba a l'inici.
Per tal de poder afegir un driver cal complir una de les següents condicions:
A més cal tenir permisos d'escriptura als fitxer Unix. Per defecte els permisos són:
$ ls -la /var/lib/samba/printers total 40 drwxr-xr-x 10 root root 4096 2010-05-18 00:55 . drwxr-xr-x 5 root root 4096 2010-10-03 14:18 .. drwxr-xr-x 2 root root 4096 2010-04-09 19:33 COLOR drwxr-xr-x 2 root root 4096 2010-04-09 19:33 IA64 drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32ALPHA drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32MIPS drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32PPC drwxr-xr-x 2 root root 4096 2010-04-09 19:33 W32X86 drwxr-xr-x 2 root root 4096 2010-04-09 19:33 WIN40 drwxr-xr-x 2 root root 4096 2010-04-09 19:33 x64
Per tant oco! que només el root pot modificar-ho!.
Once you have created the required [print$] service and associated subdirectories, go to a Windows NT 4.0/200x/XP client workstation. Open Network Neighborhood or My Network Places and browse for the Samba host. Once you have located the server, navigate to its Printers and Faxes folder. You should see an initial listing of printers that matches the printer shares defined on your Samba host.
Es poden instal·lar els drivers en aquest recurs compartit de múltiples formes:
http://www.ossramblings.com/samba_push_windows_drivers http://www.samba.org/samba/docs/man/Samba-Guide/happy.html#id2582657
Dos opcions:
Consulteu APW.
NOTA: Recordeu que sols no funcionen. Cal combinar-los amb els de Windows/Adobe
Es pot obtenir a:
http://www.cups.org/software.php
El podeu baixar amb wget, actualment (--acacha 14:32, 3 oct 2010 (UTC)) la versió és la 6.0:
$ sudo wget http://ftp.easysw.com/pub/cups/windows/cups-windows-6.0-source.tar.gz $ sudo apt-get install libcups2-dev $ tar -zxvf cups-windows-6.0-source.tar.gz $ cd cups-windows* $ sudo make install Creating directory /usr/share/cups/drivers... Installing cups6.inf... Installing cups6.ini... Installing cupsps6.dll... Installing cupsui6.dll...
Com podeu veure s'instal·len 4 fitxers:
$ ls /usr/share/cups/drivers/ cups6.inf cups6.ini cupsps6.dll cupsui6.dll
NOTA: A la documentació de Samba es parla del fitxer cups.hlp (i altres...)! Aquest fitxer sembla que no hi és a la versió 6.0 i suposo que no es necessita...
Un cop teniu els drivers instal.lats aleshores ja esteu preparats per instal·lar el driver al recurs compartit print$ utilitzant cupsaddsmb
Es pot instal·lar el driver a una màquina Windows des de la web:
http://www.adobe.com/support/downloads/product.jsp?product=pdrv&platform=win
Podeu baixar el instal·lar el l'idioma que vulgueu. Per exemple el fitxer en castellà es diu:
winstspa.exe
Un cop instal·lat trobareu els fitxers:
PS5UI.DLL PSCRIPT.HLP PSCRIPT.NTF PSCRIPT5.DLL
A la carpeta
C:\WINDOWS\system32\spool\drivers\w32x86\3
Copieu aquest fitxers al servidor Samba que utilitzeu com a servidor de impressores (ho podeu fer per exemple mitjançant la xarxa de Windows). En aquest exemple els he copiat a la Home del meu usuari a una carpeta creada prèviament:
/home/sergitur/WindowsPostScriptDriverFiles
Ara copieu els fitxers a /usr/share/cups/drivers
$ sudo cp /home/sergitur/WindowsPostScriptDriverFiles/PS5UI.DLL /usr/share/cups/drivers/ps5ui.dll $ sudo cp /home/sergitur/WindowsPostScriptDriverFiles/PSCRIPT.HLP /usr/share/cups/drivers/pscript.hlp $ sudo cp /home/sergitur/WindowsPostScriptDriverFiles/PSCRIPT.NTF /usr/share/cups/drivers/pscript.ntf $ sudo cp /home/sergitur/WindowsPostScriptDriverFiles/PSCRIPT5.DLL /usr/share/cups/drivers/pscript5.dll
IMPORTANT: Fixeu-vos com aprofitem per canviar els noms del fitxers a minúscules. Recordeu, Linus és case-sensitive.
Podeu utilitzar el d'Adobe (son equivalents):
Consulteu Samba_i_CUPS#Adobe_postscript_driver
IMPORTANT: Consulteu abans la secció Windows CUPS driver . En resum cupsaddsmb s'utilitza només per instal·lar el driver postscript de CUPS (i/o el d'Adobe/Microsoft) a un servidor d'impressores Samba/CUPS. No serveix per instal·lar drivers oficials de venedors (podeu utilitzar APW per instal·lar aquest tipus de drivers). cupsaddsmb no funciona amb els drivers propietaris del proveïdors d'impressores, només funciona amb els drivers específics que apareixen al manual de l'ordre cupsaddsmb, és a dir CUPS Postcript i Windows/Adobe Postscript
La utilitat cupsaddsmb és una aplicació de línia d'ordres de CUPS que proveïx d'un mètode alternatiu per tal de transferir els drivers d'una impressora al recurs compartit print$ de Samba.
cupsaddsmb pot utilitzar el driver d'Adobe PostScript driver (o el de Windows que és idèntic al de Adobe) o també el driver CUPS PostScript per a Windows NT/200x/XP.
El driver de CUPS per a PostScript es pot descarregar a la pàgina de descàrregues de CUPS. El nom del paquet és cups-windows-[version].tar.gz.
NOTA: En alguns llocs és parla del fitxer cups-samba en comptes de cups-windows. Crec que és el mateix...
És prefereix el driver de CUPS respecte al de Adobe per les següents avantatges:;
Podeu consultar més diferències/avantatges a:
http://www.linuxtopia.org/online_books/network_administration_guides/samba_reference_guide/29_CUPS-printing_88.html
IMPORTANT: Només Windows NT, 2000, i XP (Vista i 7?) son suportats pel driver de CUPS. Es necessita el driver d'Adobe si voleu suport per a Windows 95, 98, i Me.
Un cop teniu els drivers instal·lats segons els passos dels apartats:
IMPORTANT: Abans d'executar cupsaddsmb fitxeu-vos que utilitza un usuari. Cal doncs posar el servidor en mode user i tenir com a mínim un usuari amb permisos d'administració o amb privilegis d'operador d'impressores. També són importants els permisos del recurs compartit [print$]
Ara ja podeu instal·lar els driver postscript a totes les impressores amb:
$ sudo cupsaddsmb -H localhost -U sergitur -a -v 2> sortidacupsaddsmb.txt
NOTA: Sempre és recomanable executar cupsaddsmb amb l'opció -v (verbose) i així podeu obtindre els detall del que es fa. Observeu com s'utilitza l'ordre smbclient. També és interessant guardar el resultat de la sortida a un fitxer per tal de poder veure si tot ha anat bé
Si tot ha anat bé, al final del fitxer veureu:
$ tail -f sortidacupsaddsmb.txt ... Running command: rpcclient localhost -N -A /tmp/0533c4cc45093 -c 'setdriver HP_HP_LaserJet_P2015_Series HP_HP_LaserJet_P2015_Series' Successfully set HP_HP_LaserJet_P2015_Series to driver HP_HP_LaserJet_P2015_Series.
NOTA: Els missatges d'error NT_STATUS_OBJECT_NAME_COLLISION són normals si ja teniu les carpetes W32X86, que les tindreu si ja havíeu instal·lat algun driver.
També es pot utilitzar cupsaddsmb per afegir els drivers de CUPS a una sola impressora:
$ sudo cupsaddsmb -v -U root infotec_IS2027 Password for root required to access localhost via Samba: ['secret']
També es pot indicar on estan els servidors remots tant de Samba com de CUPS amb les opcions -H i -h:
$ sudo cupsaddsmb -H sambaserver -h cupsserver -v printer
L'ordre és útil per saber el que fa cupsaddsmb, però cal dir que el més habitual és tenir el servidor CUPS i el servidor Samba a la mateixa màquina.
Per comprovar si s'han instal·lar els drivers:
$ ls -la /var/lib/samba/printers/W32X86/ total 1460 drwxrwsr-x 3 root printoperators 4096 2010-10-17 12:03 . drwxrwsr-x 10 root printoperators 4096 2010-10-05 19:16 .. drwxr-sr-x 2 sergitur printoperators 4096 2010-10-17 12:03 3 -rwxr--r-- 1 sergitur printoperators 20296 2010-10-17 12:03 A30_ImpressoraLaserjetP2015.ppd -rwxr--r-- 1 sergitur printoperators 72 2010-10-17 12:03 cups6.ini -rwxr--r-- 1 sergitur printoperators 12568 2010-10-17 12:03 cupsps6.dll -rwxr--r-- 1 sergitur printoperators 13672 2010-10-17 12:03 cupsui6.dll -rwxr--r-- 1 sergitur printoperators 22511 2010-10-17 12:03 HP_HP_LaserJet_P2015_Series.ppd -rwxr--r-- 1 sergitur printoperators 131072 2010-10-17 12:03 ps5ui.dll -rwxr--r-- 1 sergitur printoperators 455168 2010-10-17 12:03 pscript5.dll -rwxr--r-- 1 sergitur printoperators 16062 2010-10-17 12:03 pscript.hlp -rwxr--r-- 1 sergitur printoperators 792644 2010-10-17 12:03 pscript.ntf
Per a més detalls consulteu el manual:
$ man cupsaddsmb
Recursos
TODO
Es poden utilitzar aquestes eines per tal de fer la instal·lació manual del drivers al servidor.
NOTA: De fet, cupsaddsmb utilitza aquestes ordres
Un exemple de com pujar els fitxers
$ smbclient //localhost/print\$ -U 'root%xxxx' \ -c 'cd W32X86; \ put /etc/cups/ppd/mysmbtstprn.ppd mysmbtstprn.PPD; \ put /usr/share/cups/drivers/cupsui.dll cupsui.dll; \ put /usr/share/cups/drivers/cupsdrvr.dll cupsdrvr.dll; \ put /usr/share/cups/drivers/cups.hlp cups.hlp'
NOTA: L'exemple és obsolet ja que utilitza una versió antiga dels fitxers del driver de cups per a Windows
Podeu consultar la documentació completa a:
http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/CUPS-printing.html#id2644219
Actualment gairebé totes les versions compilades de Samba que podeu trobar a distribucions Linux modernes inclouen suport per a cups, ho podeu comprovar amb:
$ ldd `which smbd` | grep cups
libcups.so.2 => /usr/lib/libcups.so.2 (0x00007f85d0e5f000)
A l'exemple podem veure com el dimoni samba (smbd) està compilat amb suport de a CUPS.
Hi ha dos paràmetres principals (secció global) per tal de configurar Samba amb suport per a CUPS:
printing = cups printcap = cups
printing
Segons el manual:
printing (S) This parameters controls how printer status information is interpreted on your system. It also affects the default values for the print command, lpq command, lppause command , lpresume command, and lprm command if specified in the [global] section. Currently nine printing styles are supported. They are BSD, AIX, LPRNG, PLP, SYSV, HPUX, QNX, SOFTQ, and CUPS. To see what the defaults are for the other print commands when using the various options use the testparm(1) program. This option can be set on a per printer basis. Please be aware however, that you must place any of the various printing commands (e.g. print command, lpq command, etc...) after defining the value for the printing option since it will reset the printing commands to default values. See also the discussion in the [printers] section. Default: printing = Depends on the operating system, see testparm -v.
El valor per defecte del paràmetre printing el podeu consultar amb testparm:
$ sudo testparm -v -s | grep printing ...
printing = cups
Com podeu veure se suporten 9 formes diferents de gestionar les impressions amb Samba:
Aquest article veurem com funciona l'opció CUPS.
printcap
Del manual (sinònim: printcap name):
printcap name (G) This parameter may be used to override the compiled-in default printcap name used by the server (usually /etc/printcap). See the discussion of the [printers] section above for reasons why you might want to do this. To use the CUPS printing interface set printcap name = cups . This should be supplemented by an addtional setting printing = cups in the [global] section. printcap name = cups will use the "dummy" printcap created by CUPS, as specified in your CUPS configuration file. On System V systems that use lpstat to list available printers you can use printcap name = lpstat to automatically obtain lists of available printers. This is the default for systems that define SYSV at configure time in Samba (this includes most System V based systems). If printcap name is set to lpstat on these systems then Samba will launch lpstat -v and attempt to parse the output to obtain a printer list. A minimal printcap file would look something like this: print1|My Printer 1 print2|My Printer 2 print3|My Printer 3 print4|My Printer 4 print5|My Printer 5 where the ´|´ separates aliases of a printer. The fact that the second alias has a space in it gives a hint to Samba that it´s a comment. Note Under AIX the default printcap name is /etc/qconfig. Samba will assume the file is in AIX qconfig format if the string qconfig appears in the printcap filename. Default: printcap name = /etc/printcap Example: printcap name = /etc/myprintcap
CUPS no necessita un fitxer printcap.
TODO:
CUPS does not need a printcap file. However, the cupsd.conf configuration file knows of two related directives that control how such a file will be automatically created and maintained by CUPS for the convenience of third-party applications (example: Printcap /etc/printcap and PrintcapFormat BSD). Legacy programs often require the existence of a printcap file containing printer names or they will refuse to print. Make sure CUPS is set to generate and maintain a printcap file. For details, see man cupsd.conf and other CUPS-related documentation, like the wealth of documents regarding the CUPS server itself available from the CUPS web site.
TODO: load printers
Aquesta secció del fitxer de configuració de samba (/etc/samba/smb.conf) és similar al que realitza la secció [homes] però per a impressores. Si hi ha una secció [printers] aleshores els usuaris podran connectar-se a qualsevol impressora que aparegui al fitxer printcap del servidor.
Es crea un recurs compartit de tipus impressora. Al crear aquest recurs es realitzen les següents modificacions:
IMPORTANT: La secció printers sempre ha de tenir l'opció printable sinó samba donará un error al llegir el fitxer de configuració (vegeu testparm)
Un exemple de secció printers:
[printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes guest ok = yes read only = yes create mask = 0700 write list = "@printoperators"
Segons el manual:
$ man smb.conf ... The [printers] section This section works like [homes], but for printers. If a [printers] section occurs in the configuration file, users are able to connect to any printer specified in the local host´s printcap file. When a connection request is made, the existing sections are scanned. If a match is found, it is used. If no match is found, but a [homes] section exists, it is used as described above. Otherwise, the requested section name is treated as a printer name and the appropriate printcap file is scanned to see if the requested section name is a valid printer share name. If a match is found, a new printer share is created by cloning the [printers] section. A few modifications are then made to the newly created share: · The share name is set to the located printer name · If no printer name was given, the printer name is set to the located printer name · If the share does not permit guest access and no username was given, the username is set to the located printer name. The [printers] service MUST be printable - if you specify otherwise, the server will refuse to load the configuration file. Typically the path specified is that of a world-writeable spool directory with the sticky bit set on it. A typical [printers] entry looks like this: [printers] path = /usr/spool/public guest ok = yes printable = yes All aliases given for a printer in the printcap file are legitimate printer names as far as the server is concerned. If your printing subsystem doesn´t work like that, you will have to set up a pseudo-printcap. This is a file consisting of one or more lines like this: alias|alias|alias|alias... Each alias should be an acceptable printer name for your printing subsystem. In the [global] section, specify the new file as your printcap. The server will only recognize names found in your pseudo-printcap, which of course can contain whatever aliases you like. The same technique could be used simply to limit access to a subset of your local printers. An alias, by the way, is defined as any component of the first entry of a printcap record. Records are separated by newlines, components (if there are more than one) are separated by vertical bar symbols (|). Note On SYSV systems which use lpstat to determine what printers are defined on the system you may be able to use printcap name = lpstat to automatically obtain a list of printers. See the printcap name option for more details.
[global] load printers = yes printing = cups printcap name = cups [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = yes writable = no printable = yes printer admin = root, @ntadmins, @smbprintadm
D'aquesta forma tenim una configuració molt bàsica de CUPS que permetrà imprimir qualsevol gràfic, PDF o fitxer Postscript que sigui enviat des de qualsevols client Samba (per exemple una màquina amb Windows XP).
Cal tenir en compte però que la majoria d'usuaris Windows no sabran com enviar aquests tasques d'impressió a Samba sense utilitzar una aplicació gràfica (GUI). La majoria de clients Windows tenen els drivers de la impressora instal·lats localment i una aplicació gràfica s'encarrega de imprimir fent un simple clic.
En l'estil d'impressió "tradicional" de Linux els usuaris enviaven les tasques d'impressió directament a les cues d'impressió (spooler).
Cal tenir en compte que el driver instal·lar en local fan d'intermediari entre el format natiu de l'aplicació des de la que voleu imprimir (lector de PDF, processador de textos, visualitzador de imatges, etc.) i l'stream de dades finals a imprimir. Aquestes dades finals, si el sistema no és un dispositiu PostScript device, aleshores les dades estan en un format binari que és només compatible amb la impressora final. Això pot causar múltiples problemes.
[global] load printers = yes printing = cups printcap name = cups [printers] comment = All Printers path = /var/spool/samba browseable = no # setting depends on your requirements guest ok = yes writable = no printable = yes printer admin = root [print$] comment = Printer Drivers path = /etc/samba/drivers browseable = yes guest ok = no read only = yes write list = root, @smbprintadm
El recurs print$ es on els clients Windows esperen trobar els drivers
En el moment de fer aquesta documentació (--acacha 11:18, 3 oct 2010 (UTC)) la versió disponible és la 6.0 i la trobareu a
http://www.cups.org/software.php?VERSION=1.4.4
A la llista que apareix cap al final...
$ wget http://ftp.easysw.com/pub/cups/windows/cups-windows-6.0-source.tar.gz $ tar xvzf cups-windows-6.0-source.tar.gz $ cd cups-windows-6.0/
Per instal·lar:
Exemple de configuració:
[printers] comment = Totes les impressores browseable = no path = /var/spool/samba printable = yes guest ok = yes read only = yes create mask = 0700 write list = "@printoperators" [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = yes use client driver = yes # valid users = "@Domain Users" write list = "@printoperators"
Cal que us assegureu que teniu creat el grup Unix printoperators o afegint-lo a la màquina local o si teniu el Samba amb Ldap afegint-lo a Ldap. En el meu cas el vaig afegir a través de Gosa i després vaig afegir al grup printoperators als usuaris que han de gestionar les impressores:
$ groups sergitur sergitur : sergitur domadmin printoperators profes
Després cal arreglar els permisos de /var/lib/samba/printers:
$ sudo chown -R root:printoperators -R /var/lib/samba/printers $ sudo chmod g+s -R /var/lib/samba/printers $ sudo chmod g+w -R /var/lib/samba/printers
El resultat:
$ ls -la /var/lib/samba/printers total 40 drwxrwsr-x 10 root printoperators 4096 2010-10-17 18:35 . drwxr-xr-x 5 root root 4096 2010-10-28 06:24 .. drwxrwsr-x 2 root printoperators 4096 2010-04-09 19:33 COLOR drwxrwsr-x 2 root printoperators 4096 2010-04-09 19:33 IA64 drwxrwsr-x 2 root printoperators 4096 2010-04-09 19:33 W32ALPHA drwxrwsr-x 2 root printoperators 4096 2010-04-09 19:33 W32MIPS drwxrwsr-x 2 root printoperators 4096 2010-04-09 19:33 W32PPC drwxrwsr-x 3 root printoperators 4096 2010-10-17 18:58 W32X86 drwxrwsr-x 2 root printoperators 4096 2010-04-09 19:33 WIN40 drwxrwsr-x 2 root printoperators 4096 2010-04-09 19:33 x64
Ara no oblideu assignar el grup Unix printoperators a qui haguí de gestionar les impressores.
Finalment configuració els privilegis de Samba i assigneu el privilegi:
SePrintOperatorPrivilege
Podeu consultar els privilegis d'un usuari concret amb:
$ sudo net rpc rights list sergitur -Uroot
I afegir privilegis (cal fer-ho amb l'usuari root de Samba o amb un usuari que tingui el privilegi de gestionar privilegis: )
Un client Linux, pot accedir a una servidor d'impressores tal i com hi accediria a un servidor de fitxers. Per exemple es pot utilitzar l'ordre smbclient:
$ smbclient -L 192.168.0.8 Enter sergi's password: Anonymous login successful Domain=[INSEBRE] OS=[Unix] Server=[Samba 3.4.7] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers departaments Disk Carpetes dels diferents Departaments del Centre IPC$ IPC IPC Service (Alumnat) HP_HP_LaserJet_P2015_Series Printer HP HP LaserJet P2015 Series A30_ImpressoraLaserjetP2015 Printer HP LaserJet P2015 Series ...
Fixeu-vos que es tracata d'una connexió anònima i vegem els següents recursos compartits:
Un client Windows, pot accedir a una servidor d'impressores tal i com hi accediria a un servidor de fitxers. Per exemple es pot fer clic a botó Inici, i Executar. A executar poseu:
\\192.168.0.8
On 192.168.0.8 és la adreça IP del servidor al qual us voleu connectar. Trobareu quelcom similar a:
El APW és el wizard que proporciona Windows per tal d'afegir una impressora. El wizard es pot utilitzar en local o en un servidor d'impressores remot.
Per tal de poder utilitzar el APW en un servidor d'impressores cal fer-ho amb usuari amb privilegis. Si intenteu connectar-bos amb un usuari que no tingui privilegis us permetrà indicar un altre usuari (i paraula de pas) per tal de poder realitzar l'operació . El privilegi necessari és:
SePrintOperatorPrivilege
NOTA: Actualment (--acacha 11:48, 16 oct 2010 (UTC)) és un paràmetre obsolet però printer admin també s'utilitzava a Samba per indicar quin usuari tenia permisos per a gestionar les imprssores.
A la secció [global] del fitxer /etc/samba/smb.conf hi ha un paràmetre:
show add printer wizard
que permet indicar si volem que als clients se'ls mostri el APW o no. Per exemple podem no mostrar-lo amb:
show add printer wizard = no
Segons la documentació:
show add printer wizard = yes
Setting is normally enabled by default (even if the parameter is not specified in smb.conf). It causes the Add Printer Wizard icon to appear in the Printers folder of the Samba host's share listing (as shown in Network Neighborhood or by the net view command). To disable it, you need to explicitly set it to no (commenting it out will not suffice). The Add Printer Wizard lets you upload a printer driver to the [print$] share and associate it with a printer (if the respective queue exists before the action), or exchange a printer's driver for any other previously uploaded driver.
NOTA: Tinc el dubte si APW permet afegir impressores i/o modificar-les! pot ser que només permeti canviar/indicar els drivers d'una impressora ja creada? El que he aconseguit fer és crear la impressora a CUPS i després pujar els drivers mitjançant APW, però no puc afegir impressores (error Acceso Denegado)--acacha 11:40, 16 oct 2010 (UTC)
NOTA: No he pogut comprovar si funciona o no... En principi al desactivar-lo
Per tal de poder afegir o modificar impressores utilitzant APW cal que a la configuració de Samba tinguem:
show add printer wizard = yes
NOTA: és l'opció per defecte
I també indicar les opcions:
addprinter command
i
delete printer command
Que hem de posar a addprinter command? Depèn del sistema que estiguem utilitzant per a les impressores al servidor. Segons el manual:
$ man smb.conf ... addprinter command (G) With the introduction of MS-RPC based printing support for Windows NT/2000 clients in Samba 2.2, The MS Add Printer Wizard (APW) icon is now also available in the "Printers..." folder displayed a share listing. The APW allows for printers to be add remotely to a Samba or Windows NT/2000 print server. For a Samba host this means that the printer must be physically added to the underlying printing system. The addprinter command defines a script to be run which will perform the necessary operations for adding the printer to the print system and to add the appropriate service definition to the smb.conf file in order that it can be shared by smbd(8). The addprinter command is automatically invoked with the following parameter (in order): · printer name · share name · port name · driver name · location · Windows 9x driver location All parameters are filled in from the PRINTER_INFO_2 structure sent by the Windows NT/2000 client with one exception. The "Windows 9x driver location" parameter is included for backwards compatibility only. The remaining fields in the structure are generated from answers to the APW questions. Once the addprinter command has been executed, smbd will reparse the smb.conf to determine if the share defined by the APW exists. If the sharename is still invalid, then smbd will return an ACCESS_DENIED error to the client. The addprinter command program can output a single line of text, which Samba will set as the port the new printer is connected to. If this line isn´t output, Samba won´t reload its printer shares. Default: addprinter command = Example: addprinter command = /usr/bin/addprinter
Les bases de dades d'impressores a Linux les trobareu a:
/etc/printcap --> Sistema tradicional de gestió d'impressores /etc/cups/printers.conf --> CUPS
IMPORTANT: Sembla ser que en alguns llocs com la documentació de Samba apareix add printer command (amb espai entre add i printer), en canvi al manual apareix junt: addprinter command
Si no tenim configurada correctament add printer command o no es troba el recurs que volem afegir obtindrem un error Acces Denied.
Cal tenir en compte que l'ordre add printer command és executada per l'usuari connectat i no pas per l'usuari root.
Ojo amb:
map to guest = bad user
Us pot estar donant els privilegis que no voleu. Es pot comprovar amb l'ordre smbstatus (executada al print server) per tal de saber amb quin usuari ens estem connectant.
L'ordre lpadmin també permet afegir impressores.
també es troben per Internet scripts en Perl:
ftp://pserver.samba.org/pub/unpacked/SOC/2005/SAMBA_3_0/examples/scripts/perl/smbaddprinter.pl ftp://pserver.samba.org/pub/unpacked/SOC/2005/SAMBA_3_0/examples/scripts/perl/
d'un llibre de samba:
Truc:
Script de DOS per afegir una impressora?
runas /netonly /user:root rundll32 printui.dll,PrintUIEntry /p /t0 /n \\SAMBA-SERVER\printersharename
Us heu de connectar al servidor, per exemple anant al menú Inici i escollir "Executar" i posar:
\\IP_SERVIDOR_IMPRESSIO
Busqueu la impressora i amb el botó dret seleccioneu "Conectar":
Un cop connectada la impressora la trobareu a la secció:
Impresorar i Faxes
Del panell de control de Windows.
NOTA: La impressora estarà disponible per a tots els usuaris de la màquina?
Podeu utilitzar l'ordre net de Windows:
c:\> net use lpt1: \\sambaserver\printershare
Si no indiqueu l'usuari s'utilitzarà el usuari actual. Podeu indicar l'usuari amb:
c:\> net use lpt1: \\sambaserver\printershare /user:ntadmin
Per desconnectar la impressora podeu utilitzar:
c:\> NET USE lpt1: /DELETE
Per desconectar i tancar tots els recursos:
c:\> NET USE lpt1: /DELETE /Y
Si us dona l'error:
C:\> net use lpt1: \\caro\A30_ImpressoraLaserjetP2015 Error de sistema 85. Ya se está utilizando el nombre del dispositivo local.
Podeu utilitzar:
c:\> NET USE lpt1: /DELETE
Ja no es ven aquest producte des de la compra per part de Apple.
http://www.easysw.com/printpro/
Si teniu el recurs [printers] activat, cal tenir en compte que pot xocar amb [users]. En cas de conflicte de noms tenen prioritat els usuaris.
NOTA: Si s'envia un treball d'impressió a una impressora que té el nom d'un usuari apareixeran fitxers de la cua de'impressió al la home de l'usuari. Evidentment tampoc es pot anomenar la impressora igual que un altre recurs compartit!
Si no teniu els permisos adequats, cupsaddsmb entrarà en un bucle infinit:
$ sudo cupsaddsmb -H localhost -U sergitur -a -v ... Unable to copy Windows 2000 printer driver files (1)! Running command: smbclient //localhost/print$ -N -A /tmp/0770d4ccc4ca2 -c 'mkdir W32X86;put /tmp/0770d4cd46d96 W32X86/CapEstudisHP_Color_LaserJet_CP3505.ppd;put /usr/share /cups/drivers/ps5ui.dll W32X86/ps5ui.dll;put /usr/share/cups/drivers/pscript.hlp W32X86/pscript.hlp;put /usr/share/cups/drivers/pscript.ntf W32X86/pscript.ntf;put /usr/share /cups/drivers/pscript5.dll W32X86/pscript5.dll' ...
Podeu comprovar que teniu els permisos adequats amb:
$ smbclient //localhost/print$ -Usergitur Enter sergitur's password: Domain=[INSEBRE] OS=[Unix] Server=[Samba 3.4.7] smb: \> mkdir prova NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \prova
Fixeu-vos que dona un error:
NT_STATUS_MEDIA_WRITE_PROTECTED
És a dir, el recurs està compartit com a només lectura:
$ cat /etc/samba/smb.conf ... [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no ...
El problema està en el read only! Millor si poseu:
[print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = yes use client driver = yes # valid users = "@Domain Users" write list = "@printoperators"
I aleshores si l'usuari sergitur forma part del grup printoperators, no tindreu cap problema per executar cupsaddsmb.
NOTA: Per estar segurs cal que proveu de connectar-vos amb smbclient amb el mateix usuari que utilitzeu per a cupsaddsmb
TODO
$ sudo cupsaddsmb -H localhost -U sergitur -a -v Password for sergitur required to access localhost via SAMBA: No Windows printer drivers are installed!
Normalment aquest error és degut a que no heu instal·lat els drivers! Tingueu en compte que cal instal·lar els drivers de CUPS i/o els de Adobe/Microsoft. Consulteu:
IMPORTANT: Sempre ser que si hi ha al mateix temps instal·lats els drivers de cups i els de Adobe o Microsoft s'utilitzaran per defecte els de CUPS (de fet això és així per que els drivers de CUPS necessiten dels de Windows/Adobe per a funcionar...)
Teniu doncs 3 opcions
Per tant el que us recomanem és tenir els següents fitxer a /usr/share/cups/drivers (segons man cupsaddsmb)
cups6.inf (from www.cups.org) cups6.ini (from www.cups.org) cupsps6.dll (from www.cups.org) cupsui6.dll (from www.cups.org) ps5ui.dll (from your Windows system) pscript.hlp (from your Windows system) pscript.ntf (from your Windows system) pscript5.dll (from your Windows system)
Els de cups s'obtenen de la web (http://www.cups.org/software.php) els de Windows els podeu obtenir de la web d'Adobe (consulteu Samba_i_CUPS#Adobe_postscript_driver).
És possible que tingueu aquest error si heu posat l'opció:
use client driver = yes
Per a alguna impressora. Si poseu el valor a no no tindreu aquest problema.
Vegeu també cupsaddsmb.
Si teniu el següent error al connectar un impressora:
Molt possiblement és que no sou usuari administrador de la màquina local. Els administradors poden connectar impressores sense cap problema. També podeu canviar les directives del sistema amb gpedit.msc:
Anglès: User Configuration\Administrative Templates\Control Panel\Printers Castellà: Configuración de usuario > Plantillas administrativas > Panel de Control > Impresoras
Si habiliteu:
Buscar impresoras en la red
Els usuaris poden instal·lar/conectar impressores de la xarxa.
NOTA: Apuntar i imprimir > Point&Print