Progetto Linux Foundation

Questa pagina contiene i dettagli di un progetto di scrittura tecnica accettato per la stagione dei documenti Google.

Riepilogo del progetto

Organizzazione open source:
I concetti di base di Linux
Technical writer:
PIYUSHgoyal16
Nome progetto:
Tutorial e linee guida sulla progettazione per i driver di stampante/scanner nelle applicazioni per stampanti
Durata del progetto:
Durata standard (3 mesi)

Project description

Panoramica

I classici driver per stampanti costituiti da filtri specifici per stampante e da PPD (Postscript Printer Description, descrive le funzionalità della stampante e quali filtri chiamare), i file che devono essere rilasciati in determinate directory del file system vengono sostituiti dalle cosiddette applicazioni stampante, l'emulazione di una stampante di rete IPP.

La maggior parte delle stampanti generiche moderne sono stampanti IPP che consentono la stampa senza driver. Si pubblicizzano tramite DNS-SD, i client possono eseguire il polling delle informazioni relative alle funzionalità tramite richieste IPP e utilizzare formati di dati standard per i processi di stampa. Le stampanti che non forniscono questa funzionalità, in genere per le stampanti legacy o speciali è necessario un driver per stampante.

Un'applicazione Printer è un daemon che rileva le stampanti supportate e le pubblicizza sul localhost come stampante IPP Everywhere. Le applicazioni per stampante contengono il software per la stampa dei processi in arrivo sulle stampanti supportate, convertendo i dati nella lingua nativa della stampante e fornisce informazioni sulle funzionalità della stampante ai client su richiesta. L'applicazione Printer ha persino un'interfaccia di amministrazione web, come una vera stampante di rete.

Come sappiamo, Linux sta passando a pacchetti con sandbox (ad esempio Snap) e anche la stampa sta andando in questa direzione. In un pacchetto con sandbox, non è possibile modificare il contenuto della directory una volta creato. Il nostro sistema non è più modulare. Non possiamo scegliere quale pacchetto del driver della stampante installare. Le applicazioni per stampanti risolvono il problema della modularità e ci danno la stessa libertà dei driver per stampanti.

I driver per stampanti e scanner in Snaps non sono solo un requisito per un CUPS agganciato e un'applicazione agganciata, ma funzionano anche su sistemi completamente classici, ma al contrario dei driver confezionati in modo classico sono indipendenti dalla distribuzione del sistema operativo. Crei un driver della stampante Snap, che funziona su tutte le distribuzioni del sistema operativo che vengono eseguite tramite agganciato. Non è necessario pacchettizzare i driver della stampante per ogni singola distribuzione (e versione) in modo indipendente e finirà per finire in un inferno delle dipendenze. L'altro vantaggio è che l'antico concetto di file PPD proveniente da stampanti PostScript non è più disponibile. Inoltre, accoppiando il sistema CUPS e il driver della stampante tramite una connessione IP invece di rilasciare file nel sistema CUPS, sia il sistema CUPS che l'applicazione stampante possono essere inseriti in pacchetti separati con sandbox.

Il mio compito sarà descrivere come progettare i driver per stampanti e scanner per questo tipo di imballaggio e come imballarli in Snap. Lo scopo è aiutare in futuro chiunque scriva driver di stampanti o scanner, in particolare i produttori di hardware, a farlo nel modo giusto.

Il flusso di lavoro dell'applicazione stampante può essere riassunto con il diagramma di flusso specificato:

La base per la creazione di applicazioni stampante/scanner è PAPPL, una libreria che fornisce la maggior parte delle funzionalità a questo scopo, ma anche filtri-tazze contenenti codice da utilizzare per applicazioni di stampa. Il concetto è ancora in fase di sviluppo, principalmente durante il Google Summer of Code di quest'anno, ma il 14 settembre, quando inizia il periodo di scrittura della documentazione, il periodo di programmazione di GSoC è già terminato e questo è il momento in cui OpenPrinting ha bisogno del tutorial.

Modello per driver di stampa Definire la struttura dei dati JOB

Dichiara l'array di costanti per le dimensioni dei supporti

Dichiarare le funzioni i) Callback o init Una funzione booleana che accetta il nome del conducente, i dati del conducente ecc. e che imposta gli attributi del conducente in modo corrispondente. Se i dettagli forniti sono appropriati, restituisce true e false in caso di errore.

ii) Print Funzione booleana che accetta processo, opzioni per il processo e il dispositivo. Stampa un file e restituisce true in caso di esito positivo e false in caso di errore.

iii) rendjob Funzione booleana che accetta job, opzioni per job e dispositivo. Termina il job e restituisce true in caso di successo e false in caso di errore.

iv) rendpage Funzione booleana che accetta job, opzioni per il job, dispositivo e numero di pagina. Termina la pagina e restituisce true in caso di esito positivo e false in caso di errore.

v) rstartjob Funzione booleana che accetta job, opzioni per job e dispositivo. Avvia il job e restituisce true in caso di successo e false in caso di errore.

vi) rstartpage Funzione booleana che accetta job, opzioni per il job, dispositivo e numero di pagina. Avvia la pagina e restituisce true in caso di esito positivo e false in caso di errore.

vii) rwrite Funzione booleana che accetta job, opzioni per il job, dispositivo, numero di riga e array di caratteri. Scrive la riga e restituisce true in caso di esito positivo e false in caso di errore. viii) funzioni facoltative come identificare (aiuta nell'identificazione delle stampanti in base all'azione fornita), compress(comprimere una riga di grafica) e così via