Popíšu, jak jsem si nakonfiguroval tiskový subsystém.
Volba tiskového subsystému
Zvolil jsem rozšírenou verzi Berkeley LPR software (the standards UNIX printer spooler) lprng. Vycházím z distribuce Debian Sarge.
Lokální konfigurace
Po instalaci tiskového subsystému jsem nakonfiguroval a vyzkoušel tisk lokálně. Je dobré ověřit, že tiskárna je připojená k počítači, zapojená do zapnuté zásuvky a že funguje komunikační rozhraní (paralelní port, USB).
Konfigurace je uložena v souboru /etc/lprng/printcap. Soubor má svou manuálovou stránku.
Všem tiskárnám je třeba nastavit umístění adresářové struktury fronty. Lze to řešit šablonou:
.common: :sd=/var/spool/lpd/%P :force_localhost
Volba :sd nastavuje šablonu pro umístění adresářové struktury fronty. Významu volby :force_localhost nerozumím. Manuál říká:
- Forces the clients programs (lpr, lpc, etc.) to send all print jobs and requests to the server running on the localhost entry for action. This flag effectively forces BSD LPR behaviour.
Budu moc rád, pokud zde někdo uvede vysvětlení. Já tomu rozumím tak, že mé lokální programy (lpr, lpc, ...) se budou spojovat pouze na lokální tiskový server. Smysl mi uniká.
Tiskárnu LaserJet 6L jsem zadal takto:
LaserJet: :tc=.common :lp=/dev/lp0 :filter=/usr/bin/gs -dSAFER -dBATCH -dQUIET -dNOPAUSE -q -sDEVICE=ljet4 -sOutputFile=- -sPAPERSIZE=a4 - 2> /tmp/gs.log
Slovo LaserJet definuje jméno tiskárny. Od něj se (podle nastavení volby :sd) odvozuje umístění adresářové struktury fronty a bude sloužit jako identifikátor při práci s tiskárnou.
Volbou :tc se odvolávám na společná nastavení.
Volba :lp nastavuje zařízení, na kterém bydlí tiskárna. Doporučuji prověřit spojení kabelem mezi počítačem a tiskárnou.
Volbou :filter se zadává ovladač tiskárny. Jde o příkaz, který transformuje Postskriptové zadání tisku na zadání pro konkrétní tiskárnu. Program gs je z balíčku gs-gpl. Parametry znamenají:
- dSAFER - omezení výpočtového prostředí na bezpečné operace (bez destruktivní manipulace se souborovým systémem),
- dBATCH - ukončí zpracování po přečtení posledního souboru,
- dQUIET, q - potlačí výpisy,
- dNOPAUSE - nečeká na uživatele mezi zpracováním jednotlivých stránek,
sDEVICE - typ tiskárny (seznam lze vypsat příkazem gs --help),
sOutputFile - nastavení výstuppu na stdout,
- sPAPERSIZE - nastavení velikosti papíru,
poslední - - vstup ze stdin,
- nakonci je přesměrování chybového výstuppu do stoupy.
Podobně lze nastavit ostatní tiskárny. Tiskárnu HP 690C jsem provozoval s filtrem:
:filter=/usr/bin/gs -dSAFER -dBATCH -dQUIET -dNOPAUSE -q -sDEVICE=cdj550 -sOutputFile=- -sPAPERSIZE=a4 - 2> /dev/null
Příkaz checkpc -f kontroluje konfiguraci a chystá adresář fronty.
Teď doporučuji vše odladit lokálně.
Sdílení
Nastavení přístupových práv
Přístupová práva k tisku se řídí souborem /etc/lprng/lpd.perms. Soubor má svou manuálovou stránku.
Práva jsem nastavil takto:
DEFAULT REJECT ACCEPT SERVICE=X REMOTEHOST=feanorr.kolej.mff.cuni.cz ACCEPT SERVICE=X REMOTEHOST=gabriela.husovka.chrudimsko.czf ACCEPT SERVICE=X REMOTEHOST=feanor.newtown.chrudimsko.czf ACCEPT SERVICE=X REMOTEHOST=eowin.husovka.chrudimsko.czf ACCEPT SERVICE=X REMOTEHOST=vk.husovka.chrudimsko.czf #P - print #R - spooling ACCEPT SERVICE=P,R REMOTEHOST=vk.husovka.chrudimsko.czf PRINTER=LaserJetRAW ACCEPT SERVICE=P,R NOT REMOTEHOST=vk.husovka.chrudimsko.czf NOT PRINTER=LaserJetRAW # Allow only the user on the same host who spooled job to remove it ACCEPT SERVICE=M SAMEUSER SAMEHOST # Allow users to check status ACCEPT SERVICE=C LPC=status #Q - queue information ACCEPT SERVICE=Q ACCEPT UNIXSOCKET
Vyjmenovaným počítačům umožňuji vzdálený tisk. Počítač vk smí tisknout pouze na tiskárně LaserJetRAW, ostatní na všech, jen ne na LaserJetRAW.
Zadání tisku
Nastavení tiskárny LaserJet očekává UNIXové zadání úlohy (nevím přesně, jaké to je, PS, snad PDF, možná další, ale ne přímo data pro tiskárnu; kdo ví, nechť laskavě upřesní). Pro tisk z Linuxu je to zcela vyhovující. Tisk na tiskárnu LaserJet na počítači eowin.husovka.chrudimsko.czf lze zadat například programem rlpr z balíčku rlpr:
rlpr --printer=LaserJet@eowin.husovka.chrudimsko.czf f.ps
Tisk z Windows
Překvapivě jsem se setkal s potřebou zajistit tisk z Windows. Dosavadní příprava je výborná výchozí pozice.
Formát tiskové úlohy od Windows
Windows nejsou UNIX a tak není jasné, jak mají komunikovat s tiskovým subsystémem.
Ideální by bylo nalést ve Windows ovladač, který by tiskovou úlohu transformoval do postscriptu. Dočetl jsem se, že jej lze doinstalovat z programu MS Publisher. Ten nemám k dispozici. O jiné možnosti nevím. Pak by bylo možné snadno nastavit tisk na tiskárnu LaserJet.
Během instalace síťové tiskárny ve Windows se volí ovladač. Za předpokladu volby správného ovladače (tedy ovladače pro tiskárnu, na níž se bude tisknout) budou Windows tiskovému serveru posílat tiskovou úlohu již zpracovanou ovladačem pro konkrétní model tiskárny. Tím se myslenkově dostáváme až za ovladač nastevený v tiskovém serveru volbou :filter. Myšlenkový skok se musí odrazit také v konfiguraci. Proto jsem zavedl novou tiskárnu:
LaserJetRAW: :sd=/var/spool/lpd/LaserJet :tc=.common :lp=/dev/lp0
LaserJetRAW sdílí s tiskárnou LaserJet frontu. Tiskne také na totéž zařízení. Vynechal jsem však filtr - tisková úloha byla filtrována ovladačem Windows. Ve Windows bude síťová tiskárna nakonfigurována pro tisk na LaserJetRAW.
Nyní mohu vysvětlit podivné nastavení práv uvedené výše. Práva jsem takto nastavil proto, aby UNIXáři nepřeskakovali ovladač a Windowsáři ovladač nekrmili již filtrovanou úlohou.
Konfigurace Windows
Jelikož se ve Windows moc nevyznám, dávám pouze odkaz na diskuzi. Z diskuze cituji:
V linuxu si přidáte novou LPR tiskárnu, kde zadáte IP adresu serveru a název fronty. Ve Windows musíte doinstalovat podporu pro UNIX tisk (Přidat součást systému) a při vytváření tiskárny si vytvoříte nový LPR port, kde pak zadáte tytéž údaje.
Podrobnosti k nastavení Windows jsem vyhledal v jejich nápovědě a na Internetu.
