Tisk

Honza Hubený, xhubeny@fi.muni.cz


Obsah


Úvod

Přístup k tiskárně je v UNIXových systémech řešen metodou spoolingu. Požadavky na tisk jsou ukládány do tiskové fronty, odkud si jsou vybírány obslužnými programy, které je poté posílají na fyzické zařízení. Spooling umožňuje systému aby se tvářil, že k tiskárna je vždy k dispozici. Ve skutečnosti se úlohy tisknout jedna po druhé. V UNIXových systémech se používají dva druhy obsluhy tiskáren. BSD obsluha tiskárny, System V obsluha tiskárny.

BSD Tiskárny - Lpd

Lpd (Line Printer Daemon) se stará o tisk v BSD systémech. Stejně je pojmenovaný protokol pro tisk po síti definovaný v RFC1179 (tento protokol používá standardně port 515). Lpd běží na pozadí a kontroluje, jestli se ve spool adresářích pro jednotlivé tiskárny, nenacházejí nějaké úlohy. Pokud ano, vytvoří potomka, který se o vykonání dané úlohy postará. Pro ovládání tiskárny a tiskového démona se používá několik pomocných programů:
  1. lpc(8) - ovládání tiskového démona, lze zakázat nebo povolit zařazování úloh do tiskových front, měnit pořadí úloh ve frontě...
  2. lpr(1) - pokyn k tisku dokumentu na tiskárně
  3. lpq(1) - zjištění stavu tiskové fronty
  4. lprm(1) - odebrání tiskové úlohy z fronty
  5. lptest(1) - ASCII test stránka
Konfigurace démona je uložena v souboru /etc/printcap, konfiguraci jedné tiskárny je věnován jeden řádek. Stroje s oprávněním tisknout na našem stroji jsou v souboru /etc/hosts.lpd Každá tiskárna musí mít definovaný svůj spoolovací adresář (/var/spool/lpd/tiskárna).
Příklad konfigurace lokální tiskárny:

# LOCAL djet540
lp|dj|deskjet| HP Deskjet 540:\
        :sd=/var/spool/lpd/dj:\
        :mx#0:\
        :lp=/dev/lp1:\
        :sh:
#sh \ potlačení banner page před každou úlohou 
#sf potlačení form feedu za každou úlohou
#lf=/varloglpd-errs\ log file
#pl#60 page length 
#mx - maximalní velikost tiskové úlohy
#mc maximum kopií mc nebo mx#0 bez omezení
#if=/usr/... input filter - pro postscript... 

Příklad konfigurace vzdálené tiskárny:

# REMOTE djet500
lp|dj|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :rm=nekde.jinde.cz:\
        :rp=dj5:\
        :sh:
#rp - remote printer


Většina distribucí má nějaký klikací nástroj na nastavení výše uvedeného....

LPRng

LPR next generation je rozšířená implementace tiskového subsystému BSD, která pracuje podle RFC1179. LPRng rozumí i způsobu tisku používanému v SYSTEM V. Je zde dobře vyřešena bezpečnost, podporována je autentizace přes Kerberos nebo PGP. LPRng řeší rozložení zátěžě a má podrobněji vyřešená oprávnění k tisku atd. Používá soubory s identickými názvy, ale s odlišnou implementací. >lpd - tiskový server
  • lpr, lpq, lprm, lpc, lpstat - stejné jak lpd, emulace lpstat ze System V.
  • printcap - "databáze" záznamů tiskáren a tiskových front...
  • lpd.conf - LPRng konfigurační soubor používaný jak serverem, tak klienty
  • lpd.perms - oprávění, které používá lpd při kontrole uživatelských akcí

    printcap
    Systémový printcap je uložen v adresáři specifikovaném při kompilaci jako ${sysconfdir}. Kromě toho si může každý uživatel vytvořit ve svém domovském adresáři svůj vlastní .printcap. Pokud takový existuje, používá se přednostně. Pokud neexistuje při instalaci /etc/printcap, pak je defaultně jako systémový printcap nainstalován soubor:

    # dummy printcap file
    lp:cm=Dummy Printcap Entry:
            :lp=/dev/null
            :sd=/var/spool/lpd/%P
    
    Formát printcap Formát lpd.conf
    Podobně jako pro printcap platí, že proměnné (options) záznamu mohou být nastaveny buď na logickou hodnotu nebo string:
            # set option value to 1 or ON
            ab
    :ab
    # set otion value to 0 or OFF
    ab@
    :ab
    #set option value to string
    str=name
    

    Filtry

    Filstry se řeší tisk poscriptu na neposcriptové tiskárně, záměna crlf za lf v ASCII atd. Magický filtr se pokusí analyzovat typ souboru, který chceme tisknout a až podle toho zařídí patřičné transformace. Příkladem jsou filtry APSfilter, Magic-Filter, gslp.ps. Posledně jmenovaný je dodávaný s kompletní distribucí Ghostscriptu.

    Jiná řešení


    Spolupráce lpd se Sambou

    Z Unixu tiskneme ve Windows:
    Z Unixu lze na Windows tisknout pomocí Samby. Tento balík obsahuje smbprint, který se nastaví v souboru /etc/printcap jako vstupní filtr. Lze také použít smbclient a poslat úlohu přímo na SMB tiskovou službu, bez nutnosti vyvolávat lpd.
    Příklad konfigurace tiskárny:
    
    lp|remote-smbprinter:\
        :sh:\
        :lp=/dev/null:\
        :sd=/var/spool/lpd/lp:\
        :if=/usr/local/sbin/smbprint:
    
    
    
    Z Windows tiskneme v Unixu:
    I zde probíhá tisk za pomoci Samby. Abychom mohli z Windows tisknout na Unixu musíme změnit konfigurační soubor smb.conf:
    
    [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
       lpq command = /usr/bin/lpq -P%p
       lprm command = /usr/bin/lprm -P%p %j
       lppause command = /usr/sbin/lpc hold %p %j
       lpresume command = /usr/sbin/lpc release %p %j
       queuepause command = /usr/sbin/lpc -P%p stop
       queueresume command = /usr/sbin/lpc -P%p start
    
    [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
    

    Odkazy

    www.linuxprinting.org
    Printing Usage HOWTO
    Printing HOWTO
    LPRng
    Samba
    SMB HOWTO