IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: SambasobreLDAP
Fitxers: https://svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP/cups
Repositori SVN: https://anonymous@svn.projectes.lafarga.cat/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.

Contingut

Drivers als clients o al servidor?

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

Suport d'impressió a Samba des de la versió 2.2

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:

  • Suporta la descarrega de drivers d'impressió a màquines Windows 95/98/NT/2000 clients sota demanda (Point'n'Print).
  • Permet pujar drivers amb Windows NT Add Printer Wizard (APW) o el conjunt d'eines (tool set) Imprints
  • Support for the native MS-RPC printing calls such as StartDocPrinter, EnumJobs(), and so on. (See the MSDN documentation for more information on the Win32 printing API).
  • Support for NT Access Control Lists (ACL) on printer objects.
  • Improved support for printer queue manipulation through the use of internal databases for spooled job information (implemented by various *.tdb files).

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.

Point'n'Print Client Drivers en servidors Samba

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$):

  • Executant el Add Printer Wizard APW en una màquina client Windows NT/200x/XP Professiona (No funciona a clients 95/98/ME clients).
  • Utilitzant el conjunt d'eines Imprints
  • Utilitzant smbclient i rpcclient
  • Utilitzant cupsaddsmb (només funciona amb CUPS i no amb altres sistemes d'impressió UNIX com LPR/LPD, LPRng...).

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

Recursos compartits

IMPORTANT: És recomanable llegir abans la configuració de CUPS per Samba

print admin i SePrintOperatorPrivilege

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

[[print$]] share

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:

  • El compte utilitzat per accedir a Samba ha de ser el compte de root (UID=0)
  • El compte utilitzat ha d'estar a la llista d'administradors de impressores (printer admin list).

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.

Afegint drivers a [[print$]]

Es poden instal·lar els drivers en aquest recurs compartit de múltiples formes:

  • Executant el Add Printer Wizard APW en una màquina client Windows NT/200x/XP Professiona (No funciona a clients 95/98/ME clients).
  • Utilitzant el conjunt d'eines Imprints
  • Utilitzant smbclient i rpcclient
  • Utilitzant cupsaddsmb (només funciona amb CUPS i no amb altres sistemes d'impressió UNIX com LPR/LPD, LPRng...).
http://www.ossramblings.com/samba_push_windows_drivers
http://www.samba.org/samba/docs/man/Samba-Guide/happy.html#id2582657

Dos opcions:

Add Printer Wizard Driver Installation

Consulteu APW.

Windows CUPS driver

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

Adobe postscript driver

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.

Windows PostScript driver

Podeu utilitzar el d'Adobe (son equivalents):

Consulteu Samba_i_CUPS#Adobe_postscript_driver

cupsaddsmb

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:;

  • Té millor suport per a page accounting
  • Suporta banner pages a totes les impressores
  • Suporta configurar un nombre important atributs IPP per a treballs (jobs) d'impressora (p. ex. job priority, page label, job billing)

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

  • [cups_run.jpg Exemple de sortida de l'ordre cupsaddsmb.
Imprints

TODO

smbclient i rpcclient

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

Configuració de Samba

Comprovacions prèvies

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.

Configuració bàsica

Paràmetres globals

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

Secció 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:

  • El nom del recurs compartit és el nom de la impressora compartida

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.

Exemple de fitxer de configuració smb.conf

[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.

Configuració amb els drivers instal·lats al servidor

[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

CUPS “PostScript Driver for Windows NT/200x/XP”

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:

Configuració dels recursos compartits

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: )

Clients

Client Linux

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:

  • print$: És el recurs compartit que conté els drivers de les impressores. Dona suport per aPoint'n'Print
  • departaments: Recurs compartit tipus fitxer.
  • Dos impressores:
  • HP_HP_LaserJet_P2015_Series
  • HP_HP_LaserJet_P2015_Series

Client Windows

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:

WindowsAccesingPrintServer.png

Add Printer Wizard (APW)

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

Afegint impressores amb APW

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:

Addprintercommand.png

Truc:

Script de DOS per afegir una impressora?

runas /netonly /user:root rundll32 printui.dll,PrintUIEntry /p /t0 /n \\SAMBA-SERVER\printersharename

Connectar un client Windows a una impressora

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":

ConectarClientWindowsAImpressora.png

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?

Connectar un client Windows a una impressora per línia d'ordres de DOS o Netlogon

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

Altres eines

ESP Print Pro

Ja no es ven aquest producte des de la compra per part de Apple.

http://www.easysw.com/printpro/

Resolució de problemes

Les impressores no es es poden dir igual que el nom d'un usuari.

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!

Unable to copy Windows 2000 printer driver files

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

Drivers de Windows. /usr/share/cups/drivers vs /var/lib/samba/printers

TODO


No Windows printer drivers are installed! amb cupsaddsmb

$ 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

  • Instal·lar els drivers Postscript de Windows
  • Instal·lar els drivers Postscript de CUPS. Recordeu que s'ha de combinar
  • Instal·lar els drivers Postscript d'Adobe

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).

SetPrinter call failed! result was WERR_ACCESS_DENIED utilitzant cupsaddsmb

É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.

Una directiva vigente en su equipo le impide conectarse a esta cola de impresion. Pongase en contacto con el administrador de su sistema

Si teniu el següent error al connectar un impressora:

ErrorWindowsPrinting.png

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

Vegeu també

Enllaços externs