[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Cups, (1) ovvero Common unix printing system, è un sistema di stampa nettamente differente rispetto al modello BSD e a quello di System V. La differenza fondamentale sta nel fatto che viene utilizzato il protocollo IPP (Internet printing protocol), attraverso il quale è anche possibile una gestione remota dei serventi, attraverso un navigatore HTTP comune.
L'utilizzo di Cups richiede delle nozioni di reti TCP/IP (volume III); tuttavia si preferisce anticipare l'argomento a completamento della trattazione della gestione delle stampanti.
Cups incorpora le funzionalità di un servente HTTP, attraverso il quale è possibile anche interagire per definire e modificare la configurazione delle stampanti. Pertanto, il programma frontale per intervenire in questo modo diventa un navigatore normale. In condizioni normali, la comunicazione con il protocollo HTTP avviene usando la porta 631, come prescrive a sua volta il protocollo IPP.(2)
Questo servente HTTP specifico deve essere configurato, in modo da stabilire chi può accedere e a cosa si può accedere. A tale proposito, la prima cosa che si deve fare normalmente è modificare il file di configurazione del demone cupsd (/etc/cups/cupsd.conf
).
La configurazione delle stampanti viene fatta attraverso il protocollo HTTP, oppure attraverso programmi di servizio specifici, che però possono agire solo nell'ambito dell'elaboratore locale; pertanto non è necessario intervenire manualmente all'interno di file, che comunque esistono e sono gestiti autonomamente da Cups.
Cups deve poter riconoscere il tipo dei file che vengono inviati alla stampa ed essere a conoscenza delle caratteristiche delle stampanti utilizzabili. L'individuazione del tipo di file avviene attraverso delle definizioni di tipi MIME; la gestione delle stampanti si avvale di una serie di file di configurazione specifici per ogni modello utilizzabile. Queste informazioni, naturalmente, sono già fornite in modo predefinito. Per la precisione, i file di definizione delle stampanti dovrebbero trovarsi al di sotto della directory /usr/share/cups/model/
.
Bisogna osservare però che Cups gestisce i filtri di stampa in proprio. Infatti, incorpora alcuni programmi appositi, tra cui una derivazione specifica di Ghostscript.
Infine, Cups è in grado di comandare delle stampanti locali, oppure di raggiungere delle stampanti remote, attraverso vari protocolli; in particolare: IPP, LPD (quello dei sistemi di stampa tradizionali) e SMB.
Il sistema di stampa Cups può essere impostato localmente attraverso il programma lpadmin. Per definire una stampante logica, si procede con un comando simile all'esempio seguente:
#
lpadmin -p prova -E -v parallel:/dev/lp0
<-'
`->-P /usr/share/cups/model/laserjet.ppd
In questo modo, è stata definita la stampante prova, abbinata al file di dispositivo /dev/lp0
, corrispondente alla porta parallela. La stampa viene filtrata attraverso la definizione contenuta nel file /usr/share/cups/model/laserjet.ppd
, che intuitivamente rappresenta una stampante HP Laserjet.
La sintassi di lpadmin si può riassumere nella forma seguente:
lpadmin -p stampante_logica opzioni
In pratica, l'opzione -p è obbligatoria, dal momento che i comandi che si impartiscono devono sempre essere abbinati al nome di una stampante logica. Le opzioni successive definiscono ciò che si intende ottenere. La tabella 93.1 descrive brevemente alcune opzioni di lpadmin.
Tabella 93.1. Alcune opzioni di lpadmin.
Come si vede dalla tabella, l'opzione -x consente di eliminare una stampante logica. L'esempio seguente elimina la stampante prova:
#
lpadmin -x prova
Una volta definita una stampante logica, questa può essere abilitata e disabilitata con i comandi enable e disable rispettivamente; inoltre, i processi di stampa possono essere accettati o rifiutati. La distinzione tra i due tipi di controlli sta nel fatto che la disabilitazione ferma la stampa, ma non impedisce l'accodarsi di altri processi di stampa; nel secondo caso si impedisce proprio l'aggiunta di altri processi. I comandi di disabilitazione e di rifiuto, hanno in comune l'opzione -r, con cui è possibile descriverne il motivo. La tabella 93.2 riepiloga l'uso di questi comandi di controllo.
Tabella 93.2. Comandi di contorno a lpadmin.
Le classi sono dei raggruppamenti di stampanti logiche, a cui si può fare riferimento. In pratica, si può inviare un processo di stampa a una classe invece che a una stampante logica ben precisa; in tal modo sarà il sistema di stampa a decidere quale deve essere la stampante vera e propria che deve eseguire il lavoro, nell'ambito della classe stessa.
I comandi di controllo già descritti funzionano quindi anche in riferimento alle classi; tuttavia, occorre considerare che le stampanti logiche non ereditano i comandi dati alle classi. In questo modo, si può disabilitare una classe, ma ciò non disabilita implicitamente le stampanti che ne fanno parte.
Le informazioni sulle stampanti logiche e sulle classi vengono memorizzate all'interno di due file: /etc/cups/printers.conf
e /etc/cups/classes.conf
. Si tratta di file di testo che, teoricamente, possono essere modificati a mano, ma in generale conviene lasciare fare a lpadmin e agli altri comandi di controllo.
Cups è in grado di individuare le stampanti locali e quelle di rete, in modo autonomo. Attraverso il comando lpinfo si può scorrere in particolare l'elenco delle disponibilità locali:
#
lpinfo -v
[Invio]
network socket network http network ipp network lpd direct canon:/dev/lp0 direct epson:/dev/lp0 direct parallel:/dev/lp0 serial serial:/dev/ttyS0?baud=115200 serial serial:/dev/ttyS1?baud=115200 serial serial:/dev/ttyS2?baud=115200 serial serial:/dev/ttyS3?baud=115200
Intuitivamente si comprende il significato delle varie notazioni, che si rifanno allo schema di un URI. Per esempio, la porta parallela corrispondente al file di dispositivo /dev/lp0
, si indica come parallel:/dev/lp0
. In modo analogo vengono individuate le porte seriali, anche se non è detto che siano collegate effettivamente a una stampante del genere. Si può comunque osservare la possibilità di definire la velocità di comunicazione in bit al secondo. Volendo definire una stampante logica diretta in pratica a un file, basta usare un URI del tipo file:/percorso
.
Quando un servente mette a disposizione il proprio servizio di stampa attraverso il protocollo PPP, si può fare riferimento a questo «dispositivo» remoto attraverso una notazione del tipo ipp://host/printers/stampante_logica. Per esempio, per definire localmente la stampante logica ferndruker, abbinata in pratica alla stampante laser presso l'elaboratore druker.brot.dg
, si può usare lpadmin nel modo seguente:
#
lpadmin -p ferndruker -E -v ipp:/druker.brot.dg/printers/laser
Cups si configura principalmente attraverso il file /etc/cups/cupsd.conf
. La configurazione standard prevede che sia consentito l'accesso al servizio dalla rete, attraverso la porta 631, ma che l'amministrazione remota e l'accesso al servizio di stampa siano esclusi.
Il file di configurazione è un file di testo normale, in cui le righe bianche e quelle vuote vengono ignorate; inoltre i commenti sono introdotti dal simbolo # e conclusi dalla fine della riga. La prima parte del file di configurazione è utilizzato normalmente per una serie di direttive globali, che hanno la forma di assegnamenti, del tipo:
opzione valore_associato
Alcune di queste direttive sono descritte nella tabella 93.3.
Tabella 93.3. Alcune direttive del file di configurazione /etc/cups/cupsd.conf
.
Generalmente, la parte finale del file di configurazione è occupato da direttive racchiuse in contesti particolari, definiti come collocazioni. Questo tipo di informazioni verrà preso in considerazione in seguito, in occasione della descrizione dell'amministrazione remota attraverso il protocollo HTTP. Tuttavia, si tenga presente che per consentire l'accesso di richieste di stampa, occorre intervenire proprio all'interno di queste collocazioni.
Per abilitare l'accesso al servizio di stampa da parte di altri elaboratori, oltre che configurare la collocazione corrispondente alle stampanti (verrà mostrato in seguito), occorre che il demone cupsd sia in ascolto della porta prevista e consenta l'accesso a tali elaboratori. Si può usare la direttiva Port per indicare una o più porte differenti rispetto allo standard, costituito da 631; inoltre, la direttiva Listen consente di specificare un nodo particolare, nel caso si voglia limitare questo accesso. Infatti, se si usano solo direttive Listen, senza alcuna direttiva Port, si esclude di fatto l'accesso da parte di tutti gli altri nodi.
Eventualmente, può essere consentita l'interrogazione (ovvero la scansione) del servizio, attraverso richieste circolari. Ciò permette ad altri nodi di venire a conoscenza dell'esistenza di un servizio di stampa nel proprio elaboratore. Nello stesso modo, si può consentire al demone cupsd di fare altrettanto alla ricerca di altri servizi di stampa alla propria portata. Per questo, si usano le direttive del tipo Brows*.
Cups non ha bisogno del file /etc/printcap
, né di un altro equivalente. Tuttavia, altri programmi potrebbero richiedere la sua presenza per conoscere la disponibilità di code di stampa. Cups può quindi tenere aggiornato questo file, in base alla disponibilità di stampanti logiche e di classi. Per esempio, il contenuto di questo file potrebbe apparire così:
laser1: laser2:
Come si intende, tutti gli altri campi dei record tipici di questo file, sono assenti. La direttiva Printcap può servire a specificare un file diverso dal solito /etc/printcap
, nel caso si desideri conservare un vecchio file del genere, adatto a un sistema di stampa BSD.
Quando si modifica la configurazione del servizio, intervenendo nel file /etc/cups/cupsd.conf
, è necessario fare in modo che il demone cupsd la rilegga. Per farlo deve ricevere un segnale di aggancio:
#
killall -HUP cupsd
Esiste anche una configurazione che riguarda le richieste di stampa da parte dei clienti, intesi come gli elaboratori o semplicemente i programmi che accodano dei processi di stampa. Il file di configurazione principale è /etc/cups/client.conf
, a cui si possono affiancare dei file personali, di ogni utente, corrispondenti a ~/.cupsrc
. Generalmente, questi file di configurazione non contengono direttive; tuttavia potrebbero servire per indirizzare la stampa verso un servizio particolare, diverso da uno residente presso lo stesso elaboratore locale.
Per esempio, l'utente che vuole stampare in modo predefinito usando il servizio offerto dall'elaboratore dinkel.brot.dg
, indicherà nel proprio file ~/.cupsrc
una direttiva come quella seguente:(3)
ServerName dinkel.brot.dg
Questi file di configurazione, utili dal lato cliente, consentono anche di specificare il tipo di comunicazione che ci deve essere: in chiaro o cifrato. Tuttavia, la disponibilità del sistema cifrato dipende dal modo in cui viene compilato Cups, che così potrebbe includere o meno le librerie necessarie.
Il servizio di stampa di Cups può essere usato normalmente con i comandi standard di un sistema BSD o System V. La tabella 93.4 riepiloga le situazioni più comuni a questo riguardo. Tuttavia, si deve tenere presente, in particolare, che una coda di stampa può essere specificata indicando un nome locale, oppure un nome remoto, nella forma:(4)
nome@host
Tabella 93.4. I comandi più comuni per la stampa, come da tradizione.
Per quanto riguarda lpr e lp, occorre considerare che rimane la possibilità di inviare un file alla stampa attraverso lo standard input, anche se dalla tabella ciò non appare evidente.
Ciò che rende speciale Cups è la possibilità di usare i comandi lp o lpr con l'opzione -o, che può anche apparire più volte, attraverso la quale si possono indicare molte altre richieste particolari. Le tabelle 93.5 e 93.6 riepilogano brevemente queste possibilità.
Tabella 93.5. L'opzione -o dei comandi lpr e di lp. Prima parte.
Tabella 93.6. L'opzione -o dei comandi lpr e di lp. Seconda parte.
Comando | Descrizione |
| Nel caso di un'immagine, la colloca nella posizione specificata dalla parola chiave che si assegna all'argomento position. |
| Definisce la dimensione di un'immagine, in relazione allo spazio nella pagina. Un valore pari a 100, rappresenta lo spazio massimo a disposizione; valori inferiori producono un'immagine più piccola; valori superiori producono immagini più grandi, in relazione, con la stampa su più pagine. |
| Definisce la densità di punti per pollice della stampa. Maggiore è questo valore, minore sarà di conseguenza quella dell'immagine stampata. |
| Definisce la scala dell'immagine in percentuale. |
| Definisce il valore della tinta. Zero corrisponde alla situazione di partenza e si possono attribuire valori in un intervallo che va da -360 a 360. |
| Definisce il valore della saturazione del colore. Il valore esprime una percentuale, dove 100 è la posizione normale, mentre zero corrisponde al solo bianco e nero. |
Ogni utente può configurare per conto proprio la stampa. Per questo si utilizza il comando lpoptions, che si usa fondamentalmente come riepilogato nella tabella 93.7.
Tabella 93.7. Utilizzo del comando lpoptions.
Comando | Descrizione |
| Configura la stampante logica indicata, oppure quella predefinita in sua mancanza, con le opzioni indicate. |
| Definisce la coda di stampa predefinita, che può essere una stampante logica (locale o remota), oppure una classe. Nel contempo, mostra le differenze di configurazione rispetto a quanto predefinito. |
| Cancella la configurazione associata alla coda indicata. |
In particolare, l'opzione -o si usa nello stesso modo dei comandi lp e lpr, cioè come indicato nelle tabelle 93.5 e 93.6.
Fino a questo punto si è fatto riferimento alle code come a un concetto che include simultaneamente le stampanti logiche e le classi; in pratica, per Cups le code includono anche le istanze di una stampante logica. Nell'ambito della configurazione delle stampanti, si possono definire delle istanze, che rappresentano un modo di distinguere configurazioni differenti per una stessa stampante logica. Si osservi l'esempio seguente:
$
lpoptions -p laser/ridotta -o number-up=4
In questo modo si vuole definire l'istanza ridotta che si riferisce alla stampante logica laser, dove si ottengono quattro pagine logiche per ogni pagina reale, senza modificare la configurazione normale della stampante logica. Per utilizzare questa configurazione, i comandi lp e lpr possono fare riferimento all'istanza, completa del nome della stampante:
$
lp -d laser/ridotta prova.ps
oppure:
$
lpr -P laser/ridotta prova.ps
In questi esempi, si fa riferimento evidentemente alla stampa del file prova.ps
.
Il protocollo IPP è stato ideato per arrivare fino all'amministrazione remota di una stampante attraverso il protocollo HTTP, dove il servizio di stampa risponde come se fosse un servente HTTP, interrogato da un navigatore comune sulla porta TCP 631. Cups applica in pieno questa filosofia e consente l'amministrazione remota, con le limitazioni definite nel file /etc/cups/cupsd.conf
. La figura 93.1 dà l'idea di quello che potrebbe apparire interpellando un servente Cups ospitato nel proprio elaboratore locale.
Nel file di configurazione /etc/cups/cupsd.conf
, alcune direttive consentono di delimitare l'accesso remoto al servizio IPP di Cups. Si tratta precisamente di direttive nella forma:
<Location percorso>
direttiva
...
</Location>
Il percorso rappresenta realmente, o idealmente, una directory che parte dalla posizione stabilita con la direttiva DocumentRoot, che in condizioni normali corrisponde a /usr/share/doc/cups/
, o simile. Per esempio, una direttiva del tipo <Location /prova> dovrebbe riferirsi in pratica alla directory o al file /usr/share/doc/cups/prova
.
Molte delle direttive Location fanno riferimento a directory che in realtà non esistono e hanno un significato particolare. La tabella 93.8 descrive brevemente il loro scopo. Il controllo dell'accesso a queste directory speciali si traduce in un controllo corrispondente all'accesso delle funzionalità di amministrazione remota.
Tabella 93.8. Directory virtuali controllabili con le direttive Location.
Prima di queste direttive, ne appare normalmente una particolare, con cui si definisce il gruppo degli utenti amministratori:
SystemGroup lpadmin
In questo caso si dichiara che lpadmin è il gruppo degli amministratori riconosciuti. In pratica, gli utenti che devono amministrare Cups vengono aggregati al gruppo indicato nel file /etc/group
; tuttavia, non dovrebbe essere necessario fare questo per l'utente root, che è già parte di tutti i gruppi, per ciò che riguarda Cups.
Le direttive più comuni che possono apparire nell'ambito della delimitazione di una direttiva Location, sono elencate brevemente nella tabella 93.9.
Tabella 93.9. Direttive utilizzabili nell'ambito di un gruppo Location, nel file di configurazione /etc/cups/cupsd.conf
.
L'esempio seguente riguarda un piccolo estratto del file /etc/cups/cupsd.conf
:
SystemGroup lpadmin <Location /> Order Deny,Allow Allow From 127.0.0.1 Allow From 192.168.1.* </Location> <Location /admin> AuthType Basic AuthClass System Order Deny,Allow Allow From 127.0.0.1 Allow From 192.168.1.* </Location> |
In questo modo, se non vengono dichiarate altre posizioni, tutto risulta accessibile dall'elaboratore locale (127.0.0.1) e dalla rete 192.168.1.*; tuttavia, nel caso particolare della posizione /admin
, è richiesta un'autenticazione basata sul riconoscimento dell'utente nel sistema e la sulla sua appartenenza al gruppo di sistema (come stabilito nella direttiva SystemGroup.
Come già accennato in precedenza, si può fare riferimento a una coda di stampa, con i comandi lp e lpr, anche nella forma:
nome@host
Tuttavia, l'elaboratore che si intende raggiungere, deve consentire l'accesso. Per questo si deve consentire l'accesso alla posizione /printers
, oppure, in modo più dettagliato, alla posizione /printers/nome
. Nell'esempio del listato 93.1, la posizione /printers
eredita la configurazione da quella della radice:
<Location /> Order Deny,Allow Allow From 127.0.0.1 Allow From 192.168.1.* </Location>
In questo modo, si consente l'accesso dalla rete 192.168.1.*, senza richiedere alcuna autenticazione.
Quando una classe o una stampante logica di un elaboratore remoto è accessibile a quello locale, lpstat segnala la disponibilità di queste code, come se si trattasse di stampanti locali. Tuttavia, perché ciò accada è necessario che sia stata concessa l'interrogazione con le direttive Brows*, già descritte in precedenza.
Inoltre, se più elaboratori mettono a disposizione una stampante logica con uno stesso nome, si può creare una classe implicita, con quello stesso nome, a meno che ciò sia stato disabilitato espressamente nel file di configurazione.
Nel file di configurazione /etc/cups/cupsd.conf
, all'interno delle direttive che delimitano l'accesso a una posizione particolare, la direttiva AuthType consente di richiedere e specificare il tipo di autenticazione. Il tipo Basic richiede che l'utente si identifichi attraverso il proprio nominativo e la parola d'ordine usati normalmente per accedere al sistema. Al contrario, il tipo Digest richiede un nominativo e una parola d'ordine annotati nel file /etc/cups/passwd.md5
.
Il principio di funzionamento di questo file è simile a quello usato dai sistemi Unix nel file /etc/passwd
, con la differenza che la parola d'ordine viene cifrata con un algoritmo differente (MD5, come suggerisce l'estensione del file). Per aggiungere utenti di tipo Digest e per rimuoverli, si usa il comando lppasswd.
Tabella 93.10. Il comando lppasswd.
Comando | Descrizione |
| Crea un nominativo e lo associa eventualmente a un gruppo. |
| Elimina un nominativo. |
Si crea un nominativo utente con l'opzione -a, in un modo simile a quello seguente:
#
lppasswd -a pippo
[Invio]
Enter password
*******
[Invio]
Enter password again
*******
[Invio]
Se la parola d'ordine viene ripetuta correttamente e soddisfa i requisiti minimi imposti da lppasswd (non deve assomigliare al nominativo e deve essere sufficientemente varia), si ottiene l'aggiunta di una riga nel file /etc/cups/passwd.md5
, che potrebbe assomigliare a quella seguente:
pippo:sys:d091266158b6c7620c306db2ece25e42
Se si usa anche l'opzione -g, come mostrato nella tabella 93.10, si può intervenire anche nel secondo campo, che descrive il nome del gruppo.
Se la richiesta di autenticazione Digest si integra con la direttiva AuthClass e viene richiesta l'appartenenza a un gruppo particolare (che può essere quello stabilito dalla direttiva AuthGroupName, oppure SystemGroup, il gruppo che si associa all'utente deve esistere realmente nel sistema Unix e corrispondere a quello richiesto; diversamente l'autenticazione fallirebbe.
Se ci si avvale di un proxy HTTP, può diventare impossibile l'accesso al servizio di Cups. Per prima cosa, l'indirizzo corrispondente al proxy deve essere ammesso ad accedere; inoltre, ci possono essere dei problemi con la porta TCP: se si consente a Cups di usare la porta 80, può darsi che il proxy riesca ad accedere, ma non è garantito che poi si possano raggiungere le posizioni che richiedono una forma di autenticazione.
La compatibilità con il sistema di stampa BSD, si attua in due modi. Da un lato, viene mantenuto il file /etc/printcap
(salvo che gli si voglia cambiare nome per qualche motivo); dall'altro è possibile attivare un demone, cups-lpd, che è in grado di accettare richieste di stampa secondo il vecchio protocollo. Per attivare il demone, occorre intervenire nel file di configurazione /etc/inetd.conf
, aggiungendo un record simile a quello seguente:
printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd
Naturalmente, ci si deve poi prendere cura di informare il supervisore dei servizi di rete (di solito l'eseguibile inetd), inviando un segnale di aggancio:
#
killall -HUP inetd
Inoltre, per poter utilizzare un vecchio servente conforme al protocollo usato dal sistema di stampa BSD, si può farvi riferimento con URI del tipo:
lpd://host/coda_remota
Con un navigatore comune, è possibile ricevere informazioni e amministrare un servente Cups, secondo le limitazioni previste nel file /etc/cups/cupsd.conf
, come già descritto nelle sezioni precedenti.
Questo tipo di interazione avviene in modo abbastanza intuitivo. A titolo di esempio vengono mostrate alcune pagine significative.
Cups è un sistema di stampa molto complesso e anche molto comodo; tuttavia, il carico elaborativo che si crea nel momento in cui viene accodato un processo di stampa, è molto elevato. In pratica, se l'elaboratore in cui si attiva un servizio di stampa con Cups non ha la potenza sufficiente, si possono generare dei ritardi che inizialmente sembrano inspiegabili; inoltre, se l'elaboratore è particolarmente carente di risorse, si rischia lo stallo del sistema operativo.
Easy Software Products, Common UNIX printing system
PWG, Internet Printing Protocol
S. Zilles, RFC 2568: Rationale for the Structure of the Model and Protocol for the Internet Printing Protocol, 1999
<http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2568.html>
<http://www.cis.ohio-state.edu/cs/Services/rfc/rfc-text/rfc2568.txt>
daniele @ swlibero.org
2) Il protocollo IPP utilizza a sua volta il protocollo HTTP.
3) Si rammenta che per il momento non è ancora stato spiegato come fare per abilitare l'accesso alle stampanti locali da parte di nodi remoti.
4) Come già chiarito in precedenza, per coda di stampa si fa riferimento indifferentemente a una classe, una stampante logica o a un'istanza di una stampante logica.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome cups.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]