11.7. Risoluzione dei problemi

Nelle sezioni seguenti verranno esaminati alcuni dei problemi hardware e software riscontrati con maggiore frequenza e le procedure per risolvere o evitare tali problemi.

11.7.1. Stampanti prive del supporto del linguaggio standard per stampanti

Le stampanti che non supportano alcun linguaggio comune per stampanti e possono essere utilizzate solo con sequenze di controllo speciali sono definite stampanti GDI. Queste stampanti possono interagire solo con i sistemi operativi che dispongono di un driver fornito dal produttore. GDI è un'interfaccia di programmazione sviluppata da Microsoft per i dispositivi grafici. Il problema non è costituito dall'interfaccia di programmazione, bensì dal fatto che le stampanti GDI possono essere utilizzate solo tramite il linguaggio per stampanti proprietario del relativo modello della stampante.

In alcune stampanti è possibile attivare la modalità GDI o uno dei linguaggi standard per stampanti. Alcuni produttori forniscono driver proprietari per le proprie stampanti GDI. Lo svantaggio dei driver per stampanti proprietari è che non esiste alcuna garanzia che essi funzionino con il sistema di stampa installato e che siano adatti alle varie piattaforme hardware. Diversamente, le stampanti che supportano un linguaggio standard non dipendono da una versione speciale del sistema di stampa o da una determinata piattaforma hardware.

Anziché tentare di far funzionare un driver Linux proprietario, può essere più conveniente acquistare una stampante supportata. In questo modo si risolverebbe definitivamente il problema del driver, eliminando l'esigenza di installare e configurare software driver speciali e ottenere aggiornamenti del driver che possono essere necessari in seguito a nuovi sviluppi nel sistema di stampa.

11.7.2. Nessun file PPD appropriato disponibile per una stampante PostScript

Se il pacchetto manufacturer-PPDs non contiene alcun file PPD appropriato per una stampante PostScript, è in genere possibile utilizzare il file PPD dal CD dei driver del produttore della stampante o scaricare un file PPD appropriato dalla pagina Web del produttore della stampante.

Se il file PPD è disponibile in forma di archivio zip (.zip) come archivio zip autoestraente (.exe), decomprimerlo con il comando unzip. Esaminare i termini della licenza del file PPD. Utilizzare quindi l'utility cupstestppd per verificare se il file PPD è conforme alla specifica "Adobe PostScript Printer Description File Format Specification, version 4.3". Se l'utility restituisce "FAIL", gli errori nel file PPD sono gravi e possono provocare problemi significativi. Tutte le aree problematiche individuate da cupstestppd devono essere eliminate. Se necessario, richiedere un file PPD appropriato al produttore della stampante.

11.7.3. Porte parallele

L'approccio più sicuro consiste nel collegare la stampante direttamente alla prima porta parallela e selezionare le impostazioni della porta parallela seguenti nel BIOS:

  • I/O address: 378 (esadecimale)

  • Interrupt: irrilevante

  • Mode: Normal, SPP o Output Only

  • DMA: disattivato

Se dopo aver specificato queste impostazioni non è ancora possibile accedere alla stampante dalla porta parallela, immettere esplicitamente l'indirizzo I/O dell'impostazione del BIOS nel formato 0x378 in /etc/modprobe.conf. Se sono presenti due porte parallele impostate sugli indirizzi I/O 378 e 278 (esadecimale), immettere tali impostazioni nel formato 0x378,0x278.

Se l'interrupt 7 è libero, può essere attivato con la voce illustrata nell'Esempio 11.1, "/etc/modprobe.conf: modalità di interrupt per la prima porta parallela". Prima di attivare la modalità di interrupt, controllare il file /proc/interrupts per verificare quali interrupt siano già in uso. Vengono visualizzati solo gli interrupt attualmente utilizzati. L'utilizzo di interrupt dipende dai componenti hardware attivi. L'interrupt per la porta parallela non deve essere utilizzato da altri dispositivi. Se non si è sicuri di questo aspetto, utilizzare la modalità di polling con irq=none.

Esempio 11.1. /etc/modprobe.conf: modalità di interrupt per la prima porta parallela

alias parport_lowlevel parport_pc
options parport_pc io=0x378 irq=7

11.7.4. Connessioni della stampante di rete

Identificazione dei problemi di rete

Collegare la stampante direttamente al computer. Per eseguire un test, configurare la stampante come una stampante locale. Se funziona, i problemi riguardano la rete.

Controllo della rete TCP/IP

La rete TCP/IP e la risoluzione dei nomi devono funzionare correttamente.

Controllo di un lpd remoto

Utilizzare il comando seguente per testare se è possibile stabilire una connessione TCP a lpd (porta 515) nell'host:

netcat -z host 515 && echo ok || echo failed

Se la connessione a lpd non può essere stabilita, è possibile che lpd non sia attivo o che vi siano problemi nella rete.

In qualità di utente root, utilizzare il comando seguente per eseguire una query in un rapporto sullo stato, possibilmente molto lungo, per ricercare queue in un host remoto, purché il relativo lpd sia attivo e l'host accetti le query:

echo -e "\004queue" \
  | netcat -w 2 -p 722 host 515

Se lpd non risponde alla query, è possibile che non sia attivo o che vi siano problemi nella rete. Diversamente, se lpd risponde, nella risposta dovrebbe essere indicato il motivo che impedisce la stampa in queue nell'host. Se si riceve una risposta simile a quella mostrata nell'Esempio 11.2, "Messaggi di errore dall'lpd", il problema è causato dall'lpd remoto.

Esempio 11.2. Messaggi di errore dall'lpd

lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled
Controllo di un cupsd remoto

Per default, il server di rete CUPS deve diffondere le code ogni 30 secondi nella porta UDP 631. Di conseguenza, è possibile utilizzare il comando seguente per testare se nella rete è disponibile un server di rete CUPS.

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

Se è disponibile un server di rete CUPS che esegue la diffusione, l'output sarà simile a quello mostrato nell'Esempio 11.3, "Diffusione dal server di rete CUPS".

Esempio 11.3. Diffusione dal server di rete CUPS

ipp://host.domain:631/printers/queue

Il comando seguente può essere utilizzato per testare se è possibile stabilire una connessione TCP a cupsd (porta 631) nell'host:

netcat -z host 631 && echo ok || echo failed

Se la connessione a cupsd non può essere stabilita, è possibile che cupsd non sia attivo o che vi siano problemi nella rete. lpstat -h host -l -t restituisce un rapporto sullo stato (possibilmente molto lungo) per tutte le code sull'host, purché il relativo cupsd sia attivo e l'host accetti le query.

Il comando successivo può essere utilizzato per testare se queue nell'host accetta un lavoro di stampa formato da un singolo carattere di ritorno a capo. Questo comando non determina alcuna stampa. È possibile che venga emessa una pagina bianca.

echo -en "\r" \
  | lp -d queue -h host
Risoluzione dei problemi di una stampante di rete o di una casella del server di stampa

Gli spooler in esecuzione in una casella del server di stampa possono talvolta causare problemi se devono gestire numerosi lavori di stampa. Poiché tali problemi sono causati dallo spooler nella casella del server di stampa, non è possibile risolverli in alcun modo. Per evitarli, ignorare lo spooler nella casella del server di stampa utilizzando la stampante connessa a tale casella direttamente tramite il socket TCP. Vedere la Sezione 11.4.2, "Stampanti di rete".

In questo modo la casella del server di stampa viene utilizzata solo come convertitore tra i vari formati del trasferimento di dati (connessione alla rete TCP/IP e alla stampante locale). Per utilizzare questa procedura, è necessario conoscere la porta TCP della casella del server di stampa. Se la stampante è connessa alla casella del server di stampa ed è accesa, la porta TCP può solitamente essere individuata tramite l'utility nmap del pacchetto nmap dopo un breve intervallo dall'accensione della casella del server di stampa. Ad esempio, nmap IP-address può restituire il seguente output per una casella del server di stampa:

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

Questo output indica che la stampante connessa alla casella del server di stampa può essere utilizzata tramite il socket TCP sulla porta 9100. Per default, nmap controlla solo determinate porte note, elencate in /usr/share/nmap/nmap-services. Per controllare tutte le porte possibili, utilizzare il comando nmap -p from_port-to_port IP-address. Questa operazione potrebbe richiedere del tempo. Per ulteriori informazioni, consultare la documentazione nmap.

Immettere un comando simile al seguente

echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 IP-address port

per inviare stringhe di caratteri o file direttamente alla porta corrispondente per testare se la stampante può essere utilizzata da questa porta.

11.7.5. Stampe difettose senza messaggi di errore

Per quanto riguarda il sistema di stampa, il lavoro di stampa è completo quando il back-end di CUPS ultima il trasferimento di dati alla stampante di destinazione. Se l'elaborazione successiva nel destinatario ha esito negativo, ad esempio se la stampante non è in grado di stampare i dati specifici della stampante, il sistema di stampa non rileva il problema. Se non è possibile stampare dati specifici della stampante, selezionare un file PPD diverso che risulti più adatto alla stampante in uso.

11.7.6. Code disabilitate

Se il trasferimento di dati al destinatario non può essere eseguito dopo numerosi tentativi, il back-end CUPS, ad esempio usb o socket, segnalano a cupsd un errore nel sistema di stampa. Nel back-end viene stabilito se effettuare tentativi ed eventualmente quanti effettuarne prima di segnalare l'impossibilità di eseguire il trasferimento dei dati. Poiché sarebbe inutile eseguire ulteriori tentativi, cupsd disabilita la stampa per la coda corrispondente. Dopo aver eliminato la causa del problema, l'amministratore del sistema deve abilitare nuovamente la stampa mediante il comando /usr/bin/enable.

11.7.7. CUPS Browsing: eliminazione di lavori di stampa

Se le code di un server di rete CUPS vengono diffuse agli host del client tramite il protocollo CUPS Browsing ed è attivo un cupsd locale valido negli host del client, il cupsd del client accetta i lavori di stampa dalle applicazioni e li inoltra al cupsd del server. Quando cupsd accetta un lavoro di stampa, viene associato a un nuovo numero di lavoro. Il numero del lavoro nell'host del client è pertanto diverso da quello nel server. Poiché in genere un lavoro di stampa viene inoltrato immediatamente, non può essere eliminato tramite il numero del lavoro disponibile nell'host del client in quanto il cupsd del client considera completato il lavoro di stampa nel momento in cui viene inoltrato al cupsd del server.

Per eliminare il lavoro di stampa nel server, utilizzare un comando quale lpstat -h print-server -o per determinare il numero del lavoro nel server, purché il server non abbia già completato il lavoro di stampa, ovvero lo abbia inviato alla stampante. Utilizzando questo numero, è possibile eliminare il lavoro di stampa nel server:

cancel -h print-server queue-jobnnumber

11.7.8. Lavori di stampa difettosi ed errori nel trasferimento di dati

I lavori di stampa restano nelle code e la stampa viene ripresa se si spegne e si riaccende la stampante e si riavvia il computer durante il processo di stampa. I lavori di stampa difettosi devono essere rimossi dalla coda tramite il comando cancel.

Se un lavoro di stampa è difettoso o si verifica un errore nella comunicazione tra l'host e la stampante, verranno stampati numerosi fogli con caratteri illeggibili poiché i dati non possono essere elaborati correttamente. Per risolvere questo problema, attenersi alla procedura seguente:

  1. Per interrompere la stampa, rimuovere tutta la carta dalle stampanti a getto d'inchiostro o aprire i cassetti della carta delle stampanti laser. Le stampanti di alta qualità sono dotate di un pulsante per l'annullamento della stampa in corso.

  2. Il lavoro di stampa potrebbe ancora essere nella coda, poiché i lavori vengono rimossi solo dopo essere stati inviati completamente alla stampante. Utilizzare lpstat -o o lpstat -h print-server -o per controllare quale sia la coda correntemente in stampa. Eliminare il lavoro di stampa mediante il comando cancel queue-jobnumber o cancel -h print-server queue-jobnumber.

  3. Anche se il lavoro di stampa è stato eliminato dalla coda, alcuni dati potrebbero comunque essere trasferiti alla stampante. Verificare se un processo nel back-end CUPS è ancora in esecuzione per la coda in questione e terminarlo. Nel caso di una stampante collegata alla porta parallela, ad esempio, il comando fuser -k /dev/lp0 può essere utilizzato per terminare tutti i processi ancora attivi sulla stampante o nella porta parallela.

  4. Reimpostare la stampante spegnendola per un breve periodo, quindi inserire la carta e riaccendere la stampante.

11.7.9. Debugging del sistema di stampa CUPS

Utilizzare la seguente procedura generica per individuare problemi nel sistema di stampa CUPS:

  1. Impostare LogLevel debug in /etc/cups/cupsd.conf.

  2. Interrompere cupsd.

  3. Rimuovere /var/log/cups/error_log* per non dover eseguire la ricerca in file di log molto estesi.

  4. Avviare cupsd.

  5. Ripetere l'azione che aveva determinato il problema.

  6. Controllare i messaggi in /var/log/cups/error_log* per identificare la causa del problema.

11.7.10. Ulteriori informazioni

Le soluzioni a molti problemi specifici sono illustrate nel database del supporto tecnico SUSE. (http://portal.suse.com/) Individuare gli articoli appropriati effettuando ricerche con la tastiera.