Questa pagina contiene i dettagli di un progetto di documentazione tecnica accettato per la stagione della documentazione di Google.
Riepilogo del progetto
- Organizzazione open source:
- The Linux Foundation
- Redattore tecnico:
- PIYUSHgoyal16
- Nome del progetto:
- Tutorial e linee guida per la progettazione di driver per stampanti/scanner nelle applicazioni per stampanti
- Durata del progetto:
- Durata standard (3 mesi)
Project description
Panoramica
I driver di stampa classici, costituiti da filtri specifici per la stampante e PPD (Postscript Printer Description), descrivono le funzionalità della stampante e i filtri da chiamare, i file che devono essere eliminati in determinate directory del file system vengono sostituiti dalle cosiddette applicazioni di stampa, emulazione di una stampante di rete IPP.
La maggior parte delle moderne stampanti per uso generico sono stampanti IPP che consentono la stampa senza driver. Si pubblicizzano tramite DNS-SD, i client possono eseguire il polling delle informazioni sulle funzionalità tramite richieste IPP e utilizzano formati di dati standard per le stampe. Le stampanti che non forniscono questa funzionalità, in genere stampanti legacy o speciali, richiedono un driver della stampante.
Un'applicazione stampante è un demone che rileva le stampanti supportate e le pubblicizza su localhost come stampanti IPP Everywhere. Le applicazioni per stampanti contengono il software per stampare i job in arrivo sulle stampanti supportate, convertendo i dati nella lingua nativa della stampante e fornendo, su richiesta, ai clienti le informazioni sulle funzionalità della stampante. L'applicazione Printer ha perfino un'interfaccia di amministrazione web, come una vera stampante di rete.
Come sappiamo, Linux sta passando alla pacchettizzazione sandbox (ad esempio Snap) e anche la stampa si sta muovendo in questa direzione. In un pacchetto con sandbox, non possiamo modificare il contenuto della directory una volta creata. Il nostro sistema non è più modulare. Non possiamo scegliere quale pacchetto del driver della stampante installare. Le applicazioni per stampanti risolvono questo problema di modularità e ci offrono la stessa libertà che abbiamo con i driver delle stampanti.
I driver di stampanti e scanner negli snap non sono solo un requisito per CUPS e le applicazioni snap, ma funzionano anche su sistemi completamente classici. Tuttavia, a differenza dei driver pacchettizzati in modo classico, sono indipendenti dalla distribuzione del sistema operativo. Creando uno snap del driver della stampante, questo funzionerà su tutte le distribuzioni del sistema operativo che eseguono snapd, senza dover pacchettizzare i driver della stampante per ogni distribuzione (e relativa versione) in modo indipendente e rischiare di incappare in un inferno di dipendenze. L'altro vantaggio è che il vecchio concetto di file PPD provenienti da stampanti PostScript non è più supportato. Inoltre, accoppiando il sistema CUPS e il driver della stampante tramite una connessione IP anziché inserire i file nel sistema CUPS, sia il sistema CUPS sia l'applicazione della stampante possono trovarsi in pacchetti sandbox separati.
Il mio compito sarà descrivere come progettare i driver per stampanti e scanner per questa forma di pacchetti e come impacchettarli in snap. L'intenzione è aiutare in futuro chiunque scriva driver per stampanti o scanner, in particolare i produttori di hardware, a farlo nel modo giusto.
Il flusso di lavoro dell'applicazione della stampante può essere riassunto con il seguente diagramma di flusso:
La base per la creazione di queste applicazioni per stampanti/scanner è PAPPL, una libreria che fornisce la maggior parte delle funzionalità per questo scopo, ma anche i filtri cups contenenti il codice da utilizzare per le applicazioni per stampanti. Il concetto è ancora in fase di sviluppo, principalmente nel Google Summer of Code di quest'anno, ma il 14 settembre, quando inizia il periodo di scrittura della documentazione, il periodo di codifica di GSoC è già terminato ed è in questo momento che OpenPrinting ha bisogno del tutorial.
Modello per driver di stampa Definisci la struttura per i dati JOB
Dichiara array di costanti per le dimensioni dei contenuti multimediali
Dichiara le funzioni i) Callback o init Una funzione booleana che accetta il nome del driver, i dati del driver e così via e imposta gli attributi del driver di conseguenza. Se i dettagli forniti sono appropriati, restituisce true e false in caso di errore.
ii) stampa Funzione booleana che accetta lavoro, opzioni per il lavoro e il dispositivo. Stampa un file e restituisce true in caso di esito positivo e false in caso di esito negativo.
iii) rendjob Funzione booleana che accetta il job, le opzioni per il job e il dispositivo. Termina il job e restituisce true in caso di esito positivo e false in caso di errore.
iv) rendpage Funzione booleana che accetta il job, le opzioni per il job, il dispositivo e il numero di pagina. Termina la pagina e restituisce true in caso di esito positivo e false in caso di esito negativo.
v) rstartjob Funzione booleana che accetta il job, le opzioni per il job e il dispositivo. Avvia il job e restituisce true in caso di esito positivo e false in caso di esito negativo.
vi) rstartpage Funzione booleana che accetta il job, le opzioni per il job, il dispositivo e il numero di pagina. Avvia la pagina e restituisce true in caso di esito positivo e false in caso di esito negativo.
vii) rwrite Funzione booleana che accetta il job, le opzioni per il job, il dispositivo, il numero di riga e l'array di caratteri. Scrive la riga e restituisce true in caso di esito positivo e false in caso di esito negativo. viii) funzioni facoltative come identify (aiuta a identificare le stampanti in base all'azione fornita), compress(comprime una riga di grafica) e così via