CUPS tillhandahåller en mekanism som gör det möjligt att skicka utskriftsjobb till skrivare på ett standardiserat sätt. Utskriftsdata går till en schemaläggare som skickar jobb till ett filtersystem som omvandlar utskriftsjobbet till ett format som skrivaren förstår. Filtersystemet skickar sedan uppgifterna vidare till en backend – ett särskilt filter som skickar utskriftsdata till en enhet eller nätverksanslutning. Systemet använder sig i stor utsträckning av PostScript och rasterisering av data för att konvertera data till ett format som lämpar sig för målskrivaren.
CUPS erbjuder ett standardiserat och modulariserat utskriftssystem som kan bearbeta många dataformat på utskriftsservern. Före CUPS var det svårt att hitta ett standardiserat skrivarhanteringssystem som kunde hantera det mycket stora utbudet av skrivare på marknaden som använder sina egna skrivarspråk och format. Utskriftssystemen System V och Berkeley var till exempel i stort sett inkompatibla med varandra, och de krävde komplicerade skript och lösningar för att konvertera programmets dataformat till ett utskriftsvänligt format. Ofta kunde de inte upptäcka det filformat som skickades till skrivaren och kunde därför inte automatiskt och korrekt konvertera dataströmmen. Dessutom utfördes datakonverteringen på enskilda arbetsstationer i stället för på en central server.
CUPS gör det möjligt för skrivartillverkare och utvecklare av skrivardrivrutiner att lättare skapa drivrutiner som fungerar naturligt på skrivarservern. Behandlingen sker på servern, vilket möjliggör enklare nätverksbaserad utskrift än med andra Unix-utskriftssystem. Med Samba installerat kan användare adressera skrivare på fjärrskrivare i Windows och generiska PostScript-drivrutiner kan användas för utskrift över nätverket.
SchedulerEdit
CUPS-schemaläggaren implementerar Internet Printing Protocol (IPP) över HTTP/1.1. Ett hjälpprogram (cups-lpd) omvandlar LPD-förfrågningar (Line Printer Daemon protocol) till IPP. Schemaläggaren tillhandahåller också ett webbaserat gränssnitt för hantering av utskriftsjobb, konfiguration av servern och för dokumentation om själva CUPS.
En auktoriseringsmodul kontrollerar vilka IPP- och HTTP-meddelanden som kan passera genom systemet. När IPP/HTTP-paketen är auktoriserade skickas de till klientmodulen, som lyssnar efter och behandlar inkommande anslutningar. Klientmodulen ansvarar också för att exekvera externa CGI-program vid behov för att stödja webbaserade skrivare, klasser och övervakning och administration av jobbstatus. När denna modul har behandlat sina förfrågningar skickar den dem till IPP-modulen som utför URI-validering (Uniform Resource Identifier) för att förhindra att en klient kringgår åtkomstkontroller eller autentisering på HTTP-servern. URI är en textsträng som anger ett namn eller en adress som kan användas för att hänvisa till en abstrakt eller fysisk resurs i ett nätverk.
Schemaläggaren tillåter klasser av skrivare. Programmen kan skicka förfrågningar till grupper av skrivare i en klass, så att schemaläggaren kan styra jobbet till den första tillgängliga skrivaren i klassen. En jobbmodul hanterar utskriftsjobb, skickar dem till filter- och backend-processerna för slutlig konvertering och utskrift och övervakar statusmeddelanden från dessa processer.
CUPS-schemaläggaren använder en konfigurationsmodul som analyserar konfigurationsfiler, initialiserar CUPS-datastrukturer samt startar och stoppar CUPS-programmet. Konfigurationsmodulen stoppar CUPS-tjänsterna under behandlingen av konfigurationsfilen och startar sedan om tjänsten när behandlingen är klar.
En loggningsmodul hanterar loggningen av schemaläggningshändelser för åtkomst-, fel- och sidloggfiler. Huvudmodulen hanterar timeouts och avsändning av I/O-förfrågningar för klientanslutningar, bevakar signaler, hanterar fel och avslutningar av barnprocesser och laddar om serverkonfigurationsfilerna vid behov.
Andra moduler som används av schemaläggaren inkluderar:
- MIME-modulen, som hanterar en typ- och konverteringsdatabas för Multipurpose Internet Mail Extensions (MIME) som används i filtreringsprocessen som konverterar utskriftsdata till ett format som lämpar sig för en utskriftsenhet,
- en PPD-modul som hanterar en lista med Postscript Printer Description (PPD)-filer,
- en enhetsmodul som hanterar en lista med enheter som finns tillgängliga i systemet,
- en skrivare-modul som hanterar skrivare och PPD:er inom CUPS.
Filter systemEdit
CUPS kan bearbeta en mängd olika dataformat på skrivarservern. Den omvandlar utskriftsdata till skrivarens slutliga språk/format via en rad filter. Den använder MIME-typer för att identifiera filformat.
MIME-databaserRedigera
När CUPS-systemet har tilldelat utskriftsjobbet till schemaläggaren skickas det vidare till CUPS filtersystem. Detta omvandlar data till ett format som är lämpligt för skrivaren. Under uppstarten laddar CUPS-demonen två MIME-databaser: mime.types
som definierar de kända filtyper som CUPS kan ta emot data för, och mime.convs
som definierar de program som behandlar varje särskild MIME-typ.
Filen mime.types
har syntaxen:
mimetype { | }
För att upptäcka en HTML-fil skulle till exempel följande post vara tillämplig:
text/html html htm \
printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))
Den andra raden matchar filinnehållet med den angivna MIME-typen genom att fastställa att den första kilobyte texten i filen innehåller utskrivbara tecken och att dessa tecken innehåller HTML-markup. Om mönstret ovan stämmer skulle filtersystemet markera filen som MIME-typen text/html.
mime.convs
Filen mime.convs
har syntaxen:
source destination cost program
Källfältet betecknar MIME-typen som bestäms genom att slå upp mime.types
-filen, medan destinationsfältet listar den typ av utdata som begärs och bestämmer vilket program som ska användas. Detta hämtas också från mime.types
. Kostnadsfältet underlättar valet av uppsättningar filter vid konvertering av en fil. Det sista fältet, program, bestämmer vilket filterprogram som ska användas för att utföra datakonverteringen.
Några exempel:
text/plain application/postscript 50 texttopsapplication/vnd.cups-postscript application/vnd.cups-raster 50 pstorasterimage/* application/vnd.cups-postscript 50 imagetopsimage/* application/vnd.cups-raster 50 imagetoraster
FiltreringsprocessEdit
Filtreringsprocessen fungerar genom att ta emot indata som är förformaterade med sex argument:
- utskriftsjobbets jobb-ID
- användarnamn
- jobbnamn
- antalet kopior som ska skrivas ut
- något utskriftsalternativ
- filnamnet (detta är dock onödigt om det har omdirigerats från standardinmatningen).
Det avgör sedan vilken typ av data som matas in och vilket filter som skall användas genom att använda MIME-databaserna; till exempel kommer bilddata att upptäckas och bearbetas genom ett visst filter och HTML-data att upptäckas och bearbetas genom ett annat filter.
CUPS kan omvandla levererade data antingen till PostScript-data eller direkt till rasterdata. Om de konverteras till PostScript-data används ett ytterligare filter, ett så kallat förfilter, som kör PostScript-data genom en annan PostScript-konverterare så att den kan lägga till skrivarspecifika alternativ, t.ex. val av sidintervall för utskrift, inställning av n-up-läge och andra enhetsspecifika saker. När förfiltreringen är klar kan data antingen skickas direkt till en CUPS-backend om man använder en PostScript-skrivare, eller så kan de skickas till ett annat filter som Foomatic från linuxprinting.org. Alternativt kan de skickas till Ghostscript, som omvandlar PostScript till ett mellanliggande CUPS-rasterformat. Det mellanliggande rasterformatet skickas sedan vidare till ett sista filter som omvandlar rasterdata till ett skrivarspecifikt format. Standardfiltren som ingår i CUPS inkluderar:
- raster till PCL
- raster till ESC/P eller ESC/P2 (ett skrivarspråk från Epson, som nu till stor del ersatts av deras nya ESC/P-Raster-format)
- raster till Dymo (ett annat skrivarföretag).
- raster till Zebra Programming Language eller ZPL (ett skrivarspråk från Zebra Technologies)
Sedan 2009 stöds andra proprietära språk som GDI eller SPL (Samsung Printer Language) av Splix, en översättare för raster till SPL.
Det finns dock flera andra alternativ som kan integreras med CUPS. HPLIP (tidigare känt som HP-IJS) tillhandahåller Linux+CUPS-drivrutiner för HP-skrivare, Gutenprint (tidigare känt som Gimp-Print) är en serie skrivardrivrutiner av hög kvalitet för (mestadels) bläckstråleskrivare och TurboPrint for Linux har en annan serie skrivardrivrutiner av hög kvalitet för ett stort antal skrivare.
BaksidorRedigera
Baksidorna är de sätt på vilka CUPS skickar data till skrivare. Det finns flera backends tillgängliga för CUPS: parallella, seriella och USB-portar, cups-pdf PDF Virtual Printing, samt nätverksbackends som fungerar via protokollen IPP, JetDirect (AppSocket), Line Printer Daemon (”LPD”) och SMB.
En ny mdns
backend i CUPS 1.4 ger Bonjour (DNS-SD)-baserad skrivaridentifiering. I CUPS 1.6 stöds även Bonjour-printerupptäckt och delning med hjälp av Avahi.