[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 219.   Cups

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 X); tuttavia si preferisce anticipare l'argomento a completamento della trattazione della gestione delle stampanti.

Questo capitolo è stato realizzato per una delle prime versioni di Cups e poi non è più stato aggiornato.

219.1   Visione generale

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 e incorpora alcuni programmi appositi.

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.

219.2   Stampanti logiche e classi

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
[Invio]

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.

Come si può osservare, l'opzione -p non dichiara una coda di stampa, ma precisamente una stampante logica. In seguito viene descritto il concetto di classe e anche quello di istanza. L'insieme di stampanti logiche, classi e istanze rappresenta in generale le code di stampa per Cups.

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 219.1 descrive brevemente alcune opzioni di lpadmin.

Tabella 219.1. Alcune opzioni di lpadmin.

Opzione Descrizione
-p stampante_logica
Definisce la stampante logica su cui intervenire.
-x stampante_logica
Elimina la stampante logica indicata. È incompatibile con l'opzione -p.
-d stampante_logica
Stabilisce che la stampante logica indicata è quella predefinita.
-c classe
Abbina la stampante logica a una classe.
-r classe
Toglie la stampante logica dalla classe specificata.
-v dispositivo
Abbina la stampante a un dispositivo di stampa, oppure a un servizio remoto.
-P file_ppd
Abbina un file PPD, contenente le informazioni necessarie a usare la stampante.
-E
Abilita la stampante logica e consente di inviarle dei processi di stampa.

Come si vede dalla tabella, l'opzione -x consente di eliminare una stampante logica. L'esempio seguente elimina la stampante prova:

lpadmin -x prova[Invio]

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 219.2 riepiloga l'uso di questi comandi di controllo.

Tabella 219.2. Comandi di contorno a lpadmin.

Comando Descrizione
enable [stampante_logica|classe]
Abilita il funzionamento della stampante logica o della classe indicata.
disable [-r motivazione] [stampante_logica|classe]
Disabilita il funzionamento della stampante logica o della classe indicata, specificando eventualmente la motivazione.
accept [stampante_logica|classe]
Fa sì che la stampante logica o la classe indicata accetti dei nuovi processi di stampa.
reject [-r motivazione] [stampante_logica|classe]
Impedisce l'invio alla stampante logica o alla classe di nuovi processi di stampa.

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

A proposito del comando enable, occorre tenere presente che questo nome coincide con un comando interno della shell Bash; pertanto, per utilizzarlo occorre indicarne il percorso su disco. Generalmente si usa come /usr/bin/enable.

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.

219.2.1   URI per la definizione dei dispositivi di stampa

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://nodo/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[Invio]

219.3   Configurazione principale del servizio di stampa

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

Tabella 219.4. Alcune direttive del file di configurazione /etc/cups/cupsd.conf.

Direttiva Descrizione
AccessLog {file|syslog}
PageLog {file|syslog}
ErrorLog {file|syslog}
Le direttive specificano rispettivamente il file delle registrazioni da usare per annotare gli accessi, le pagine stampate (ogni pagina stampata ha una propria registrazione) e gli errori. Se si usa la parola chiave syslog, questi messaggi vengono inviati al registro di sistema.
LogLevel {debug2|debug\
  \|info|warn|error|none}
Specifica il livello di dettaglio delle annotazioni che riguardano gli errori. La parola chiave debug2 richiede una registrazione completa, mentre none annulla qualunque registrazione. Le altre parole chiave rappresentano ordinatamente dei valori intermedi.
DataDir directory
Specifica la directory a partire dalla quale sono collocati vari file di dati di Cups. Generalmente si tratta di /usr/share/cups/.
DocumentRoot directory
Specifica la directory a partire dalla quale sono collocati i file usati dal servizio HTTP incorporato in Cups. In altri termini, per ciò che riguarda la configurazione comune, corrisponde a http://localhost:631/.
ServerRoot directory
Specifica la directory a partire dalla quale si articolano i file di configurazione. Di solito si tratta di /etc/cups/.
Printcap file
Specifica il file da usare al posto del tradizionale /etc/printcap, allo scopo di garantire la compatibilità con i programmi che vanno a leggerlo per conoscere le code di stampa disponibili.
User utente
Group gruppo
Specifica l'utente e il gruppo da usare quando Cups avvia dei sottoprocessi. Si tratta normalmente dell'utente lp e del gruppo sys.
TempDir directory
Specifica la directory temporanea da usare per la creazione di file temporanei. Questa directory, che normalmente corrisponde a /var/spool/cups/tmp/, deve essere accessibile in scrittura dall'utente e dal gruppo specificati con le direttive User e Group.
Port n_porta
Listen nodo[:n_porta]
La direttiva Port specifica una porta alla quale Cups deve mettersi in ascolto. La porta predefinita è 631, che notoriamente è riservata al protocollo IPP. La direttiva Listen consente di definire un nodo di rete a cui concedere accesso, che deve rivolgersi eventualmente alla porta indicata dopo i due punti. Una o più direttive Listen, usate da sole, senza alcuna direttiva Port, consentono in pratica di limitare l'accesso al servizio di stampa, escludendo tutti gli altri.
Browsing {On|Off}
Abilita o disabilita la risposta a interrogazioni circolari e l'utilizzo dello stesso sistema per interrogare la disponibilità di altre stampanti dalla rete.
BrowseAddress indirizzo_broadcast
Permette di stabilire l'indirizzo broadcast da usare per le interrogazioni circolari. Di solito si usa quello corrispondente alla propria rete locale.
BrowseAllow modello_nodi
BrowseDeny modello_nodi
La direttiva BrowseAllow consente, mentre la direttiva BrowseDeny vieta, l'interrogazione circolare del servizio di stampa ai nodi di rete specificati dal modello.
BrowseOrder {allow,deny\
  \|deny,allow}
Definisce l'ordine di analisi delle direttive BrowseAllow e BrowseDeny. La sequenza allow,deny fa sì che i pacchetti di interrogazione siano accettati a meno che espressamente rifiutati; la sequenza deny,allow fa sì che i pacchetti di interrogazione siano rifiutati a meno che espressamente accettati.
BrowsePoll nodo:porta
Permette di richiedere espressamente l'interrogazione del nodo di rete indicato, alla porta specificata.
ImplicitClass {On|Off}
Abilita o disabilita la definizione di classi implicite. Si può avere una classe implicita quando in una rete più elaboratori offrono l'accesso a una stampante denominata nello stesso modo.
SystemGroup gruppo
Stabilisce il gruppo a cui deve appartenere un utente per essere classificato come System in fase di autenticazione. Di solito, l'utente viene aggregato al gruppo stabilito in questo modo nel file /etc/group.

Generalmente, la parte finale del file di configurazione è occupato da direttive racchiuse in contesti particolari, definiti come collocazioni. Questo tipo di informazioni viene 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 (viene 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 di rete 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 di rete.

Eventualmente, può essere consentita l'interrogazione (ovvero la scansione) del servizio, attraverso richieste circolari. Ciò permette ad altri nodi di rete 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[Invio]

219.4   Configurazione dal lato dei clienti

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, deve indicare 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.

219.5   Utilizzo comune attraverso la riga di comando

Il servizio di stampa di Cups può essere usato normalmente con i comandi standard di un sistema BSD o System V. La tabella 219.7 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@nodo

Tabella 219.7. I comandi più comuni per la stampa, come da tradizione.

Comando Descrizione
lp file
lpr file
Invia alla coda di stampa predefinita il file indicato.
lpstat -p
lpstat -p -d
Ottiene un elenco delle stampanti logiche disponibili; nel secondo caso si viene a conoscere anche quale risulta essere la stampante logica o la classe predefinita.
lp -d coda file
lpr -P coda file
Invia il file alla stampante logica o alla classe indicata.
lp [-d coda] -n n_copie file
lpr [-P coda] -#n_copie file
Invia il file alla stampante logica o alla classe indicata, o a quella predefinita, per ottenerne la quantità di copie specificate.
lpstat
lpstat -o
Ottiene un elenco dei processi di stampa accodati dall'utente stesso.
lpstat -p
Ottiene un elenco dei processi di stampa attivi appartenenti all'utente.
lpstat -o -p
Ottiene un elenco dei processi di stampa accodati dall'utente e di quelli attivi.
lpq [-E coda]
Ottiene un elenco dei processi di stampa di una coda particolare, oppure di tutte le code.
cancel processo_di_stampa
lprm [processo_di_stampa]
Elimina il processo di stampa specificato; nel caso di lprm si può omettere, a indicare di intervenire sul primo processo disponibile (quello attivo, oppure il primo di quelli in coda). Il processo di stampa è identificato da una stringa di riconoscimento che può essere consultata con lpstat.

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 219.8 e 219.9 riepilogano brevemente queste possibilità.

Tabella 219.8. L'opzione -o dei comandi lpr e di lp. Prima parte.

Comando Descrizione
-o raw
Disabilita l'intermediazione di qualsiasi filtro, mandando il file direttamente alla stampante.
-o landscape
Stampa in orizzontale, mentre in condizioni normali la stampa avviene in verticale.
-o media={Letter|Legal|A4\
  \|altri_formati}
Stampa utilizzando carta del formato indicato.
-o sides=two-sides-long-edge
-o sides=two-sides-short-edge
Stampa fronte e retro con una stampante duplex. La differenza nelle due opzioni sta nel modo in cui viene ruotata la pagina posteriore.
-o sides=one-side
Stampa su un solo lato.
-o job-sheets=\
  \{none|standard|altri_tipi}\
  \[,{none|standard|altri_tipi}]
Richiede di stampare una pagina di separazione. La parola chiave none annulla tale richiesta, mentre altre parole chiave descrivono un tipo particolare di pagina di separazione. Se si indica una parola chiave dopo la virgola, si richiede una pagina di separazione anche alla fine della stampa.
-o page-ranges=\
  \n_pag_iniziale[-n_pag_finale]\
  \[,intervallo_pagine]...
Seleziona uno o più intervalli di pagine.
-o page-set={odd|even}
Seleziona le pagine dispari, oppure quelle pari.
-o number-up=n
Stampa n pagine logiche in una sola pagina reale. La scelta di valori è limitata.
-o brightness=n
Stampa con una luminosità del n %, dove il valore 100 rappresenta la tonalità normale e valori superiori schiariscono in proporzione il risultato, mentre valori inferiori lo anneriscono.
-o gamma=n
Stampa con un contrasto di n/1 000, dove il valore 1 000 rappresenta la gamma e valori superiori aumentano, mentre valori inferiori diminuiscono in proporzione la gamma.
-o cpi=n
Nel caso di stampa di testo puro, definisce la densità orizzontale di caratteri per pollice.
-o lpi=n
Nel caso di stampa di testo puro, definisce la densità verticale di righe per pollice.
-o columns=n
Nel caso di stampa di testo puro, definisce la quantità di colonne in cui dividere lo spazio della pagina.
-o page-left=n
-o page-right=n
-o page-top=n
-o page-bottom=n
Nel caso di stampa di testo, definisce dei margini alla pagina, rispettivamente sinistro, destro, superiore e inferiore. Il valore che si attribuisce rappresenta una quantità di punti PostScript, dove un punto equivale a 1/72 di pollice.
-o prettyprint
Nel caso di stampa di testo, abbellisce la stampa con un'intestazione; inoltre, se il contenuto viene riconosciuto da Cups, questo viene evidenziato secondo le sue caratteristiche.

Tabella 219.9. L'opzione -o dei comandi lpr e di lp. Seconda parte.

Comando Descrizione
-o position=center
-o position=left
-o position=top-left
-o position=top
-o position=top-right
-o position=right
-o position=bottom-right
-o position=bottom
-o position=bottom-left
Nel caso di un'immagine, la colloca nella posizione specificata dalla parola chiave che si assegna all'argomento position.
-o scaling=n
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.
-o ppi=n
Definisce la densità di punti per pollice della stampa. Maggiore è questo valore, minore diviene di conseguenza quella dell'immagine stampata.
-o natural-scaling=n
Definisce la scala dell'immagine in percentuale.
-o hue=n
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.
-o saturation=n
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.

219.6   Personalizzazione dal lato cliente

Ogni utente può configurare per conto proprio la stampa. Per questo si utilizza il comando lpoptions, che si usa fondamentalmente come riepilogato nella tabella 219.10.

Tabella 219.10. Utilizzo del comando lpoptions.

Comando Descrizione
lpoptions [-p stampante_logica[/istanza]] \
  \-o opzioni_comuni [-o opzioni_comuni]...
Configura la stampante logica indicata, oppure quella predefinita in sua mancanza, con le opzioni indicate.
lpoptions -d coda
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.
lpoptions -x coda
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 219.8 e 219.9.

219.6.1   Istanze

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[Invio]

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[Invio]

Oppure:

lpr -P laser/ridotta prova.ps[Invio]

In questi esempi, si fa riferimento evidentemente alla stampa del file prova.ps.

219.7   Accesso remoto

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 219.11 dà l'idea di quello che potrebbe apparire interpellando un servente Cups ospitato nel proprio elaboratore locale.

Figura 219.11. La pagina iniziale di Cups.

cups-remoto-inizio

219.7.1   Configurazione per l'accesso remoto al servente IPP Cups

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 219.12 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 219.12. Directory virtuali controllabili con le direttive Location.

Directory Descrizione
/admin Il percorso per le operazioni amministrative.
/classes Il percorso per il controllo delle classi.
/classes/classe Il percorso per il controllo di una classe particolare.
/jobs Il percorso per il controllo dei processi di stampa.
/printers Il percorso per il controllo delle stampanti logiche.
/printers/stampante_logica Il percorso per il controllo di una stampante logica particolare.

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

Tabella 219.13. Direttive utilizzabili nell'ambito di un gruppo Location, nel file di configurazione /etc/cups/cupsd.conf.

Direttiva Descrizione
AuthType {None|Basic\
  \|Digest}
Definisce il modo in cui deve essere identificato l'accesso. La parola chiave None indica che non si richiede alcuna autenticazione; Basic utilizza un nominativo utente e una parola d'ordine che deve corrispondere a un'utenza del sistema operativo; Digest utilizza un nominativo utente e una parola d'ordine che deve corrispondere a un'utenza specifica di Cups.
AuthClass {Anonymous\
  \|User|System|Group}
Limita l'accesso in base all'appartenenza a una categoria: la parola chiave Anonymous annulla qualunque richiesta di autenticazione; User consente l'accesso a tutti gli utenti che riescono a identificarsi come tali; System consente l'accesso agli utenti che appartengono al gruppo definito con la direttiva SystemGroup; Group consente l'accesso agli utenti che appartengono al gruppo definito dalla direttiva AuthGroupName.
AuthGroupName gruppo
Definisce il gruppo a cui devono appartenere gli utenti che vogliono accedere quando la direttiva AuthGroup indica la parola chiave Group.
Order {allow,deny\
  \|deny,allow}
Definisce l'ordine di analisi delle direttive Allow e Deny. La sequenza allow,deny fa sì che l'accesso sia accettato a meno che espressamente rifiutato; la sequenza deny,allow fa sì che l'accesso sia rifiutato a meno che espressamente accettato.
Allow modello_nodi
Deny modello_nodi
Consente o vieta l'accesso al gruppo di nodi di rete specificato dal modello.

L'esempio seguente riguarda un piccolo estratto del file /etc/cups/cupsd.conf:

Listato 219.14.

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.

219.7.2   Accesso a una coda remota

Come già accennato in precedenza, si può fare riferimento a una coda di stampa, con i comandi lp e lpr, anche nella forma:

nome@nodo

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 219.14, 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.

219.7.3   Autenticazione digest

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 219.16. Il comando lppasswd.

Comando Descrizione
lppasswd -a nominativo [-g gruppo]
Crea un nominativo e lo associa eventualmente a un gruppo.
lppasswd -x nominativo
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 219.16, 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.

219.7.4   Problemi di accesso attraverso un proxy

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.

219.8   Compatibilità con il sistema di stampa BSD

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[Invio]

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://nodo/coda_remota

219.9   Amministrazione 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.

Figura 219.19. La pagina riferita alla stampante logica denominata laserjet.

cups-remoto-stampante-laserjet

Figura 219.20. La pagina riferita alla classe denominata laser.

cups-remoto-classe-laser

Figura 219.21. La pagina iniziale riferita all'amministrazione delle stampanti e delle classi.

cups-remoto-amministrazione

219.10   Considerazioni finali

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.

219.11   Riferimenti


1) Cups   GNU GPL

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 di rete 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.


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome cups.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory