Tiskárny

Pavel Kolčárek, xkolcar@fi.muni.cz


Obsah


Úvod

V UNIXových systémech je tisk realizován pomocí tzv. spoolingu, neboli metodou tiskových front. Tato metoda umožňuje například souběžně tiskout dokumenty více uživatelům na jednu tiskárnu, tisk z více aplikací najednou a to vše bez nutného čekání, až se dokončí tisk jednotlivých dokumentů.

Existuje několik programů pro podporu tisku. Většinou se využívá systému pro tisk BSD, který je snadněji konfigurovatelný a je mnohem více rozšířen. Jiným typem je správa tisku u operačního systému System V. Ten je založen na démonu lpsched a má složitější konfiguraci než předchozí systém. Posledním typem je LPRng. Je to, jak se zdá, zatím nejpropracovanější systém pro správu tisku a je kompatibilní jak s BSD tiskárnami, tak se System V tiskárnami. Podrobněji se zde ale budeme zabývat pouze konfigurací BSD tiskáren.


lpd

jak to funguje

BSD tiskárny využívají pro tisk tiskového démona lpd. Ten se spustí při startu systému a zjistí si konfiguraci tiskáren podle soubouru /etc/printcap. Poté běží nepřetžitě na pozadí a kontroluje, jestli se v jednotlivých adresářích vyhrazených pro jednotlivé tiskárny nenachází soubory pro tisk. Pokud tomu tak je, hlavní lpd spouští pro každý adresář nový program lpd, který je aktivní dokud není spool adresář prázdný.

konfigurace

Všechny spoolovací adresáře pro tiskárny se standardně nacházejí v /var/spool/lpd/. Pro každou tiskárnu musí existovat vlastní podadresář pojmenovaný podle záznamu v /etc/printcap. Potom přidáme odpovídající záznamy do tohoto souboru (formát je popsán níže). Restartujeme lpd (např. pomocí příkazu lpc restart all).

programy

Další příkazy a programy pro tisk a správu tiskových front:

/etc/printcap

formát

příklad

Nastavení pro lokální tiskárnu:
# LOCAL djet500
dj|lp|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :mx#0:\
        :lp=/dev/lp0:\
        :sh:

Nastavení pro síťovou tiskárnu:
# REMOTE djet500
dj|lp|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :rm=machine.out.there.com:\
        :rp=printername:\
        :lp=/dev/null:\
        :sh:

některé proměnné v záznamech


Ghostscript

Vetšina programů pro tisk v UNIXu generuje výstup v PostScriptu, ovšem skutečná PostScriptová tiskárna je poměrně drahá. Ghostscript je program, který umožňuje zpracovat PostScriptový vstup do formy srozumitelné dané tiskárně. Umí jej také v rámci možností i modifikovat.

Typicky se Ghostscript využívá ve filtrech.


Filtry

Pokud je definován vstupní filtr, aplikuje se na každou úlohu před jejím vytištěním. Toto platí pouze pro lokální tiskárny. Používáme-li vzdálenou tiskárnu, pak se na úlohu aplikují filtry, které patří k lokální síti.

Filtry mohou být docela jednoduché (jako například překodování znakové stránky z ISO-8859-2 do WIN-1250, nebo z UNIXového formátu textového souboru do DOSového), nebo i složitější - například již zmíněná emulace PostScriptové tiskárny pomocí Ghostscriptu. Nejuniverzálnější skupinou jsou tzv. magické filtry. Magický filtr dokáže rozpoznat, jaký druh souboru mu přišel na vstup (PostScript, DVI...) a na základě toho vybere odpovídající filtr a vygeneruje vhodný výstup pro tiskárnu. Mezi nejlepší magické filtry patří třeba APSfilter nebo Magic-Filter.


LPRng

Tiskový systém LPRng je rozšířená a vylepšená implementace BSD systému pro tisk. S BSD je plně kompatibilní, navíc podporuje dynamické přesměrovávání tiskových front, rovnoměrné rozložení úloh mezi více tiskárnami, rozšířené bezpečnostní kontroly, automatické pozastavení úloh, podporu autentizace, snadnou konfiguraci, atd.

LPRng obsahuje tiskový filtr ifhp, který poskytuje podporu PostScriptových, PCL, textových aj. tiskáren na hardwarové úrovni.

Distribuce LPRng obsahuje sadu programů, které emulují tiskový systém System V. Pro uživatele, kteří vyžadují bezpečnou a autentifikovanou podporu tisku, LPRng podporuje autentifikaci přes Kerberos 5, MIT Kerberos 4, PGP a MD5.


Propojení se Sambou

tisk z Linuxu na Windowsovou tiskárnu

Hlavním předpokladem je správně nakonfigurovaná Samba. Samba obsahuje skript smbprint, který použijeme jako vstupní filtr v /etc/printcap. Ten pak může vypadat třeba takto:
lp|remote-smbprinter:\
     :lp=/dev/null:sh:\
     :sd=/var/spool/lpd/lp:\
     :if=/usr/local/sbin/smbprint:
Využít lze taky smbclient a poslat soubor k vytištění přímo k SMB tiskové službě.

tisk z Windows na Linuxovou tiskárnu

Pokud máme správně nakonfigurovánu tiskárnu v Linuxu, pouze přidáme konfiguraci tiskáren do smb.conf. Ta může vypadat například takto:
[global]
   printing = bsd
   printcap name = /etc/printcap
   load printers = yes
   log file = /var/log/samba-log.%m
   lock directory = /var/lock/samba

[printers]
   comment = All Printers
   security = server
   path = /var/spool/lpd/lp
   browseable = no
   printable = yes
   public = yes
   writable = no
   create mode = 0700

[ljet]
   security = server
   path = /var/spool/lpd/lp
   printer name = lp
   writable = yes
   public = yes
   printable = yes
   print command = lpr -r -h -P %p %s

Zdroje: