# Teoretisk bakgrund: &CUPS;, IPP, &PostScript; och Ghostscript

Det här kapitlets målsättning är att ge en del teoretisk bakgrund till utskrift i allmänhet, och till &CUPS; i synnerhet. Om du inte är i behov av detta, kanske du vill gå vidare till nästa kapitel. Troligen kommer du tillbaka till det här kapitlet vid något tillfälle i alla fall, eftersom man ibland behöver mer teori för att lösa ett praktiskt problem.

## Grundläggande information om utskrift

Utskrift är ett av de mer komplicerade delarna av IT-teknologi.

Tidigare i historien, var varje utvecklare av ett program som hade möjlighet att producera utskrivningsbar utmatning också tvungen att skriva egna utskriftsdrivrutiner. Det var ganska komplicerat, eftersom olika program har olika filformat. Till och med program med samma syfte, till exempel ordbehandlare, förstår ofta inte varandras format. Så det fanns därför inget gemensamt gränssnitt för alla skrivare, och alltså stödde programmerarna bara några få utvalda modeller.

En ny enhet som kom ut på marknaden krävde att programupphovsmännen skrev en ny drivrutin om de ville att deras program skulle stödja den. Det var också omöjligt för tillverkare att försäkra sig om att deras enhet stöddes av något välkänt program (även om det fanns mycket färre än idag).

Att behöva stödja tio program och ett dussin skrivare, betydde att en systemadministratör var tvungen att hantera 120 drivrutiner. Så utveckling av ett enhetligt gränssnitt mellan program och skrivare blev en brådskade nödvändighet.

Framkomsten av sidbeskrivningsspråk, som beskriver den grafiska representationen av bläck och toner på pappersark (eller andra utmatningsenheter, som bildskärmar, fototypsättare, etc.) på ett enhetligt sätt var en utveckling som täckte in ett stort glapp.

En sådan utveckling var &PostScript; av Adobe. Det betydde att en programutvecklare kunde koncentrera sig på att låta programmet skapa en beskrivning i &PostScript;-språket av sidan som skulle skrivas ut, medan utvecklare av utskriftsenheter kunde fokusera på att få sina enheter att förstå &PostScript;.

Med tiden kom förstås en utveckling av andra beskrivningsmetoder. De viktigaste konkurrenterna till &PostScript; var PCL (Print Control Language, från &Hewlett-Packard;), ESC/P (från Epson) och GDI (Graphical Device Interface från &Microsoft;).

Framkomsten av de här sidbeskrivningsspråken gjorde livet lättare, och möjliggjorde ytterligare utveckling för alla. Trots det gör det faktum att det fortfarande finns olika, konkurrerande sidbeskrivningsspråk som inte fungerar tillsammans, livet svårt nog för användare, administratörer, utvecklare och tillverkare.

### &PostScript; i minnet - Bitmappar på papper

&PostScript; är används mest i professionella utskriftsmiljöer som PrePress och utskriftsserviceföretag. I &UNIX;- och &Linux;-domänerna är &PostScript; den dominerande standarden som PDL. Här skapar nästan varje program en &PostScript;-beskrivning av sina sidor när du trycker på knappen Skriv ut. Låt oss ta en titt på ett enkelt exempel med (handgjord) &PostScript;-kod. Följande listning beskriver två enkla bilder:

#### &PostScript;-kod

    %!PS
    100 100 moveto
    0 50 rlineto
    50 0 rlineto
    0 -50 rlineto
    closepath
    .7 setgray fill
    % första rutan klar; nästa
    160 100 moveto
    0 60 rlineto
    45 10 rlineto
    0 -40 rlineto
    closepath
    .2 setgray fill

Det här talar om för den tänkta &PostScript;-pennan att rita en figur med en viss form, och sedan fylla den med olika gråa nyanser. Den första delen översätts till begriplig svenska som Gå till koordinaten (100,100), rita en linje med längd 50 uppåt, sedan en därifrån åt höger, sedan neråt igen och till slut förbind den här delen. Fyll nu den uppritade figuren med grå färg som har 70% svärta.

#### Uppritad &PostScript;

exemplet uppritat som en bild.

&PostScript; kan förstås vara mycket mer komplicerad än det här förenklade exemplet. Det är ett fullständigt programmeringsspråk med många olika operatorer och funktioner. Du kan till och med skriva &PostScript;-program för att beräkna värdet av pi, formatera en hårddisk eller skriva till en fil. Det huvudsakliga värdet och styrkan hos &PostScript;, finns ändå i möjligheten att beskriva grafisk formgivning av objekt på en sida: det kan också skala, spegla, förflytta, omvandla, rotera och förvränga allt du kan tänka dig på ett pappersark, som bokstäver i olika teckensnittsrepresentationer, figurer, former, skuggor, färger, linjer, punkter, raster...

En &PostScript;-fil är en representation av en eller flera sidor som ska skrivas ut, på ett relativt abstrakt sätt. I teorin är det meningen att det ska beskriva sidorna på ett enhetsoberoende sätt. &PostScript; är inte direkt synligt. Det finns bara på hårddiskar och i minnet som en kodad representation av framtida utskrifter.

### Rasterbilder på pappersark

Vad du ser på ett pappersark är nästan alltid en rasterbild. Även om din hjärna säger åt dig att dina ögon ser en linje: ta ett bra förstoringsglas så upptäcker du en mängd små punkter... (Ett exempel på motsatsen är linjer som har ritats upp av en pennplotter). Och detta är det enda som skrivenheter i dagens skrivare kan fästa på papper: enkla punkter av olika färger, storlek och upplösning för att skapa en fullständig bild av sidan som består av olika mönster av punkter.

Olika skrivare kräver att rasterbilden skapas på olika sätt. Tänk dig en bläckstråleskrivare: beroende på dess upplösning, antalet olika bläcker som används (verkligt bra använder sju olika bläcker, medan en billigare kanske använder tre), antalet tillgängliga strålar (vissa skrivarhuvuden har fler än 100!) som avger bläck samtidigt, den använda dither-algoritmen, och många andra saker, så beror det slutliga rasterformatet och överföringsordningen till skrivenheten i stor utsträckning på den exakta modellen som används.

Under den tidigaste användningen av radskrivardemonen, var skrivare maskiner som mekaniskt hamrade fram rader med ASCII-text på långa papper, som veks i sick-sack, och matades fram från en kartong som stod under bordet... Vilken skillnad mot idag!

### RIP: Från &PostScript; till raster

Innan de slutliga rasterbilderna fästs på pappersark, måste de på något sätt räknas fram från sin abstrakta &PostScript;-representation. Detta är en mycket beräkningsintensiv process (Den kallas Raster Imaging Process, eller oftare RIP).

För &PostScript;-skrivare hanteras RIP av skrivaren själv. Du skickar bara &PostScript;-filen till den. Rasterprocessorn (också kallad RIP) inne i skrivaren är ansvarig (och specialiserad) för att utföra uppgiften att tolka &PostScript;- sidbeskrivningar väl och att fästa rasterbilden på papper.

Mindre &PostScript;-enheter har en inbyggd hårdvara för RIP. Den är byggd i kisel, på en särskilt krets. Stora professionella skrivare har ofta sin RIP implementerad med programvara för RIP inne i en snabb dator som kör &UNIX;, ofta en Sun SPARC Solaris- eller en &SGI; &IRIX;-dator.

### Ghostscript är en RIP i programvara

Men vad händer om du inte är tursam nog att ha en &PostScript;-skrivare tillgänglig?

Du måste utföra RIP-innan du skickar utskriftsdata till skrivenheten. Du måste hantera den &PostScript; som skapats av programmet på värddatorn (utskriftsklienten) själv. Du måste veta exakt hur rasterformatet på målskrivarens skrivenhet ska sättas samman.

Med andra ord, eftersom du inte kan lita på att skrivaren själv förstår och tolkar &PostScript;, blir förfarandet en hel del mer komplicerat. Du behöver programvara som försöker lösa problemen som uppstår åt dig.

Det här är exakt vad det överallt förekommande &ghostscript;-paketet gör åt många &Linux;-, *BSD- och andra &UNIX;-datorer som behöver skriva ut till skrivare utan &PostScript;. &ghostscript; är en &PostScript;-tolk, en programvara för RIP, som klarar av att hantera många olika enheter.

### Drivrutiner och filter i allmänhet

För att skapa rasterbilder från &PostScript;-indata, används ett koncept med filter av &ghostscript;. Det finns många olika filter i &ghostscript;, några specialiserade för en viss skrivarmodell. &ghostscript; filter specialiserade för en viss enhet har ofta utvecklats utan medgivande eller stöd från tillverkaren i fråga. Utan tillgång till specifikationer och dokumentation, var detta en mycket krävande process för att återskapa protokoll och dataformat.

Alla &ghostscript;-filter fungerar inte lika bra för sina skrivare. Men ändå producerar några av de nyaste, som stp-filtren från utskriftsprojektet för Gimp, utmärkta resultat som ger fotografisk kvalitet jämförbar med eller till och med överlägsen deras motsvarighet bland drivrutiner för &Microsoft; &Windows;.

&PostScript; är det som de flesta program skapar för utskrift på &UNIX; och &Linux;. Filter är arbetshästarna för alla sådana utskriftssystem. I huvudsak skapar de riktiga bitmappar från vilken &PostScript;-indata som helst för skrivare utan &PostScript;.

### Drivrutiner, filter och utmatningsrutiner i CUPS

&CUPS; använder sina egna filter, även om filtersystemet är baserat på Ghostscript. I själva verket är filtren pstoraster och imagetoraster direkt härledda från Ghostscript-kod. &CUPS; har organiserat om och strömlinjeformat hela mekanismen i den här ärvda koden och organiserat den i ett fåtal klara och distinkta moduler.

Följande bild (gjord med hjälp av &kivio;) ger en överblick över filtren och utmatningsrutinerna inne i &CUPS; och hur de passar ihop. Flödet är uppifrån och ner. Utmatningsrutiner är särskilda filter: de konverterar inte data till ett annat format, utan skickar färdiga filer till skrivaren. Det finns olika utmatningsrutiner för olika överföringsprotokoll.

&kprinter; dialogrutan efter uppstart (&kivio; utkast)
&kprinter; dialogrutan efter uppstart (&kivio; utkast)

### Köhantering och utskriftsdemoner

Förutom den tunga delen av filteruppgiften att skapa en bitmapp klar för utskrift, behöver all utskriftsprogramvara använda en kömekanism. Denna är till för att rada upp olika jobb från olika användare för olika skrivare och filter och skicka dem till målen på motsvarande sätt. Utskriftsdemonen tar hand om allt det här.

Den här demonen ser till att det blir ordning på torpet: den ansvarar också för jobbstyrning: användare ska kunna avbryta, stoppa, starta om sina jobb (men inte andras jobb), och så vidare.

## Utflykt: Hur CUPS utnyttjar kraften i &PPD;:er

När du nu vet hur en &PostScript;-fil (som beskriver sidlayout på ett i stort sett enhetsoberoende sätt) förvandlas till en rasterbild, kanske du frågar: Men det finns ju olika sorters rasterutmatningsenheter, först så skiljer de i upplösning, sedan finns det olika pappersstorlekar, det fortsätter med många efterbehandlingsalternativ (dubbelsidig utskrift, broschyrer, hålslagning och häftning med olika sorters färgat papper från olika magasin, etc.). Hur passar det här in i vår modell med enhetsoberoende &PostScript;?

Svaret följer med de så kallade &PostScript; skrivarbeskrivningsfiler (&PPD;). En &PPD; beskriver alla enhetsberoende funktioner som kan användas för en viss skrivarmodell. Den innehåller också de kodade kommandon som måste användas för att anropa olika funktioner i enheten. Men &PPD;:er är inte hemliga på något sätt, de är enkla ASCII textfiler.

&PPD;:er uppfanns av Adobe för att göre det lätt för tillverkare att implementera sina egna funktioner för &PostScript;-skrivare, och på samma gång behålla ett standardiserat sätt att göra detta. &PPD;:er är bra dokumenterade och beskrivna av Adobe. Deras specifikation är en defacto öppen standard.

### Enhetsberoende utskriftsalternativ

Kom ihåg att avancerad &PostScript;-utskrift utvecklades ursprungligen bara för användning på &Microsoft; &Windows;- och Apple &Mac;-system. Under en lång tid var all funktionsrik utskrift på moderna skrivare inte tillgänglig för &Linux; och &UNIX;. &CUPS; ändrar detta i ett svep. &CUPS; är helt integrerad med &PPD;:er, och därför kan befintliga &PPD;:er användas fullt ut av alla system som hanteras av &CUPS;.

Via &PPD;:er kunde skrivartillverkare lägga till enhetsspecifika hårdvarufunktioner i sina produkter, för funktioner som dubbelsidig utskrift, häftning, håltagning, efterbehandling etc.. Skrivardrivrutinerna laddar en &PPD; precis som ytterligare en konfigurationsfil. På detta sätt får skrivardrivrutinen reda på tillgängliga enhetsalternativ och hur de anropas. Drivrutinen visar dem också i ett grafiskt gränssnitt för användaren. Genom den här mekanismen kan du fortfarande skriva ut enhetsoberoende filer med sidbeskrivningsspråket &PostScript;, och ange enhetsberoende efterbehandlingsalternativ efteråt, som läggs till i &PostScript; som skapats av programmet.

### Var skaffar man &PPD;:er för &PostScript;-skrivare

&PPD;:er användes inte rutinmässigt i &UNIX;- och &Linux;-system från början. Tillverkarna som tillhandahöll dessa &PPD;:er avsåg aldrig att de skulle användas för något annat än de ursprungligen stödda operativsystemen, &Microsoft; &Windows; och &MacOS;. Med det lysande draget att stödja och använda den befintliga &PPD;-specifikation, ger &CUPS; nu möjligheten att använda alla funktioner hos moderna skrivare för användare av &Linux; och &Linux;-liknande system. &kdeprint; gör dess användning ännu bekvämare än &CUPS;-utvecklarna någonsin drömt om.

&CUPS; kan använda &Windows; original-&PPD;:er, som distribueras av tillverkare när det gäller &PostScript;-skrivare. De kostar normalt ingenting och kan hämtas från vilken &Windows;-dator som helst med en installerad &PostScript;-drivrutin för modellen i fråga, eller från disketterna som tillhandahålls med skrivaren. Det finns också flera platser på nätet där de kan laddas ner.

### Varför särskilda &PPD;:er nu är användbara också för skrivare utan &PostScript;.

Nu vet du hur &PostScript;-skrivare kan använda &PPD;:er. Men vad gäller för skrivare utan &PostScript;? &CUPS; har gjort ett mycket bra trick: Genom att använda samma format och datastruktur som &PostScript; skrivarbeskrivningar (&PPD;:er) i &PostScript;-världen, kan de tillgängliga alternativen för utskriftsjobb beskrivas på samma sätt för skrivare utan &PostScript;. För sina egna speciella syften har &CUPS; bara lagt till några få specialalternativ (nämligen raden som anger filtret som ska användas för ytterligare behandling av &PostScript;-filen).

Så utvecklarna kunde använda samma programvara för att tolka skrivarbeskrivningsfilerna för tillgängliga alternativ för alla sorters skrivare. Utvecklarna av &CUPS; kunde förstås inte lita på att hårdvarutillverkare av skrivare utan &PostScript; plötsligt skulle utveckla &PPD;:er. De var tvungna att göra den svåra starten själva, och skriva dem från grunden. Mer än 1000 av dessa är tillgängliga genom den kommersiella versionen av &CUPS;, som heter ESP PrintPro.

Under tiden finns det en mängd &CUPS;-specifika &PPD;:er tillgängliga. Till och med nu kommer de flesta inte från skrivartillverkarna, utan från utvecklare av fri programvara. &CUPS;-människorna bevisade det, och andra följde efter: Där utskrift på &Linux; och &UNIX; fortfarande var en röra för ett eller två år sedan, stöds nu en stor mängd skrivare, inklusive sjufärgers bläckstråleskrivare som leder fram till fotografisk kvalitet på utskrifterna.

### Olika sätt att skaffa &PPD;:er för skrivare som inte stöder &PostScript;

Du kan skaffa &PPD;:er för att använda med &CUPS; och skrivare utan &PostScript; från olika ställen på Internet:

- i första hand, finns arkivet på www.linuxprinting.org, som låter dig skapa en CUPS-O-Matic-&PPD; medan du är uppkopplad, för alla skrivare som redan har stöd för traditionell utskrift med &ghostscript;. Det här hjälper dig att byta till &CUPS; med liten ansträngning, om du vill. Om din skrivare fungerade bra med den traditionella utskriften med &ghostscript;, använd CUPS-O-Matic för att koppla in din drivrutin i &CUPS;-systemet, så får du det bästa från båda världarna.

- i andra hand, finns det &CUPS; &PPD;:er för de över 120 skrivarmodeller som drivs av den nya allmänna stp-drivrutinen. Stp (betydde Stylus Photo från början) utvecklas nu av GIMP-utskriftsprojektet. Det påbörjades av Mike Sweet, den ledande &CUPS;-utvecklaren och är nu tillgängligt via gimp-print.sourceforge.net. Den här drivrutinen skriver ut med nästan fotografisk kvalitet på många moderna bläckstråleskrivare och kan anpassas för att skapa 120 &CUPS; &PPD;:er samtidigt som den kompileras. &HP; Laser- och DeskJet, Epson Stylus och Photo Color modeller samt vissa Canon och Lexmark modeller täcks.

- i tredje hand, finns den kommersiella utökningen av &CUPS; från utvecklarna av &CUPS; själva: Den kallas ESP PrintPro och levereras med mer än 2.300 skrivardrivrutiner. Det följer till och med med förbättrade imagetoraster- och pstoraster-filter.

&CUPS; gör det verkligt lätt för tillverkare att lägga till stöd för utskrift på &Linux; och &UNIX; för sina modeller till en rimlig kostnad. Den modulära grundstommen i &CUPS; möjliggör anslutning av vilket filter (=drivrutin) som helst med minimal ansträngning, för att komma åt och utnyttja hela grundstommen för utskrifts som &CUPS; skapar.

Läs mer om de underbara funktionerna hos &CUPS; i &CUPS;-dokumentationen, tillgänglig på http://www.cups.org/documentation.html och http://www.danka.de/printpro/faq.html. Dessutom finns ett allmängiltigt arkiv för allt som har med utskrift för &Linux; och &UNIX; att göra på http://www.linuxprinting.org/.

## Varför &IPP;-stöd gör &CUPS; till det bästa tillgängliga valet

### LPD måste dö!

Många utvecklare var länge djupt missnöjda med gamla goda LPD. En hel del nya projekt startades för att förbättra utskrift: LPRng är det bäst kända exemplet. Andra är PDQ, PPR, PLP, GNUlpr och RLPR, men inga av de nya programmen sågs som en vinnare, de flesta implementerar bara samma gamla LPD-specifikation med några (eller många) nya utökningar, vilket återigen gör att de inte kan fungera tillsammans.

Efter att ha sett utveckling av inte bara ett, utan flera olika möjliga alternativ till den vördnadsbjudande BSD varianten av LPD, myntade Grant Taylor, upphovsmannen till Linux Printing HOWTO, till sist uttrycket LPD måste dö! i sin Kampanj för att avskaffa radskrivardemonen.

### Hur &IPP; uppstod

Tillsammans med det ovanstående, på den industriella sidan, fanns det försök att komma förbi de välkända svagheterna med LPD. Det började med egna utökningar till enkla gamla LPD, och gick så långt som &Hewlett-Packard;s försök att etablera &HP; JetDirect som en ny standard för nätverksutskriftsprotokoll. Resultatet var ännu fler samarbetsproblem.

Till sist tog ett initiativ att definiera en ny gemensam industri- och IETF-standard form, Printer Working Group eller PWG, en lös sammanslutning av tillverkare av hårdvara, programvara och operativsystem, tog fram det nya Internet utskriftsprotokollet, &IPP;. &IPP; v1.1 har nu godkänts av IETF (Internet Engineering Task Force) som en föreslagen standard, och åtnjuter nu enhälligt stöd av industrin i Europa, U.S.A. och Japan. De flesta nya nätverksskrivare har nu inbyggt stöd för &IPP;, förutom traditionell utskrift med LPR/LPD eller JetDirect.

### Varför &IPP; löser många problem

&IPP; har förutsättningar att lösa många av problemen som nätverksadministratörer råkar ut för. Det här yrket hanterar heterogena nätverksmiljöer där mer än hälften av arbetsdagen går åt att hantera skrivarproblem.

Genom att skapa en enhetlig uppsättning med frågefunktioner för skrivare och servrar som stöder &IPP;, för att överföra filer och ställa in jobbstyrparametrar etc., så är &IPP; förutbestämd att fungera med alla operativsystem. Det kommer dock inte att tas i bruk över en natt, eftersom många äldre utskriftsenheter fortfarande kommer att användas under många år. Därför är bakåtkompatibilitet förberedd för alla &IPP;-implementationer. &CUPS; tillhandahåller duglighet för utskrift med &IPP; i alla miljöer.

Den mest uppenbara fördelen kommer att bli dess integration i den befintliga uppsättningen med robusta IP-protokoll. Eftersom den är en utökning av det beprövade och robusta HTTP 1.1 protokollet, för specialaktiviteten att hantera utskriftsfiler och relaterad data, är det också mycket lätt att koppla in andra standarder när de utvecklas och tas i bruk.

- Grundläggande, DIGEST- och certifikatautentisering för användare som försöker komma åt en utskriftsservice.

- SSL3 och TLS kryptering för att överföra data.

- Tvåvägskommunikation med skrivarenheter för klienter, med användning av HTTP/&IPP; `GET`- och `POST`-mekanismen.

- Integration av LDAP-katalogservice för att hålla en samhörande databas med tillgängliga skrivare, deras egenskaper och sidkostnader, etc., samt användarnas lösenord, ACL:er etc.

- Utskrift med Pull (i motsats till den vanliga modellen med Push), där en server eller skrivare bara behöver få reda på webbadressen för ett dokument, där den hämtas från resursen på Internet och skrivs ut.

### Koppla in och använd för skrivare av klienter

Har du någonsin sett en demonstration av &CUPS; möjligheter på nätet? Du måste ha blivit riktigt imponerad om du inte visste i förväg vad du skulle få se.

Tänk dig att du är administratör av ett lokalt nätverk. För teständamål installerade du en dator med &kde;/&CUPS; i ditt nätverk, fullständig med ett dussintal skrivare anpassade och fungerande: &PostScript;, LaserJets, InkJets och BubbleJets, och så vidare. Dina &kde;-användare på den datorn är mycket glada, de kan skriva ut som aldrig förr, och komma åt alla funktioner på varje skrivare. Det tog dig två timmar att få allt att fungera perfekt... och nu vill alla 100 andra användare på nätverket ha samma sak. Ytterligare två timmar för varje dator? Det finns inget sätt att göra det innan nyår, eller vad tror du?

Fel. Ändra bara en inställning i den ursprungliga &CUPS;-datorn för att göra den till en server. Installera &CUPS; på fem andra datorer, som klienter. Lagom tills du har hunnit återvända till din första klient, märker du att användarna redan leker med inställningarna för det dussintal skrivare som du tidigare hade definierat på servern. På något magiskt sätt har skrivarna dykt upp i alla utskrifts-dialogrutor på de fem nya &CUPS;-klientdatorerna.

Användarna skriver ut, men inte en enda drivrutin har installerats på klienterna, och inte heller har några skrivarköer definierats.

Hur fungerar den här magin, då?

### Hur kan man se skrivare som inte har installerats lokalt?

Svaret är inte alls komplicerat.

Om en &CUPS;-server finns på ett lokalt nätverk, sänder den ut namnen på alla tillgängliga skrivare till nätverket, med UDP-protokollet och port 631. Port 631 är reserverad som en välkänt port av IANA (Internet Assigning Numbers Authority) för &IPP;-syften. Alla &CUPS;-klienter lyssnar efter &CUPS;-serverinformation som skickas till deras port 631. På detta sätt känner de till de tillgängliga skrivarna, och detta är också sättet de får reda på sökvägen till skrivarna.

Genom att använda &IPP;, som egentligen är en smart utökning av HTTP v1.1, kan &CUPS; adressera alla objekt som hör ihop med utskriftssystemet via webbadresser. Utskriftsjobb som ska tas bort eller startas om, skrivare som ska tillfrågas eller ändras, administrativa uppgifter som ska utföras på servern, alla kan adresseras med olika webbadresser. Många viktiga saker kan utföras genom &CUPS; webbgränssnitt, som är tillgängligt med till exempel &konqueror;.

### Att skriva ut utan att installera en drivrutin

Och dessutom kan klienterna administrera och använda alla skrivare som de ser, precis som om de var lokalt installerade. Du kan förstås ange begränsningar för detta med styrlistor för åtkomst etc., så att inte alla klienter kan använda alla skrivare de vill.

Klienterna kan till och med skriva ut utan de nödvändiga filtren (eller drivrutinerna) installerade lokalt.

Hur fungerar det här då? Om en klient vill få reda på och välja skrivarspecifika alternativ, skickar den en begäran (som kallas `CUPS-get-ppd`) till servern. Servern talar om alla skrivarspecifika alternativ för klienten, som lästs från serversidans &PPD;. Användaren på klientsidan kan se alternativen och välja de som krävs. Han skickar sedan utskriftsfilen, oftast ofiltrerad obehandlad &PostScript;, kryddade med skrivaralternativen till utskriftsservern, med &IPP; som transportprotokoll. All ytterligare behandling, i synnerhet filtreringen för att skapa det slutgiltiga formatet för målskrivaren, görs sedan av servern. Servern har alla nödvändiga program (drivrutiner eller filter) för att göra detta.

På det här sättet kan klienten skriva ut utan att behöva installera en lokal drivrutin.

Alla ändringar på servern, som att lägga till eller ändra en skrivare, blir omedelbart kända för klienterna utan någon ytterligare anpassning.

### Ingen administration, lastbalansering och felöverbyte

Några andra avancerade funktioner som är inbyggda i &CUPS; är möjligheten att göra lastbalansering.

Om du definierar samma skrivarköer på två eller flera servrar, skickar klienterna sina jobb till den server som först svarar eller är tillgänglig. Det här innebär en automatisk lastbalansering bland servrar. Om du måste koppla ner en server för administrativt underhåll kommer de övriga bara att ta över dess uppgifter utan att användarna ens märker någon skillnad.