TISK

  1. Úvod
  2. Výběr tiskárny
  3. Připojení tiskárny
  4. Tisk v Linuxu
  5. LPRng
  6. CUPS
  7. CUPS a Samba

1. Úvod

V tomto dokumentu bych vás chtěl stručně seznámit s problematikou tisku pod UN*Xovými systémy, zejména pak pod LINUXEM, distribuce RedHat na platformě Lintel. V prvé řadě probereme problematiku výběru tiskárny, tzn. tiskárny podporované Linuxem, dále pak možnosti připojení tiskárny k počítači. Principy tisku v Linuxu (definice tiskáren, filtry, tiskové fronty, ghostscript...) představíme na dvou balících určených pro tisk - LPRng a CUPS. Nakonec se dozvíme něco o spolupráci se Sambou.

2. Výběr tiskárny

Bez problémů lze k Linuxu připojit většinu jehličkových, inkoustových či bublinkových tiskáren. Problém nastává, potřebujemeli pro Linux vybrat nějakou laserovou tiskárnu. Tento druh tiskáren disponuje svým vlastním kontrolním jazykem a to může být:
- PCL a jeho klony, plná podpora v Linuxu, potřebuje ghostscript na překlad, používáno zejména pro tiskárny HP.
- Postscript, toto je asi nejlepší volba, zejména z důvodů 100% kompatibility. Cena je však poněkud vyšší než u tiskáren používajících PCL.
- GDI, tiskárny používající GDI jsou také někdy nazývány WinPrinters. Kdo někdy slyšel o WinModemech, toho určitě při předponě Win zamrazí. A oprávněně! Tyto tiskárny používají volání z Windowsovské GDI API, která není, dle očekávání, open source a tak je Linuxu tisk na těchto tiskárnách zapovězen. Určitou možnost nabízí emulátory jako jsou např. Win4Lin či VM Ware.
- hybridy. patří sem zejména tiskárny podporující GDI i PCL. Kompatibilita je zde různá typ od typu, obecně však lze říci, že při komunikaci přes PCL dostanete horší výsledky (typicky nižší DPI) než při použití GDI pod Windows.
Více informací o tiskárnách včetně rozsáhlé databáze lze najít na www.linuxprinting.org.

3. Připojení tiskárny

V prvé řadě je nutno rozdělit tiskárny na lokální a síťové. Pro lokální tiskárny jsou k dispozici, pominuli port sériový, dvě nejběžnější varianty:
- port paralelní. Přes tento port je připojena většina tiskáren (i když se postupně poměr mění ve prospěch USB). V současné době jsou k dispozici vysoce rzchlostní paralelní porty, odpovídající standardu IEE1284, které podporují obousměrný přenos až na rychlosti 2 Mbps. Další výhodou paralelního portu je podpora ve všech i archaických kernelech.
- USB. Jedná se o modernizované rozhraní sériového portu, které dokáže pracovat na mnohem vyšší rychlosti. Umožňuje také připojit na jediný port až 127 zařízení a tak se stává při připojení více tiskáren téměř nutnou volbou. Z hlediska Linuxu je hlavní nevýhodou rozhraní USB jeho podpora v jádře. Plná podpora rozhraní USB byla zahrnuta až do kernelu 2.4.x.

3. Tisk v Linuxu

Tak konečně se dostáváme k samotnému tisku. Předtím však ještě trochu teorie. Než se soubor dostane na tiskárnu musí projít řadou programů. Požadavek na tisk (pominemeli cat file > /dev/lpx, které pošle data přímo na zařízení na kterém je připojena tiskárna. Pozn. pro USB to bude něco ve tvaru /dev/usb/lpx.) typicky vzejde z nějaké aplikace, která zavolá tiskového klienta. Klient se postará o přenost dat do spooleru (tiskové fronty) kde dále čekají až se po aplikování filtrů dostanou konečně na tiskárnu.

+------------------------------+
| +----------+       +-------+ |     +--------+     +--------+     +----------+
| | Aplikace |------>| Klient| | --> | Fronta | --> | Flitry | --> | Tiskárna |
| +----------+       +-------+ | |   +--------+ |   +--------+     +----------+
+------------------------------+ |              |
                                 |              |---- zapnutá/vypnutá fronta
                                 |--- accept/reject úlohy

4. LPRng

Tiskový spooler LPRng je modernizovaná implementace původního tiskového programu lpd. Jak LPRng tak i původní lpd systémy byly vybudovány na principu démona řádkové tiskárny, lpd (LinePrinterDaemon). LinePrinter Daemon Protocol je definován standardem RFC 1179. Je nutno rozlyšovat mezi balíkem lpd a samotným démonem lpd, dále budu mít na mysly démona, nebudeli řečeno jinak.

4.1 Instalace

Po stáhnutí distribuce následuje tradiční:
# gunzip -c LPRng-.tgz | tar xvf -
# cd LPRng-
# ./configure  [ options ]
Mezi zajímavé možnosti skriptu configure bych zařadil:
--disable-setuid doporučovana volba, žádný z programů pak neběží jako SETUID.
--enable-kerberos při použití autentizace Kerberem.
--with-userid=NAME pod jakym uživatelem démon poběží (defaultně daemon).
--with-openssl=DIR při použití ssl.
dále je možné nastavit nejrůznější cesty k programům, knihovnám, manovým stránkám ...
Pokracujeme:
# make clean all install
Proběloli vše vpořádku, máme nainstalováno.

4.2 printcap

Lpd sleduje nepřetržitě všechny přicházející požadavky o zpracování. Je proto vhodné lpd spouštět při startu systému skriptem z /etc/rc.d/init.d. Skript se ovládá tradičním start, stop, status nebo restart. Když je démon inicializován, pokouší se načíst soubor etc/printcap. Název princap je vlastně zkratka z print capatibilities a zahrnuje konfigurační data pro všechny tiskárny které jsou k počítači připojené, a to ať již lokálně nebo prostřednictvím počítačové sítě. Kdykoliv je lpd spuštěn, načte obsah tohoto konfiguračního souboru.
Soubor printcap pak může vypadat třeba takto:

lp|lp0|lexmark:\
   :sd=/var/spool/lpd/lexmark:\
   :mx#0:\
   :sh:\
   :sf:\   
   :lp=/dev/lp0:\
   :if=/var/spool/lpd/lexmark/filter:
   :filter=/usr/local/lib/filters/ifhp
lp1|hp4000:\
   :sd=/var/spool/lpd/hp:\
   :mx#0:\
   :sh:\
   :rm=erigona.lab.fi.muni.cz:\
   :rp=hp:\
   :if=/var/spool/lpd/hp/filter:
lp2|epson:\
   :sd=/var/spool/lpd/epson:\
   :mx#20:\
   :sh:\
   :if=/var/spool/lpd/epson/filter:
   :af=/var/spool/lpd/epson/acct:
   :lp=/dev/null:

V souboru jsou nyní zadefinovány tři tiskárny. První řádek je definicí jména, tzn. na tiskárnu lexmark se dá odkazovat jako na lexmark, lp0 či lp což značí defaultní tiskárnu. :sd Znamená umístění tiskové fronty,
:mx maximální velikost úlohy v kb, 0 znamená neomezeně,
:sh je potlačení hlavičky,
:sf je potlačení odstránkování,
:lp je zařízení, do kterého bude démon směřovat svůj výstup, u tiskárny lp2 je uvedeno /dev/null protože se jedná o tiskárnu zpřístupněnou přes Sambu.
:if a :of a :filter jsou různé druhy filtrů, probereme později,
:rm a :rp jsou položky určující síťovou tiskárnu nacházející se na počítači :rm pod jménem :rp.
Více o nastavení se dozvíte z manuálových stránek či LPRng_Howto. Výslednou konfiguraci si můžete otestovat programem checkpc, který zkontroluje přístupová práva k souborům a jejich umístění. Užitečné parametry jsou -V (verbose mód) a -f (fix mód ve kterém se program snaží problémy řešit).

4.3 Další programy z balíku LPRng

    +---------+    +-----+    +-----+     +--------+    +----------+
    | Program | -> | lpr | -> | lpd |  -> | Filtr | ->  | Tiskárna |
    +---------+    +-----+  * +-----+     +--------+    +----------+
                      *    *     
                   printcap      
                              

lpr - řídí zpracování a řízení tiskových dat. Když tisknete z aplikace, která pracuje v rámci operačního systému Linux, program spustí utilitu lpr, kdy specifikuje datový proud, který má být načten. Tato data mohou být v některém z několika možných formátů (PostScript, JPEG, text atd.). Lpr předá datový proud do lpd, který dále zkontroluje obsah souboru printcap. Když u požadované tiskárny je položka s filtrem, potom lpd pošle data přes tento filtr. jakmile je dokument přefiltrován, lpd jej pošle do fronty specifikované taktéž v printcap.
lpq - řídí program kontroly stavu tiskové fronty, vypisuje tiskové úlohy čekající na zpracování. Je možno zvolit specifickou frontu čí jen úlohy od určitého uživatele.
lpc - povoluje možnosti povolit nebo zablokovat řízení tiskové fronty, měnit uspořádání pořadí úloh ve frontě a načtení stavových informací o tiskárně, frontě a úloze.
lprm - jednoduchý program na odstranění úlohy nebo skupiny úloh ze specifikované fronty.

4.4 GhostScript

Bohužel, tiskárny s PostScript jsou tradičně drařší než obdobné tiskárny bez PostScriptu. Proto, aby mohl být vytvářen víc, než jen primitivní tiskový výstup s pevnou šířkou, Linux vyžaduje použití pomocných aplikací. Touto aplikací je utilita GhostScript,která konvertuje PostScript do širokého spectra ostatních fromátů, včetně formátů, kterým dokážou přirozeně porozumět i tiskárny bez podpory PostScriptu. Když použijete tiskárnu bez PostScriptu, potom tiskový proces probíhá následovně:
aplikace vzgeneruje postskriptový soubor. tento soubor je nasměrován do linuxové fronty, která pošle soubor do utility GhostScript. Tato fronta potom prochází přes výstup GS na tiskárnu.
jeden příklad výstupního filtru"

    #!/bin/sh
    /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
        -sOutputFile=- - && exit 0
    exit 2

4.5 MagicFilter

Jednou kritickou informací, kterou programové vybavení tiskového spooleru v souboru printcap nalezne, je tzv. magic filter, který má být s danou tiskárnou použit. Kouzelný filtr je program, který přijme soubor ze standardního vstupu, provede základní činnosti, které odpovídají typu souboru a výsledek přesměruje na standardní výstup. V případě textového souboru nemá kouzelný filtr nic na práci, ale obdržíli soubor ve formátu PostScript, potom by měl inicializovat utilitu GhostScript, která zajistí odpovídajicí tranformaci souboru pro potřeby tisku. V distribuci RedHat se standardně používá balík rhs=printfilters, který je zcela dostačující pro většinu typů souborů. Cestu k filtru (musí být samozřejmě dostupný) uvádíme v souboru printcap přímo v definicích jednotlivých tiskáren. Např.

:filter=/usr/local/lib/filters/ifhp

5. CUPS

Tiskový szstém CUPS (Common Unix Printing System) reprezentuje další programový balík, který pomáhá překonat omezení programu lpd. CUPS poskytuje mnohem radikálnější přístup než LPRng, neboť se zcela vzdal používání souboru printcap a začal používat nové síťové tiskové protokoly. CUPS kompletně včlenil obecné principz stzlu lpd tiskových programů, jako jsou lpr, aby usnadnil plynulý přechod z jednoho systému na druhý. Co je však nejdůležitější, CUPS poskytuje prostředky, aby se aplikace při hledání tiskového systému mohly dotazovat na schopnosti tiskárny, které CUPS odvozuje z PPD souborů. Když CUPS načte všechny potřebné parametry, potom programy jsou schopny získávat tyto informace automaticky, což značně usnadní činnost správce systému.

5.1 Instalace

# ./configure --enable-ssl
# make
# make install
Nainstaluje CUPS do defaultniho adresare s podporou ssl. Po úspěšné instalaci si příkazem
# lpinfo -v 
necháme vypsat všechny dostupné prostředky pro připojení tiskárny.
Na administraci tiskáren slouží buď přehledné webové rozhraní na http://localhost:613/admin nebo příkaz lpadmin. Typické využití lpadmina:
/usr/sbin/lpadmin -p printer -E -v device -m ppd
kde -p printer je nazev tiskárny, -v device je jedno zařízení z lpinfo a -m ppd je příslušný ppd soubor obsahující definici tiskárny. Soubory ppd jsou dodávány společně s balíkem CUPS a existují pro většinu běžných tiskáren.
Z dalších parametrů vybírám -x printer smaže definovanou tiskárnu a -d printer nastaví defaultní tiskárnu.
Dále lze pomocí lpadmina sdružovat tiskárny do tříd, nastavovat kvóty, řídit přístup k tiskárně na ůrovni uživatele.
Tiskárna přijímá/nepřijímá úlohy na základě příkazů accept/reject s parametrem tiskarnou a enable/disable zapíná či vypíná používání tiskárny.

5.2 Konfigurace

CUPS nepoužívá etc/printcap a jeho veškeré konfigurační soubory jsou uloženy v podadresářích etc/cups. Konfigurační soubory dokterých je nutno ručně zasahovat jsou:
client.conf - určuje se zde nastavení pro klienta, zejména je zde určeno kde se nachází server.
cupsd.conf - nastavení serveru.
Konfigurace je velice podobná konfiguraci serveru Apache a bohatě dokumentovaná. Přístupová práva na úrovni strojů lze přiřazovat jednotlivým třídám tiskáren. Síťový tisk lze nastavit v cupsd.conf pomocí BrowsePoll jmeno_serveru a BrowseRelay ip, což zaručuje že tiskárny ze serverů uvedených v BrowsePoll se do 30s zpřístupní na ip adresách z BrowseRelay.
Filtrování se rpovádí na základě souborů mime.types a mime.conf.

6. CUPS a Samba

Při použití balíku CUPS v Sambě je nutná verze Samby alespoň 2.2.0. Samotná konfigurace probíhá v několika krocích: 1) Stáhněte si Adobe PostScript printer drivers z http://www.adobe.com a rozzipujte do adresáře /usr/share/cups/drivers. Přejmenovat rozpakované soubory na VELKÁ PÍSMENA.
2) Příkazem cupsaddsmb vyexportujete tyto drivery z CUPS serveru.

cupsaddsmb -U root -a  nebo
cupsaddsmb -U root printer1 ... printerN 
3) Upravíte sekci printers v smb.conf. Např.:

[global]
load printers = yes
printing = cups
printcap name = cups

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
public = yes
guest ok = yes
writable = no
printable = yes
printer admin = root

[print$]
comment = Printer Drivers
path = /etc/samba/drivers
browseable = yes
guest ok = no
read only = yes
write list = root
A to je vše přátelé :-).
Marek Ján 21/11/2002/00:17