User Tools

Site Tools


doc:appunti:linux:tux:cups

Sistema di stampa CUPS

Driver per stampanti

Conviene isntallare i seguenti pacchetti Debian (Etch) per avere la scelta tra tanti modelli di stampanti quando si configura una coda di stampa CUPS:

  • cupsys-driver-gutenprint
  • linuxprinting.org-ppds
  • foomatic-filters-ppds
  • hplip-ppds
  • cups-pdf per stampare file PDF
  • smbclient per stampare su code di stampa Windows
  • cups-bsd comandi compatibili sistema di stampa BSD (lpq, lprm, lpr, lpc).

Integrazione con KDE

L'ambiente KDE si integra bene con CUPS, ereditanto le code di stampa definite. Basta impostare da Centro di controllo KDE, Periferiche, Stampanti il sistema di stampa CUPS. Le impostazioni fatte da un utente non privilegiato oppure da root vengono salvate rispettivamente in:

  • $HOME/.kde/share/config/kdeprintrc
  • /etc/kde3/kdeprintrc

Integrazione con Unix

CUPS fornisce una serie di tool che rimpiazzano i tradizionali comandi di stampa Unix (come lpr, lpq, lprm, ecc.) utilizzando le stampanti CUPS. In questo modo diventa possibile stampare con programmi che non conoscono CUPS, ma che richiamano direttamente il comando Unix. In Debian basta installare il pacchetto cups-bsd.

Backend

CUPS supporta diversi tipi di stampanti: parallele, seriali, USB, … Per ogni dispositivo esiste l'opportuno backend. Fare attenzione che nelle ultime versioni del pacchetto Debian alcuni backend potrebbero essere disabilitati per prevenire problemi di compatibilità. Se ad esempio durante l'installazione di una nuova stampante, la pagina web non mostra tra i device disponibili la USB Printer #1, verificare che il file /usr/lib/cups/backend/usb sia eseguibile. In caso contrario eseguire dpkg-reconfigure cupsys.

In generale conviene installare i seguenti pacchetti Debian:

  • cups-pdf per stampare su file .pdf
  • smbclient per stampare su code di stampa Windows

Stringa di connessione

Per collegarsi ad un server CUPS remoto, si sceglie il protocollo ipp, ma la stringa URI deve essere qualcosa del tipo http://10.0.1.5:631/printers/hplj2300.

Stampa da riga di comando

Ecco come vedere le stampanti CUPS disponibili e mandare un documento in stampa (in questo caso un PDF):

lpstat -t
lpr -P hplj2300 documento.pdf

Breviario da riga di comando

Per inviare un file alla stampante:

lp -d STA02 /etc/passwd

Per vedere tutte le code di stampa:

lpstat -a

Per vedere lo stato di una stampante (ad esempio di nome STA07), che può essere in attesa, disabilitata, ecc.:

lpstat -l -p STA07

Per abilitare una stampante, ad esempio dopo aver risolto una condizione di errore:

cupsenable STA07

Per vedere i job in coda:

lpstat STA02

Per eliminare un job in coda:

cancel STA07-7

Per cancellare tutti i job in coda si può usare questo trucco:

cupsdisable -c STA07
cupsenable STA07

È possibile controllare le code di stampa CUPS anche da host remoto, la comunicazione avviene tramite TCP/IP su porta 631. Ecco ad esempio come utilizzare cupsenable:

cupsenable -U remoteuser -h 192.168.102.200 printer_name

L'utente remoteuser deve esistere sul server CUPS come utente Unix e deve avere i permessi necessari. In generale la configurazione Debian prevede che gli appartenenti al gruppo lpadmin hanno pieno controllo su CUPS. La password può essere fornita al comando tramite stdin. Non è necessario che l'utente abbia una shell valida per eseguire il comando.

Accesso a CUPS da rete locale

Anzitutto il demone deve stare in ascolto sulle interfacce di rete, ecco alcuni esempi:

# Accetta connessioni solo da 127.0.0.1
#Listen localhost:631

# Accetta connessioni su due interfacce di rete.
Listen 172.16.3.53:631
Listen 192.168.3.1:631

# Accetta connessioni da tutte le interfacce.
#Listen *:631

Poi si devono impostare le opportune access list. La parola chiave @LOCAL indica che l'accesso è consentito agli host che sono locali (stessa network IP), con la sintassi @IF(name) si identificano gli host locali, ma relativi ad una sola interfaccia di rete (attenzione alle interfacce punto-punto, che non hanno una network!).

<Location />
  Allow from @LOCAL
  Allow from @IF(tun53)
  Allow from 172.16.53.*
  Order allow,deny
</Location>
<Location /admin>
  Allow from @LOCAL
  Allow from @IF(tun53)
  Allow from 172.16.53.*
  Order allow,deny
</Location>
<Location /admin/conf>
  Allow from @LOCAL
  Allow from @IF(tun53)
  Allow from 172.16.53.*
  Order allow,deny
</Location>

Stampa CUPS su coda Windows

Per configuraer una coda di stampa CUPS verso host Windows e protocollo SMB è sufficiente impostare l'URL della stampante a qualcosa del genere.

smb://user:password@HOSTNAME/Printer

In questo caso CUPS usa il backend smbspool che può essere anche invocato direttamente per un test:

DEVICE_URI="smb://user%password@HOSTNAME/Printer" smbspool 1234 user print_test 1 prova_stampa

Sembra che con smbspool sia impossibile utilizzare un protocollo diverso da quello predefinito; purtroppo in alcune circostanze è necessario utilizzare il protocollo SMB2, ad esempio per accedere ad alcune versioni di Windows 10.

Una strada è utilizzare come backend il programma smbclient al posto di smbspool. A questo link si può scaricare uno script da copiare in /usr/lib/cups/backend/smbc, quindi in /etc/cups/printers.conf si indica l'URL della stampante in questo modo:

smbc://HOSTNAME/Printer

Lo script di esempio gestisce l'autenticazione utilizzando l'opzione -A di smbclient (file esterno). Per coerenza con il backend CUPS sarebbe meglio poter estrarre le credenziali dall'URL della stampante, usando il formato:

smbc://user%password@hostname/printer

Qui è disponibile una versione modificata dello script CUPS smbclient backend che fa questo servizio.

AuthInfoRequired negotiate

Se nel file /etc/cups/printers.conf viene definita una coda di stampa smb senza autenticazione:

DeviceURI smb://192.168.0.193/hp1320

il server di stampa CUPS (almeno nella versione 2.2.7-1ubuntu2.7 di Ubuntu Bionic 18.04 ) cerca di negoziare una autenticazione con login e password:

# lp -d HP-1320 file.txt
Password for root on localhost?  
lp: Unauthorized

Il demone cupsd aggiunge automaticamente la seguente riga alla definizione della stampante in /etc/cups/printers.conf (il file viene riscritto quando il demone viene fermato):

AuthInfoRequired negotiate

Si potrebbe pensare di modificare tale riga in questo modo:

AuthInfoRequired none

ma funziona una sola volta: la prima richiesta di stampa avviene senza autenticazione, ogni tentativo successivo chiede nuovamente l'autenticazione e il file printers.conf viene sovrascritto.

L'unico modo per disabilitare la richiesta di password è eliminare l'opzione AuthInfoRequired dalla definizione della stampante e indicare un nome utente nell'URL di connessione:

DeviceURI smb://guest@192.168.0.193/hp1320

Ovviamente l'utente guest deve essere abilitato sul server smb senza password. L'eventuale password va indicata dopo il nome utente separato dai due punti:

DeviceURI smb://guest:password@192.168.0.193/hp1320

Set Default Options

Quando si cambiano le impostazioni predefinite di una stampante dall'interfaccia di amministrazione di CUPS, le impostazioni vengono salvate nel file .ppd della stampante stessa. Ad esempio quando si imposta il formato carta A4 queste sono le impostazioni modificate nel file /etc/cups/ppd/hpcm1312.ppd:

*DefaultPageSize: A4
*DefaultPageRegion: A4
*DefaultImageableArea: A4
*DefaultPaperDimension: A4
doc/appunti/linux/tux/cups.txt · Last modified: 2023/05/16 09:59 by niccolo