BETA La rivista ipertestuale tecnica (colleg. al sito Web)
BETA
BETA La rivista ipertestuale tecnicaBarra BETA
Barra Sito Beta.it
BETA 20/99 (3) - Gennaio/Febbraio 1999 - Unix: La stampante nella... rete!  -  Indici | Guida

La stampante nella... rete!

Fernando Carello
Articolista Senior, BETA

    Ricordate quel vecchio PC ormai obsoleto, buttato in un angolo a prendere polvere perché Windows impiega ore solo per installarsi ?

Un po' di tempo fa abbiamo visto come fosse possibile installarvi un Sistema Operativo in grado di far "trottare" l'hardware su cui è montato (Linux), e quindi usarlo come un utile gateway per Internet (vedi "Ricetta per un router fatto in casa").

Ma siccome è un peccato sprecare un sì valido 386 solo per tali banali compiti, cercherò di convincervi a dargli qualcos'altro da fare ... ad esempio il print server !

Vedete, non è che Windows non sia bravo a gestire le stampe, tutt'altro! D'altronde, come giustificare altrimenti gli svariati Megabyte di RAM "succhiati" dal Print Manager che, cambiato nome ma non vizio, alberga negli oscuri meandri dei servizi di Win9x ?

No, il problema nasce quando dovete stampare qualcosa di ... lunghetto: perché in questi casi può succedere che il superpompato Pentium-III rallenti in modo imbarazzante, obbligato ad innumerevoli context switch per poter star dietro agli interrupt handler della stampante ...

E se poi volessimo condividere in rete la nostra stampante ?

Magari in casa, o in ufficio, un altro PC potrebbe avere l'idea sovversiva che "la stampante è un bene di tutti" ?

Dite la verità, vostra moglie ha spesso la pretesa assurda di stampare la relazione da consegnare entro l'altroieri proprio mentre state finendo Unreal ... che ovviamente scende da 50 a 4 frame al secondo nel momento in cui Windows fa partire il processo di spooling.

Datemi retta, lasciamo queste odiose incombenze così poco trendy al nostro amato "mulo da fatica" !

E quindi vediamo cosa serve ... beh, anzitutto, una stampante. Sembra banale, eppure serve una stampante che non sia di quelle "Windows-only": ci sono infatti alcuni modelli di "laser" economiche (anche di marche blasonate, come Canon ed HP) che non hanno al proprio interno né un processore né della RAM, e pertanto possono funzionare solo sfruttando processore e memoria del computer cui sono collegati; fin qui poco male, se non fosse che tale "giochetto" è stato previsto, dai costruttori, solo con Windows95 !

Ad ogni modo questa caratteristica è ben indicata nelle istruzioni, quindi difficile che possiate sbagliarvi.


Ciò detto, come sappiamo ogni volta che Linux si trova a dover gestire una nuova periferica ha bisogno di essere avvertito; o meglio, dobbiamo configurarne il kernel affinché sia in grado di supportare le nuove funzionalità.

Dovremo quindi far partire lo script di configurazione (da dentro /usr/src/linux, "make config" se siete amanti della linea di comando, "make menuconfig" se avete RAM da scialare con un sistema di menù a colori via ncurses): da lì, aggiungeremo il supporto per la porta parallela; la relativa voce cambia a seconda della versione di kernel usata, a titolo indicativo per i kernel 2.1.x si trova in una delle prime sezioni ("General Setup": attivate "Parallel port support" e "PC-style hardware").

Fatto questo, aggiungeremo il supporto per la stampante (beh, non è mica l'unica periferica che si può collegare ad una parallela !): nella sezione "Character devices", abiliteremo "Parallel printer support" ed eventualmente (se abbiamo un PC recente con parallela bidirezionale, con cavo e stampante acconci) anche "IEEE1284 status readback".

Bene, siamo ora pronti a ricompilare il kernel: il nostro caro vecchio 386 arrancherà per qualche ora, ma d'altra parte non è che il kernel vada ricompilato ogni giorno, no ? Nel frattempo potrete sempre finire Unreal sulla vostra superworkstation Win95 !

Collegata la stampante, installato e testato il nuovo kernel (consiglio un'occhiata ai messaggi d'avvio con "dmesg | more"), vediamo se effettivamente Linux e la stampante hanno qualcosa da dirsi: come utente "root", scegliete un file di testo non troppo lungo (un mini-HOWTO sotto /usr/doc/faq può andare bene) e "sparatelo" sulla porta parallela (che sarà /dev/lp0 se avete un kernel 2.1.x o superiori, oppure /dev/lp1 se siete rimasti un po' indietro rispetto alla veloce evoluzione di Linux) con un bel "cat nomefile > /dev/lp0".

Se la stampante sputa fuori carta opportunamente scarabocchiata, il primo passo è fatto (altrimenti, armatevi di pazienza e leggetevi il Printing-HOWTO).

Ora, converrete con me che non è elegante né educato "sparare" un documento direttamente sulla porta della stampante; non fosse altro perché si tratta di un metodo assai poco flessibile.

D'altronde Unix non è certo un sistema operativo barbaro: tutte le sue varianti mettono infatti a disposizione opportuni servizi di stampa !

Linux tradisce un debole per gli Unix di tipo BSD anche in questo, e adotta l'accoppiata "lpd + printcap": il primo essendo un demone in grado di gestire più stampanti e code di stampa sia locali che remote, il secondo un file di configurazione che "spiega" a lpd come trattare le suddette stampanti.

Appare quindi chiaro che dovremo anzitutto controllare /etc/printcap, e poi lpd.

Nel primo, dovrà esserci una riga che descriva la nostra stampante; supponendo che essa sia collegata al device /dev/lp0, la riga potrebbe essere (per approfondire, "man printcap"):

# Generic printer:
lp:lp=/dev/lp0:sd=/var/spool/lpd:sh

(ricordate però: se avete modificato /etc/printcap, dovrete rilanciare lpd, altrimenti continuerà ad utilizzare i vecchi parametri)

Ora controlliamo se il demone "lpd" è attivo:

># ps aux | grep "lpd"

root 65 0.0 0.2 860 324 ? S 20:53 0:00 /usr/sbin/lpd

Se così non fosse, sarà il caso di ricontrollare gli script di startup (tipicamente /etc/rc.d/rc.inet2) per verificare che lpd venga effettivamente lanciato all'avvio; nel frattempo potrete lanciarlo a mano ("lpd").

Già che ci siamo, controlliamo che la coda di stampa sia vuota ("lpq" deve rispondere "no entries").

Ora che tutto è a posto, proviamo se lo spooling funziona: come root, stampate il file di prima usando il comando "lpr nomefile"; la stampante dovrebbe produrre lo stesso output della volta scorsa, stavolta impiegando un pochino di tempo in più per partire.

Molto bene, adesso bisognerà estendere questo immenso privilegio anche agli utenti che non siano root: intanto occorrerà sincerarsi che /dev/lp0 appartenga al gruppo "daemon" (o chi per lui), dopodiché dovremo aggiungere al gruppo "lp" gli utenti che dovranno poter usare la stampante (il file in questione è /etc/group, ed un "man group"potrà fornire delucidazioni), altrimenti non avranno il necessario accesso in scrittura alla directory usata per lo spool dei dati (che tipicamente è /var/spool/lpd, proprietà di root.lp).

Finite modifiche e relativi test ("lpr nomefile" da un utente non root), rimane un problemino: far vedere la stampante alle altre macchine della rete.

Fossero solo computer Linux, sarebbe semplice... basterebbe modificare, su ciascuna workstation interessata, la nota riga del printcap in:

# Generic printer:
lp:lp=/dev/null:sd=/var/spool/lpd:sh:rm=NOME_SERVER:rp=lp

(il che spiega a lpd di cercarsi la stampante ... altrove).

Va notato che NOME_SERVER deve essere un nome valido dal punto di vista TCP/IP, quindi se non avete un Domain Name Server a cui riferirvi, dovrete mappare l'indirizzo IP del server Linux che ospita la stampante a NOME_SERVER, tramite il file /etc/hosts .

Dopodiché valgono i discorsi fatti per il server circa il riavvio di lpd e la modifica del gruppo lp.

Per i PC Windows il discorso è diverso: occorre appoggiare i servizi di stampa su un protocollo di servizio più generico (noto con l'orribile nome di "Condivisione di file e stampanti", per gli amici SMB ovvero Service Message Block); si tratta del "file system di rete" che Windows ha ereditato da Lan Manager, usato per condividere risorse quali, appunto, dischi e stampanti.

Linux è in grado di utilizzare questo protocollo sia come client che come server; quest'ultimo caso è quello che ci interessa in questo frangente, pertanto dovremo installare e configurare il pacchetto "Samba" (facilmente reperibile presso i soliti siti ftp Linux-aware) sul nostro print server.

Esula dallo scopo di questo articolo guidarvi nel suddetto compito, che comunque non è particolarmente arduo (leggete la documentazione, ed in particolare i file di configurazione di esempio, ritoccateli ad uopo, e siete praticamente a posto): passiamo quindi a configurare Samba affinché "esporti" correttamente la vostra stampante verso il mondo Windows.

Supponendo quindi che abbiate correttamente configurato Samba per la vostra LAN (e di conseguenza abbiate creato utenti, workgroup e tutto il necessario), per fargli "esportare" la stampante collegata al server è sufficiente de-commentare la seguente sezione al file /usr/local/samba/lib/smb.conf:

[printers]
    comment = All
Printers
    path = /var/spool/lpd
    browseable = no
# Set public = yes to allow user 'guest account' to print
    guest ok = no
    writable = no
    printable = yes

In questo modo, Samba leggerà /etc/printcap alla ricerca di tutte le stampanti configurate (nel nostro caso, la sola "lp") e le esporterà verso la rete: alle stazioni Win9x appariranno come normali stampanti di rete, come appartenessero ad un PC Windows (fig.1, dove il nome da "lp" è stato cambiato in uno più esplicativo).

La stampante vista da Win95
Figura 1 - La stampante vista da Win95

Chiaramente, ciascuna macchina che voglia utilizzare la stampante di rete dovrà installarla (tramite la consueta procedura di installazione di una stampante di rete), con i relativi driver: Linux tratterà la stampante come "raw", quindi ci penseranno le macchine Windows a tradurre i contenuti in un linguaggio comprensibile alla periferica.

Visto che il Print Server ha i servizi di spooling, risulta superfluo abilitare lo spooling anche sulle macchine Windows: pertanto possiamo abilitare l'opzione "Invia i dati direttamente alla stampante" dalle Proprietà della stampante di rete appena installata (fig. 2).

Proprietà  di stampa
Figura 2 - Proprietà di stampa

Finito !

Nulla di difficile, vero ?

E ora che ci avete preso gusto ... sapevate che la vostra vecchia inkjet, o addirittura la vetusta 9 aghi, può trasformarsi per voi in una splendida stampante di rete Postscript ?

Ebbene sì, aggiungendo "Ghostscript" agli ingredienti oggi descritti potremo fare anche questo ...

... alla prossima puntata !


Fernando Carello è co-fondatore di BETA; consulente informatico, è raggiungibile su Internet tramite la redazione oppure all'indirizzo fcarello@srd.it

Copyright © 1999 Fernando Carello, tutti i diritti sono riservati. Questo Articolo di BETA, insieme alla Rivista, è distribuibile secondo i termini e le condizioni della Licenza Pubblica Beta, come specificato nel file LPB.


BETA 20/99 (3) - Gennaio/Febbraio 1999: Sommario | Indice Numero | Redazione | Liste/Forum | Informazioni | Indici di BETA | Installazione | Licenza Pubbl. Beta | Mirror ufficiali | Guida | Ricerche | Stampa


Beta.it (http://www.beta.it)email info@beta.it
Barra Sito Beta.it

Copyright © 1994-99 Beta, tutti i diritti sono riservati. Documento Lpb. BETA sul Web: http://www.beta.it
Sommario Internet Id Redazione Liste/Forum Informazioni Browser Mirror ufficiali Beta Home Page Beta Home Page english Beta News BETA Rivista Articoli BETA Beta Edit, pubblicazioni Beta Logo, premi Beta Lpb, Licenza Pubblica e Articoli Lpb Beta Navigatore Beta Online Beta Library Beta Info Gruppo Beta