Tisk

Ondřej Čuhel, xcuhel@fi.muni.cz


Obsah


Úvod

Tisknout na tiskarne v Linuxu lze primo pres specialni soubor portu ke kteremu je tiskarna pripojena prikazem $> cat textový_soubor.txt > /dev/lp1 (kdyz je tiskarna pripojena k paralelnimu portu lp1) Toto ale muze udelat pouze root a navic tim znemoznujete pouzit tiskarnu ostatnim programum a uzivatelum. Proto je přístup k tiskárně je metodou spoolingu, neboli tiskovych front. Požadavky na tisk jsou tedy ukládány do tiskové fronty, odkud si jsou vybírány obslužnými programy, které je posílají na fyzické zařízení.

BSD Tiskárny - Lpd

Lpd (Line Printer Daemon) se stará o tisk v BSD systémech (tento protokol pouľívá standardně port 515). Lpd běží na pozadí a kontroluje, jestli se ve spool adresářích (adresáře jednotlivých tiskáren kam se automaticky posílají soubory určené k tisku) nenacházejí nějaké úlohy. Pokud ano, vytvoří potomka, který se postará o provedení dané úlohy

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


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 lépe vyřešena bezpečnost, podporována je autentizace přes Kerberos nebo PGP. LPRng řeší rozloľení zátěže, má podrobněji vyřešená oprávnění k tisku apod. Používá soubory s identickými názvy jako lpr, 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
    • # - komentáře
    • - zpětná lomítka na konci řádku jsou povolená, ne nutná.
    • - záznamy lze rozdělit na záznamy platné pouze pro server (lpd) nebo záznamy platné pouze pro klientské programy použitím položek server, client
      #vidí pouze server server
      lp2:lp=/dev/lp:server
      #vidí pouze client
      lp2:lp=lp@pr2:client
      
    Formát lpd.conf
    Podobně jako pro printcap platí, že proměnné 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é filtry jsou filtry které se snaží analyzovat typ souboru, který chceme tisknout a až podle toho provést patřičnou transformaci. Příkladem jsou filtry APSfilter, Magic-Filter, gslp.ps.

    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