# Trochu teorie: &CUPS;, IPP, &PostScript; a Ghostscript

Tato kapitola poskytuje všeobecný teoretický popis tisku se zaměřením na &CUPS;. Pokud tyto informace nepotřebujete, můžete ji přeskočit. Věřím, že se k této kapitole vrátíte, protože někdy to chce trochu teorie pro řešení praktických problémů.

## Základy o tisku

Tisk je jedna ze složitějších kapitol v technologiích IT.

Kdysi dávno musel vývojář programu, který měl podporovat tisk, vyvinout svoje vlastní tiskové ovladače. To bylo dost složité, protože různé programy měli různé formáty souborů. Dokonce ani programy ze stejné oblasti, například textové procesory, nepodporovali své formáty navzájem. Takže neexistovalo žádné společné rozhraní pro tiskárny a proto programy podporovali pouze několik málo vybraných modelů.

Jak se objevovali nové modely, autoři programů museli psát nové ovladače. Ani výrobci nemohli zajistit, aby jejich tiskárny byly podporované každým programem, který existoval (i když jich bylo výrazně méně než dnes).

Starat se o deset aplikací a 12 tiskáren znamenalo pro správce systému, že se musí starat o 120 ovladačů. Proto se zvyšoval tlak na vývoj jednotného rozhraní mezi programy a tiskárnami.

Vznik jazyků pro popis stránky PDL, které standardním způsobem popisovali grafickou reprezentaci čar na papíru (nebo na jiném zařízení, například monitoru, sázecím stroji apod) byla událost, která vyplnila jednu z velkých mezer.

Jedním z nich byl &PostScript; od firmy Adobe. Znamenal, že se programátor aplikace mohl zaměřit na svůj program a jako výstup vygenerovat popis stránky v jazyce &PostScript;. A vývojáři tiskáren se mohli zaměřit na to, aby jejich zařízení &PostScript; podporovali.

Samozřejmě se objevili další metody popisu. Nejdůležitější protivníci pro &PostScript; byli PCL (Print Control Language od &Hewlett-Packard;), ESC/P (od firmy Epson) a GDI (Graphical Device Interface of firmy &Microsoft;.

To, že se tyto jazyky objevili, zjednodušilo život a podpořilo další rozvoj. Ale skutečnost, že stále ještě existují různé nekompatibilní a konkurující si jazyky, stále dost komplikuje život uživatelům, administrátorům, vývojářům a výrobcům.

### &PostScript; v paměti - bitmapa na papíru

&PostScript; je nejčastěji používaný v profesionálním prostředí, jako je PrePress a tiskové služby. V doménách operačních systémů &UNIX; a &Linux; je &PostScript; standardem v oblasti PDL. Skoro každý program zde generuje reprezentaci stránek v &PostScript; hned po aktivování akce Tisk. Podívejme se na jednoduchý (ručně napsaný) příklad kódu &PostScript;. Následující výpis popisuje dvě jednoduché kresby:

#### Kód &PostScript;

    %!PS
    100 100 moveto
    0 50 rlineto
    50 0 rlineto
    0 -50 rlineto
    closepath
    .7 setgray fill
    % first box over; next
    160 100 moveto
    0 60 rlineto
    45 10 rlineto
    0 -40 rlineto
    closepath
    .2 setgray fill

Tento kód sděluje imaginárnímu &PostScript; peru, aby nakreslilo daný tvar a potom ho vyplnilo různými odstíny šedé. První část se dá přeložit jako Přejdi na souřadnice (100, 100) a nakresli čáru dlouhou 50 nahoru, potom další odtud doprava, potom zase dolů a celý tvar uzavři. Teď ho vyplň 70% šedou.

#### Renderovaný &PostScript;

coded-postscript příklad renderování jako obrázek.

Samozřejmě, kód v jazyku &PostScript; může být daleko složitější než je tento jednoduchý příklad. Je to úplný programovací jazyk s různými operátory a funkcemi. Můžete dokonce napsat &PostScript; program, který bude počítat hodnotu Pí, zformátuje pevný disk, nebo vytvoří soubor. Hlavní síla jazyka &PostScript; je v oblasti popisu rozložení grafických objektů na stránce: dokáže je i zvětšit, převrátit, otočit, transformovat a rozdělit - všechno, co si jen dokážete na kuse papíru představit -- písmena v různých řezech, obrázky, tvary, odstíny, barvy, čáry, body, ...

Soubor &PostScript; je relativně abstraktní reprezentace jedné nebo více tisknutých stránek. Ideálně by měl popisovat stránky nezávisle na zařízení. &PostScript; není přímo viditelný, žije pouze na pevných discích a v RAM jako kódová reprezentace vytištěných stran.

### Rastrové obrázky na listech papíru

To, co vidíte na papíru, je skoro vždy rastrový obrázek. I když vám mozek říká, že vaše oči vidí čáru, pomocí kvalitní lupy zjistíte, že je tam hromada malých teček... (Jedním z protipříkladů jsou čáry nakreslené plotry s perem). A toto je jediná věc, kterou dnešní tiskárny dokážou: jednoduché body v různých velikostech, barvách a rozlišení tak, aby vytvořili obraz stránky z různých bodových vzorů.

Různé tiskárny vyžadují přípravu rastrových obrázků různě. Například takové inkoustové tiskárny: v závislosti na rozlišení, počtu použitých barev (ty nejkvalitnější mají až 7, lacinější používají 3), počtu dostupných trysek (některé tiskové hlavy jich mají víc jak 100), použitém algoritmu pro dithering a dalších jiných parametrech je výsledný rastrový formát a způsob přenosu velmi závislý na tom daném modelu.

Vraťme se zpět k tiskárnám pro Line Printer Daemon, které chrlili řádky ASCII textu mechanicky na dlouhý spojitý papír poskládaný cik-cak jako had, který si tahali z kartónových krabic pod stolem... To je ale rozdíl oproti dnešku!

### RIP: Od &PostScript; k rastru

Před přenosem finálního rastrového obrázku na papír je nutné ho nějak spočítat z reprezentace &PostScript;. Je to velmi náročné na výpočet. Nazývá se to Raster Imaging Process, zkráceně RIP.

Tiskárny &PostScript; se o RIP postarají samy. Jednoduše jim pošlete soubor &PostScript;. Raster Imaging Processor (též zvaný RIP) v tiskárně je zodpovědný (a specializovaný) za kvalitní vykonání interpretování popisu &PostScript; a vytvoření rastrového obrazu pro tisk na papír.

Menší zařízení &PostScript; mají hardwarový RIP ve speciálním čipu. Velké profesionální tiskárny často mají RIP implementovaný jako softwarový RIP ve speciálním rychlém počítači se systémem &UNIX;, často na Sun SPARC Solaris nebo &SGI; &IRIX;.

### Ghostscript jako softwarový RIP

Ale co se stane, pokud nemáte dost štěstí a nemáte tiskárnu pro &PostScript;?

Potřebujete před posláním tiskových dat udělat RIP. Musíte zpracovat vygenerovaný &PostScript; ještě na vašem počítači (tiskovém klientovi). Musíte vytvořit přesný rastrový formát cílové tiskárny.

Jinými slovy, protože se nemůžete spoléhat na to, že tiskárna rozumí jazyku &PostScript;, je tento problém dost komplikovaný. Potřebujete software, který se o to pokusí a vyřeší všechny problémy, které s tím souvisí.

To je přesně to, co dělá známý balík &ghostscript; pro hodně operačních systémů &Linux;, *BSD a &UNIX;, které potřebují tisknout na tiskárnách, které nepodporují &PostScript;. &ghostscript; je interpret jazyka &PostScript;, softwarový RIP, který dokáže fungovat pro více různých zařízení.

### Ovladače a filtry všeobecně

Pro vytvoření rastrových obrázků ze vstupu &PostScript; používá &ghostscript; koncept filtrů. &ghostscript; obsahuje hodně různých filtrů, některé specializované pouze pro jeden model tiskárny. Tyto specializované filtry pro &ghostscript; byly často vyvinuty bez podpory a souhlasu výrobců tiskáren. Bez přístupu k dokumentaci a specifikacím to byl bolestivý proces zpětného inženýrství při zjišťování protokolů a formátů dat.

Ne všechny &ghostscript; filtry fungují stejně dobře. Některé novější, jako například filtr stp z projektu Gimp Print, generují výborné výsledky vedoucí k fotografické kvalitě porovnatelné dokonce i s ovladači z &Microsoft; &Windows;.

V prostředí &UNIX; a &Linux; většina aplikací generuje pro tisk &PostScript;. Filtry jsou ty skutečné nástroje každého tiskového systému. Vlastně generují správné bitové mapy pro každý vstup &PostScript; pro cílové tiskárny, které &PostScript; nepodporují.

### Ovladače a filtry a backendy v CUPS

&CUPS; používá svoje vlastní filtry, i když je filtrovací systém založen na Ghostscript. Hlavní filtry pstoraster a imagetoraster jsou přímo odvozeny z kódu Ghostscript. &CUPS; je upravil a vylepšil a převedl do jasných a oddělených modulů.

Následující obrázek (vytvořený v &kivio;) poskytuje přehled filtrů a backendů v &CUPS; jak spolu souvisí. Tok dat je shora dolů. Backendy jsou speciální filtry: nepřevádějí data do jiného formátu ale posílají už připravené soubory na tiskárnu. Pro různé protokoly přenosu existují různé backendy.

Spuštěný dialog &kprinter; (náhled kresby &kivio;) Spuštěný dialog &kprinter; (náhled kresby &kivio;)

### Správa front a tiskových démonů

Kromě velké části filtrování při generování bitových map pro tisk potřebuje tiskový systém i mechanizmus pro správu front. To znamená zařazení různých úloh od různých uživatelů pro různé tiskárny a různé filtry a poslat je správně na místo určení. O to se stará tiskový démon.

Tento démon udržuje pořádek. Je zodpovědný za správu úloh: uživatelé by měli mít možnost zrušit, zastavit, restartovat, atd. svoje úlohy (ale ne úlohy jiných lidí) a podobně.

## Exkurze: Jak CUPS používá sílu &PPD;

Teď, když už víte, jak se soubor v jazyku &PostScript; převádí na rastrový obrázek, možná se ptáte: No když je tedy tak moc různých druhů výstupních zařízení: liší se v rozlišení, používají se různé papíry, existují různá dokončovací zařízení (oboustranný tisk, brožury, svazování, první strany s jinou barvou apod), jako to funguje s tím, že je &PostScript; nezávislý na zařízení?

Odpověď přišla s formátem &PostScript; Printer Description (soubory &PPD;). &PPD; popisuje všechny funkce, které závisí na zařízení a daná tiskárna je dokáže využít. Obsahuje i příkazy, které se mají použít pro volání některých funkcí zařízení. Ale &PPD; není uzavřená kniha, jsou to jednoduché textové ASCII soubory.

&PPD; vymyslela firma Adobe, aby zjednodušila výrobcům implementaci svých vlastních funkcí v &PostScript; tiskárnách, ale aby zůstal standardní způsob, jako to dělat. &PPD; jsou dobře popsané a dobře zdokumentované. Jejich specifikace je vlastně otevřený standard.

### Tiskové možnosti závislé na zařízení

Nezapomínejte, že pokročilý &PostScript; tisk byl původně vyvinut pro &Microsoft; &Windows; a Apple &Mac;. Dlouho byly tyto moderní tiskárny jednoduše nedostupné pro systémy &Linux; a &UNIX;. &CUPS; to úplně změnil. &CUPS; má velmi dobrý vztah k &PPD; a proto dokáže existující &PPD; použít naplno ve všech systémech, které &CUPS; používají.

Pomocí &PPD; mohli výrobci tiskáren přidat do svých produktů specializované funkce, jako je oboustranný tisk, třídění, vázání, dokončování apod. Tiskové ovladače načítají &PPD; stejně jako jiné konfigurační soubory. Proto se ovladač dozví o dostupných volbách a ví, jak je použít, takže je může poskytnout i pomocí &GUI; uživateli. Pomocí tohoto mechanizmu stále můžete tisknout &PostScript; stránky nezávisle na zařízení a nad ním určit dokončovací možnosti na zařízení závislé, které se přidají do souboru &PostScript; vytvořeného aplikací.

### Kde získat &PPD; pro &PostScript; tiskárny

&CUPS; dokáže použít originální &PPD; z &Windows; distribuované výrobci &PostScript; tiskáren .Obvykle jsou zadarmo a můžete si je stáhnout z každého počítače s &Windows;, který má pro váš model nainstalovaný ovladač &PostScript;, nebo z disket, které se dodávají s vaší tiskárnou. Existuje i několik míst na webu, kde je můžete získat.

### Jak se používají speciální &PPD; i pro tiskárny bez &PostScript; podpory

Už víte, že tiskárny &PostScript; dokáží používat &PPD;. Ale co s ostatními, které &PostScript; nepodporují? &CUPS; udělal další výborný trik: pomocí stejného formátu a struktury dat jako mají &PPD; v &PostScript; světě dokáže popsat dostupné možnosti tisku stejně i pro tiskárny, které &PostScript; nepodporují. Pro tyto speciální případy &CUPS; přidal několik speciálních možností (přesněji řádek, který určuje, jaký filtr se má pro další zpracování souboru &PostScript; použít).

Takže vývojáři mohou používat stejný způsob zpracování souborů Printer Description Files pro dostupné formáty pro všechny druhy tiskáren. Samozřejmě vývojáři &CUPS; se nemohou spoléhat na to, že výrobci tiskáren nepodporujících &PostScript; začnou naráz vyvíjet &PPD;. Museli začít sami a vytvořit je od začátku. V komerční verzi &CUPS; nazvané ESP PrintPro je podporovaných více jak 1000 takových tiskáren.

Mezitím vzniklo hodně &PPD; určených speciálně pro &CUPS;. Ani dnes většina z nich nepochází od výrobců tiskáren, ale od nadšenců. &CUPS; ukázal, že to jde a ostatní se přidali: tam, kde byl tisk na &Linux; a &UNIX; před dvěma roky problém, dnes existuje podpora pro velké množství tiskáren včetně 7-barevných inkoustových tiskáren podporujících fotografickou kvalitu.

### Různé způsoby jak získat &PPD; pro tiskárny bez &PostScript; podpory

&PPD; pro &CUPS; a tiskárny bez &PostScript; podpory můžete získat z různých míst na webu:

- za prvé, na www.linuxprinting.org existuje databáze, která umožňuje generovat &PPD; soubory on-line pomocí CUPS-O-Matic pro každou tiskárnu podporovanou tradičním systémem &ghostscript;. To zjednodušuje přechod na &CUPS;. Pokud vaše tiskárna funguje s &ghostscript; dobře, použijte CUPS-O-Matic pro přizpůsobení vašeho ovladače v systému &CUPS; a získáte to nejlepší z obou systémů.

- za druhé, pro &CUPS; existují &PPD; pro více jak 120 modelů tiskáren, které podporují nový univerzální ovladač stp. stp (původně znamenal Stylus Photo) teď vyvíjí projekt gimp-print. Začal ho vytvářet Mike Sweet, hlavní vývojář &CUPS;, a nyní je dostupný na gimp-print.sourceforge.net. Tento ovladač podporuje fotografickou kvalitu na mnohých moderních inkoustových tiskárnách a dokáže podporovat až 120 &CUPS; &PPD; souborů. Podporuje i tiskárny &HP; LaserJet a DeskJet, Epson Stylus a Photo Color a i některé tiskárny Canon a Lexmark.

- za třetí, existuje komerční rozšíření &CUPS; od vývojářů &CUPS;: jmenuje se ESP PrintPro a obsahuje ovladače pro více jak 2300 tiskáren. Obsahuje i vylepšené verze filtrů imagetoraster a pstoraster.

Díky &CUPS; je opravdu jednoduché, aby výrobci začali podporovat systémy &Linux; a &UNIX; ve svých modelech za nízkou cenu. Modulární rámec &CUPS; podporuje připojení každého filtru (=ovladače) s minimální námahou a &CUPS; tak umožňuje přístup ke všem svým funkcím.

Více se o &CUPS; dozvíte z &CUPS; dokumentace dostupné na http://www.cups.org/documentation.html a http://www.danka.de/printpro/faq.html. Další databáze pro všechny otázky kolem tisku na systémech &Linux; a &UNIX; je na http://www.linuxprinting.org/.

## Jak podpora &IPP; dělá z &CUPS; nejlepší volbu

### LPD musí zemřít!

Dlouhou dobu bylo hodně vývojářů nespokojených se starým LPD. Vzniklo několik nových projektů na vylepšení tisku: LPRng je asi nejznámější příklad. Dalšími jsou například PDQ, PPR, PLP, GNUlpr a RLPR. Ale žádný z nich nebyl nikdy chápán jako něco velké, většina jednoduše znovu implementuje starou specifikaci LPD s některými rozšířeními, které jsou zase navzájem nekompatibilní.

Když takovýto vývoj několika alternativ ke klasickému LPD ve stylu BSD viděl Grant Taylor, autor Linux Printing HOWTO, zakřičel ve své kampani Campaing To Abolish The Line Printer Daemon LPD musí zemřít! .

### Jak vznikl &IPP;

Na straně firem též vznikala snaha o překonání známých slabostí LPD. Vznikala jako proprietární rozšíření starého LPD a došlo to až tak daleko, že se &Hewlett-Packard; pokusil prosadit &HP; JetDirect jako nový standard pro tisk na síti. Výsledkem byla pouze nová nekompatibilita.

Nakonec se zrodila iniciativa pro definování nového standardu s podporou IETF. Printer Working Group, čili PWG, skupina výrobců hardware, software a operačních systémů, vytvořila nový Internet Printing Protocol, &IPP;. &IPP; v1.1. byl schválený IETF (Internet Engineering Task Force) jako navrhovaný standard a teď si užívá širokou podporu mezi firmami v Evropě, USA i Japonsku. Nejnovější síťové modely tiskáren mají kromě tradičního LPR/LPD nebo JetDirect zabudovanou podporu pro &IPP; .

### Proč &IPP; řeší mnoho problémů

&IPP; slibuje vyřešení množství problémů administrátorů sítí. Obvykle se to týká heterogenních sítí, kde se stráví polovina času řešením problémů s tiskem.

Dosažení vytvoření jednotné množiny funkcí pro zjišťování v tiskárnách a serverech podporujících &IPP; pro přenos souborů a nastavení ovládání úloh atd. má být &IPP; nezávislý na &OS;. Jeho zavedení se ale nestane hned, protože se stále ještě používá hodně starších tiskáren. Proto je v &IPP; podpora pro zpětnou kompatibilitu všech jeho implementací. &CUPS; dokazuje schopnosti tisku &IPP; ve všech prostředích.

Nejvýznamnější výhodou je jeho integrace s existujícím protokolem IP. Je to rozšíření ověřeného a robustního protokolu HTTP 1.1 pro speciální úkol zpracování tiskových souborů a souvisejících dat, je ho velmi jednoduché zapojit do ostatních standardů, které se vyvíjejí a používají:

- základní, digest a certifikátové ověření uživatelů při přístupu k tiskárnám.

- šifrování SSL3 a TLS pro přenos dat.

- obousměrná komunikace s klienty a tiskovými zařízeními pomocí příkazů HTTP/&IPP; `GET` a `POST`.

- integrace adresářových služeb LDAP pro udržování konzistence databáze dostupných tiskáren, jejich schopností, ceny stránek atd. společně s hesly, ACL atd.

- tisk ve stylu pull (a ne klasickým systémem push), kde se serveru nebo tiskárně pošle pouze &URL; dokumentu a on si tiskovou úlohu odtud sám stáhne a vytiskne.

### Plug'n'play tiskárny pro klienty

Viděli jste už někdy demonstraci schopností &CUPS; v síti? Určitě by vás ohromila, pokud by jste nevěděli, co máte očekávat.

Představte si, že jste administrátor LAN. Pro testování jste nainstalovali jeden počítač s &kde;/&CUPS;, spolu s několika funkčními a nastavenými tiskárnami: &PostScript;, LaserJet, InkJet a BubbleJet atd. Vaši uživatelé &kde; na tomto počítači jsou spokojení, protože mohou tisknout tak, jako nikdy předtím, Trvalo to 2 hodiny, než všechno fungovalo správně... a teď chtějí všichni ostatní v síti to samé. 2 hodiny pro každý počítač?

Chyba. Změníte jedno nastavení na původním počítači s &CUPS;, aby se stal z něho server. Nainstalujete &CUPS; na pěti jiných počítačích jako klienta. Když se vrátíte k prvnímu klientovi, jeho uživatelé si již hrají s nastavením tiskáren, které jste definovali na serveru. Magicky se tiskárny objevili v jejich dialozích pro tisk na všech pěti nových klientech &CUPS;.

Vaše uživatelé tisknou, ale nikdo z nich si nemusel nainstalovat žádný ovladač, ani tiskovou frontu.

Takže, jako ta magie funguje?

### Viděnítiskáren nenainstalovaných lokálně?

Odpověď není vůbec složitá.

Pokud je server &CUPS; na síti LAN, vysílá jména dostupných tiskáren do sítě LAN pomocí protokolu UDP a portu 631. Tento port je rezervovaný jako známý port u IANA (Internet Assigning Numbers Authority) právě pro &IPP;. Všichni klienti &CUPS; poslouchají informace poslané serverem &CUPS; na jejich port 631. A tak se dozvěděli o cestě k tiskárnám.

Pomocí &IPP;, který je opravdu šikovné rozšíření HTTP v1.1, dokáže &CUPS; adresovat všechny objekty související s tiskovým systémem pomocí URL. Tiskové úlohy se odstraňují nebo restartují, tiskárny je možné zjistit a upravit, administrátorské úlohy je možné udělat na serveru, s &IPP; a &CUPS; je všechno dostupné pomocí URL. Hodně důležitých věcí je možné udělat přes webové rozhraní &CUPS; dostupné například z okna &konqueror;.

### Tisk bez instalace ovladače

A dále klienti mohou administrovat a používat každou tiskárnu, kterou vidí stejně, jako by byla nainstalována lokálně. Samozřejmě můžete její použití omezit, takže ne každý klient může používat každou tiskárnu.

Klienti dokonce mohou tisknout bez vhodného filtru (nebo ovladače) nainstalovaného lokálně.

Jak to může fungovat? Pokud klient chce nastavit možnosti pro danou tiskárnu, pošle požadavek (nazvaný `CUPS-get-ppd`) serveru. Server oznámí klientovi všechny dostupné možnosti tak, jak je zjistil ze souboru &PPD;. Uživatel na klientovi vidí možnosti a může je použít. Potom pošle tiskový soubor, obvykle jako raw &PostScript; s přidanými možnostmi tiskárny na server pomocí protokolu &IPP;. Další zpracování, hlavně filtrování a vytvoření finálního formátu pro tiskárnu už udělá server. Server obsahuje programy (ovladače nebo filtry), aby to dokázal.

Takto mohou klienti tisknout bez potřeby lokálně instalovat ovladač.

Každá změna na serveru, jako je přidání nebo změna tiskárny je bez další konfigurace neustále známá klientům.

### Nulová administrace, vyrovnávání zátěže a přepínání při selhání

Některé další pokročilé funkce zabudované v &CUPS; podporují vyrovnávání zátěže.

Pokud nadefinujete stejné tiskové fronty na jednom nebo více serverech, klient bude posílat své úlohy na první dostupný server. Tím vzniká automatické vyvažování zátěže mezi servery. Pokud musíte jeden ze serverů ze sítě odstranit, ostatní se o úlohy budou starat dále tak, že si to uživatel vůbec nevšimne.