Vous êtes sur la page 1sur 24

filtro de impresso.

txt
FreeBSD Handbook
Anterior
Captulo 11. Impresso Prxima
11.4. Configurao Avanada de Impressora
Essa seo descreve filtros para formatos especiais de impresso de arquivos,
pginas de cabealho, impresso atravs da rede, e restringir acesso ao uso da
impressora.
11.4.1. Filtros
Atravs do LPD podemos acessar o protocolos de rede, filas, acesso de controle,
e outros aspectos da impreso, a maioria dos trabalhos reais ocorre nos filters.
Os filtros so programas que se comunicam com a impressora e manipulam as
dependncias do dispositivo e necessidades especiais. Na seo configurao
simples da impressora, ns instalamos um filtro--an texto puro extremamente
simples que deve funcionar na maioria das impressoras (seo Instalando o Filtro
de Texto ).
Entretando, se quisermos tirar vantagens de converso de formatos, relatrio de
uso da impressora, especificar uma configurao especial da impressora, entre
outras coisas, devemos compreender como funcionam os filtros. Ultimamente a
responsabidade do filtro tratar desses aspectos. E a m notcia que a maior
parte do tempo voc ter que providenciar os seus prprios filtros. A boa
notcia que muitos j eso disponveis; e se no encontrar, voc facilmente
poder escrev-los.
Tambm, o FreeBSD vem com um /usr/libexec/lpr/lpf, que funciona com a maioria
das impressoras que podem imprimir texto puro. (Ele manipula caraceteres de
retorno, backspaces e tabulaes no arquivo, e faz a contabilidade, mas isso
tudo que ele faz). Existem vrios filtros e componentes de filtro na Coleo de
Ports do FreeBSD.
Aqui est o que voc ir encontrar nessa seo:
A Seo Como os Filtros funcionam, tenta dar um panorama geral da funo de um
filtro no processo de impresso. Voc dever ler esta seo para compreender o
que acontece `` por baixo dos panos'' quando LPD utiliza os filtros. Esse
conhecimento poder ajuda-lo antecipadamente e livra-lo dos defeitos que poderam
encontrar na instalao de vrios filtros para suas impressoras.
O LPD Espera que cada impressora esteja habilidada para imprimir texto puro por
padro. um problema presente para impressoras PostScript (ou outra impressora
baseada em liguagem) a qual no pode imprimir diretamente texto puro. A seo
Acomodando Impresso em Texto Puro em Impressoras PostScript mostra voc como
proceder para resolver este problema. Voc deve ler essa seo caso voc tenha
uma impressora PostScript
PostScript o formato mais comum para a maioria dos programas. Mesmo que
algumas pessoas (incluindo eu mesmo) escreve cdigo PostScript diretamente, mas
impressoras PostScript so caras. Na seo Simulando PostScript em impressora
no PostScript informa como voc pode modificar os filtros para aceitar e
imprimir dados PostScript em uma impressora no PostScript. voc dever ler essa
seo se voc no possuir uma impressora PostScript.
A seo Filtro de Converso informa sobre o meio que voc pode automatizar a
converso especificando o formato do arquivo, tais como grficos ou dados de
typesetting , para formatos que a impressora possa endenter. Depos de lida esta
seo, voc est apto a configurar sua impressora para que os usurios possam
digitar lpr -t para imprimir dados de troff, ou lpr -d para imprimir dados TeX
DVI data, ou lpr -v para imprimir dados de imagem rasterisadas, e por a vai,
recomendamos a leitura desta seo.
A seo Filtros de sada Informa sobre o uso no comum dos filtros de sada do
LPD. A menos que voc esteja imprimindo pginas de cabealho (veja Pginas de
cabealho), voc provavelmente poder pular toda esta seo.
A Seo lpf: um filtro de texto chamado lpf, completo se considerado um filtro
de texto simples para impressoras matriciais (e impressoras laser que funcionam
como matriciais) que vem com o FreeBSD. Se voc necessita de um meio rpido para
Pgina 1

filtro de impresso.txt
fazer a impressora funcionar com texto puro, ou se voce tem uma impressora a
qual emite fumaa quando ela imprime caracteres backspace, voc deve
definitivamente considerar lpf.
11.4.1.1. Como os Filtros Funcionam
Como mencionado antes, o filtro um programa executvel inicializado pelo LPD
para manipular a parte denpendente de dispositivo para comunicao com a
impressora.
Quando o LPD precisa imprimir um arquivo no job, ele inicializa o filtro. Ele
configura a entrada padro do filtro para o arquivo a ser impresso, a sada
padro para a impressora e a sada padro de erro para o arquivo de log de erros
(especificado na opo lf no arquivo /etc/printcap, ou /dev/console por padro).
A escolha do filtro inicializado pelo LPD depende do argumento utilizado no
arquivo /etc/printcap e qual foi o argumento que o usurio especificou no
comando de linha lpr(1). Por exemplo, se o usurio digita o seguinte comando:
lpr -t, o LPD ir inicializar o filtro troff, que o argumento da opo tf para
a impressora padro. Se o usurio quiser imprimir um texto puro, ele dever
inicializar o filtro if (isso muito comum, veja em Output Filters para maiores
detalhes).
Existem tres tipos de filtros que voc pode especificar no arquivo
/etc/printcap:
O filtro de texto, erradamente chamado de filtro de entrada na documentao do
LPD, ele manipula a impresso de texto puro, pense nele como um filtro padro
para o LPD, ele espera que todas as impressoras, por padro, estejam habilitadas
a imprimir texto puro, e ela tabs, em um ambiente onde tem estatsticas do uso
da impressora, o filtro de texto tambm deve gerar a estatstica sobre o que foi
impresso, geralmente isto feito contando o nmero de linhas impressas e
comparando-as com o nmero de linhas que a impressora suporta. O filtro de texto
inicializado com a seguinte lista de argumentos:
nome-do-filtro [-c] -wlargura -lcomprimento -iindent -n login -h host
arquivo-estatistica
onde
-c
usado quando o job enviado com o comando lpr -l
largura
o valor da opo pw (largura da pgina) especificado no arquivo /etc/printcap,
O padro 132
comprimento
o valor da opo pl (comprimento da pgina), o padro 66
indent
a quantidade de identao fornecido pelo comando lpr -i, o padro 0
login
o nome da conta de usurio para pode imprimir o arquivo
host
o nome do computador para onde a impresso ser envida.
arquivo_estatistica
o nome do arquivo onde ser armazenada a estatstica da impresso, este valor
atribuido opo af.
Um filtro de converso converte um fromato especifico do arquivo em outro que a
impressora possa compreender e tranformar em pginas impresas. Por exemplo, o
formato ditroff typesetting no pode ser impresso diretamento, mas voc pode
instalar um filtro conversor para o formato que a impressora possa imprimir
corretamente. A seo Filtros Conversores mostra como faz-los. Filtros de
converso que tambm necessite de estatsticas, voc precisa habilitar a
Pgina 2

filtro de impresso.txt
estatstica na impressora. Filtros de converso so inicializados com os
seguintes argumentos:
nome-do-filtro -x largura do pixel -y altura do pixel -n login -h host
arquivo-estatistca
Onde largura do pixel o valor da opo px (valor padro 0) e altura do pixel
o valor da opo py (o valor padro 0).
O filtro de sada usado somente se no existir um filtro de texto, ou se o
cabealho das pginas estiver habilitado. Em minha experincia, filtros de sada
so raramente utilizados. A seo Filtros de Sada mostra mais detalhes. Existem
somente dois argumentos para os filtros de sada, so eles:
nome do filtro -wlargura -lcomprimento
os quais so identicos aos argumetos dos filtros de texto -w e -l.
Os filtros devem tambm sair com os seguintes status:
exit 0
Se o filtro obteve sucesso ao imprimir o arquivo.
exit 1
Se o filtro falhou ao imprimir o arquivo, mas aguarda o LPD para tentar imprimir
outra vez. LPD ir reiniciar o filtro se ele sair com esse status.
exit 2
Se o filtro falhar na impresso do arquivo e no ir aguardar o LPD para tentar
denovo. O LPD ir jogar fora o arquivo.
O filtro de texto que vem com a verso do FreeBSD, /usr/libexec/lpr/lpf, tira
vantagens dos argumentos de largura e comprimento para determinar quando enviar
um caracter de alimentao de folha (form feed) e como gerar estatsticas do uso
da impressora. Ele usa o login, host, e argumentos do arquivo para gerar as
estatsticas.
Se voc deseja comprar filtros, veja se so compatveis com o LPD. Se forem,
eles devem suportar a lista de argumentos descrita acima. Se voc planeja
escrever seu prprio filtro para uso geral, eles tambm devem suportar a lista
de argumentos e deve utilizar os cdigos descritos acima.
11.4.1.2. Acomodando Texto Puro em Impressoras PostScript
Se s voc o usurio do seu computador sua impressora suporta PostScript (ou
outra linguagem), e voc prometeu nunca enviar texto puro para a sua impressora
e nunca usar as vantagens que vrios programas que gostariam de enviar texto
puro para a sua impressora, ento voc no precisa se preocupar com esta seo.
Mas, se voc gostaria de enviar tanto PostScript e texto puro para a sua
impresssora, ento voc est convidado a incrementar a configurao da
impressora. Para fazer isso, ns temos que ter um filtro para detectar se o
texto texto puro ou PostScript. Todas as impresses em PostScript devem
iniciar com %! (para outras linguagens de impressora, veja a documentao da sua
impressora). Se estes dois primeiros caracteres aparecerem no arquivo de
impressom ns temos PostScript, e podemos passar o resto da impresso
diretamente para a impressora. Se no temos os dois primeiros caracteres no
arquivo de impresso, ento o filtro deve convert-lo em PostScript e imprimir o
resultado.
Como ns faremos isso:
Se voc possui uma impressora serial, o melhor caminho instalar o lprps. O
lprps um filtro de impressora PostScript, o qual habilita a comunicao
bi-direcional com a impressora. Ele atualiza o arquivo de status da impressora
com informao recebida da impressora, ento os usurios e administradores podem
ver exatamente o estado da impressora (tais como ``toner baixo'' ou ``paper
jam''). mas o mais importante, incluir um programa chamado de psif, o qual
detecta quando um job em texto puro e ento executa o comando textps (outro
Pgina 3

filtro de impresso.txt
pragama que vem com o lprps) para convert-lo em PostScript. Ele pode usar lprps
para enviar um job para a impressora.
O lprps parte da coleo de programas do FreeBSD (veja A Coleo de
Programas). Voc pode procurar, construir e instalar, por voc mesmo. Depois da
instalao do lprps, especifique o diretrio para o programa psif que faz parte
do lprps. Se voc instalou o lprps atravs dos ports, use o seguinte na entrada
referente a impressora serial PostScript configurada no arquivo /etc/printcap:
:if=/usr/local/libexec/psif:
Voc tambm deve especificar a opo rw; que informa ao LPD para abrir a
comunicao com a impressora no modo leitura-escrita.
Se voc tem uma impressora PostScript (e no utiliza o modo bi-direcional, como
necessita o lprps), voc pode utilizar o seguinte script como um filtro texto:
#!/bin/sh
#
# psif - Print PostScript or plain text on a PostScript printer
# Script version; NOT the version that comes with lprps
# Installed in /usr/local/libexec/psif
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then
#
# PostScript job, print it.
#
echo "$first_line" && cat && printf "\004" && exit 0
exit 2
else
#
# Plain text, convert it, then print it.
#
( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit
0
exit 2
fi
No script acima, textps um programa que instalamos separadamente para
converter texto puro em PostScript. Voc pode usar qualquer conversor de texto
para PostScript que voc desejar. A coleo de programas do FreeBSD (ports, veja
em Coleo de Programas ) inclui um programa conversor de texto para PostScript
com facilidades chamado a2ps que voc deveria considerar.
11.4.1.3. Simulando PostScript em Impressoras No PostScript
PostScript de facto padro para impresso de alta qualidade. PostScript
entretanto, um padro caro. Ficamos gratos Aladdin Enterprises que possui um
programa chamado Ghostscript que pode trabalhar com a maioria dos arquivos
PostScript e pode mostrar suas pginas em uma variedade de dispositivos,
incluindo um grande nmero de impressoras no PostScript. Com a instalao do
Ghostscript e usando filtros especiais de texto para a sua impressora, voc pode
fazer uma impressora no PostScript funcionar como uma impressora PostScript
real.
Ghostscript est nos ports do FreeBSD, se voc quiser instalar a partir de l.
Voc pode buscar, compilar e instalar muito facilmente.
Para simular PostScript, ns temos um detector de filtro de texto para verificar
se estamos imprimindo em um aquivo PostScript ou texto puro. Se for o caso de
texto puro, ento o filtro dever repassar as informaes diretamente para a
impressora, caso contrrio, ele dever utilizar o Ghostscript antes para
converter PostScript para o formato reconhecido pela a impressora.
Aqui tem um exemplo: o script a seguir um filtro texto para uma impressora da
Hewlett Packard, a Deskjet 500. Para outras impressoras, voc deve substituir o
argumento da opo -sDEVICE do comando gs (Ghostscript). Digitando gs -h voc
Pgina 4

filtro de impresso.txt
ter a lista dos dispositivos suportados pela verso instalada do Ghostscript.
#!/bin/sh
#
# ifhp - Print Ghostscript-simulated PostScript on a DeskJet 500
# Installed in /usr/local/libexec/ifhp
#
# Treat LF as CR+LF:
#
printf "\033&k2G" || exit 2
#
# Read first two characters of the file
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then
#
# It is PostScript; use Ghostscript to scan-convert and print it.
#
# Note that PostScript files are actually interpreted programs,
# and those programs are allowed to write to stdout, which will
# mes up the printed output. So, we redirect stdout to stderr
# and then make descriptor 3 go to stdout, and have Ghostscript
# write its output there. Exercise for the clever reader:
# capture the stderr output from Ghostscript and mail it back to
# the user originating the print job.
#
exec 3>&1 1>&2
/usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
-sOutputFile=/dev/fd/3 - && exit 0
else
#
# Plain text or HP/PCL, so just print it directly; print a form feed
# at the end to eject the last page.
#
echo "$first_line" && cat && printf "\033&l0H" &&
exit 0
fi
exit 2
Finalmente, voc deve notificar o LPD do filtro atravs da opo if
:if=/usr/local/libexec/ifhp:
Feito isso, voc poder digitar lpr texto.puro e lpr qualquer-coisa.ps e ambos
devero ser impressos corretamente na impressora.
11.4.1.4. Filtros Conversores
Aps ter completado a configurao descrita na seo Configurao Simples da
Impressora , a primeira coisa que voc provavelmente pensa instalar filtros
conversores para seus formatos favoritos de arquivo.
11.4.1.4.1. Porque Instalar Filtros Conversores?
Filtros conversores podem imprimir uma variedade de tipos de arquivo facilmente.
Por exemplo, suponha que tenhamos que fazer um grande trabalho com o sistema
TeX, e ns temos uma impressora PostScript. Cada vez que geramos um arquivo DVI
atravs do TeX, nos no podemos imprimi-lo diretamente, pois precisamos
convert-lo em PostScript. A sequncia de comandos ser algo semelhante a:
% dvips seaweed-analysis.dvi
% lpr seaweed-analysis.ps
Instalando um filtro para converter os aquivos DVI em PostScript, poderamos
pular um passo a cada vez que tivessemos que imprimir. O LPD poder realizar
esse passo para ns.
% lpr -d seaweed-analysis.dvi
Pgina 5

filtro de impresso.txt
Ns informamos o LPD para converter o arquivo DVI atravs da opo -d. A seo
Opes de Formatao e Converso mostra uma lista de opes de converso
Para cada opo de converso que voc deseja que sua impressora suporte, deve
instalar um Filtro Conversor e especificar o diretrio no arquivo /etc/printcap.
Um filtro conversor um filtro texto como foi definido na seo Configurao
Simples de Impressora (veja a seo Instalando um Filtro de Texto ) Exceto pelo
fato imprimir arquivos de texto puro, os filtros convertem os arquivos em um
formato que a impressora pode entender.
11.4.1.4.2. Qual o Filtro Conversor Devo Instalar?
Voc deve instalar o filtro conversor que voc espera utilizar. Se voc imprime
uma grande quantidade de dados no formato DVI, ento voc deve ter um filtro
para convert-lo. Se voc deseja imprimir sadas atravs de troff, ento
provavelmente voc ter um filtro troff.
A seguinte tabela sumariza os filtros que o LPD pode trabalhar, e suas opes
esto no arquivo /etc/printcap, e como devem ser chamados com o comando lpr:
Tipo de Arquivo Opo no /etc/printcap Opes do lpr
cifplot cf
-c
DVI
df
-d
plot
gf
-g
ditroff nf
-n
texto em FORTRAN
rf
-f
troff
tf
-f
raster vf
-v
Texto Puro
if
none, -p, or -l
No nosso exemplo, usamos o comando lpr -d que significa dizer que precisamos da
opo df dentro do arquivo /etc/printcap.
Apesar de algumas opinies contrrias, formatos como o FORTRAN e plot so
provavelmente obsoletos. No seu stio, voc pode dar novas opes de formatao
para estes ou qualquer outra opo apenas instalando novos filtros ajustados
para o seu uso. Por exemplo, suponhamos que seja necessrio imprimir diretamente
arquivos Printerleaf (arquivos vindos do do programa de pubicao Interleaf),
mas voc nunca ir imprimir arquivos de plot. Voc poder instalar um filtro
para converter esse formato utilizando a opo gf e educar os seus usurios a
utilizarem o comando lpr -g quando forem imprimir arquivos do tipo
``Printerleaf''.
11.4.1.4.3. Instalando Filtros Conversores
Uma vez que os filtros de converso so programas instalados por fora da
instalao padro do FreeBSD, eles devem, provavelmente, ficar no diretrio
/usr/local. O diretrio /usr/local/libexec a localizao mais indicada, pois
so programas especializados que somente o LPD ir usar; usurios regulares do
sistema, no devero ter necessidade de execut-los.
Para habilitar um filtro conversor, especifique o diretrio no qual ele se
encontra, na opo especfica do arquivo /etc/printcap.
No nosso exemplo iremos adicionar um filtro conversor DVI na impressora chamada
bamboo. Aqui um exemplo de um arquivo /etc/printcap, com a nova opo df para a
impressora bamboo.
#
# /etc/printcap for host rose - added df filter for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
Pgina 6

filtro de impresso.txt
O filtro DVI um script para o shell chamado de /usr/local/libexec/psdf. aqui
est o script
#!/bin/sh
#
# psdf - DVI to PostScript printer filter
# Installed in /usr/local/libexec/psdf
#
# Invoked by lpd when user runs lpr -d
#
exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"
Esse script executa dvips no modo de filtro (o argumento -f) na entrada padro,
na qual o job ser impresso. Ele inicia o filtro PostScript da impressora lprps
(veja a seo Acomodando Trabalhgos de Impresso em Texto Puro em Impressoras
PostScript ) com os argumentos do LPD passado pelo script. O comando lprps ser
usado como argumento para a contabilidade de pginas impressas.
11.4.1.4.4. Mais Exemplos de Filtros Conversores
Uma vez que no existe um conjunto de passos para a instalao de filtros
conversores, providenciaremos mais exempemplos. Use-os como guia para fazer os
seus prprios filtros. Use-os diretamente se forem apropriados.
Esse exemplo de script um filtro conversor raster (com arquivos GIF
atualmente) para as impressoras Hewlett Packard LaserJet III-Si:
#!/bin/sh
#
# hpvf - Convert GIF files into HP/PCL, then print
# Installed in /usr/local/libexec/hpvf
PATH=/usr/X11R6/bin:$PATH; export PATH
giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
&& exit 0 \
|| exit 2
Ele converte um arquivo GIF em um formato anymap portvel, convertendo em um
mapa de cinza portvel, convertento em um formato bitmap portvel, e ento
convertendo em dados compatvel com PCL.
Um exemplo de arquivo /etc/printcap com uma entrada para uma impressora usando o
filtro acima.
#
# /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
:if=/usr/local/libexec/hpif:\
:vf=/usr/local/libexec/hpvf:
O prximo script converte dados troff vindos de um sistema groff para uma
impressora PostScript chamada bamboo:
#!/bin/sh
#
# pstf - Convert groff's troff data into PS, then print.
# Installed in /usr/local/libexec/pstf
#
exec grops | /usr/local/libexec/lprps "$@"
O script acima, faz uso novamente do comando lprps para manipular a comunicao
com a impressora. Se a impressora estiver na porta paralela, ns devemos usar
este script:
#!/bin/sh
#
# pstf - Convert groff's troff data into PS, then print.
# Installed in /usr/local/libexec/pstf
#
exec grops
Aqui est a entrada que precisamos adicionar no arquivo /etc/printcap para
Pgina 7

filtro de impresso.txt
habilitar o filtro:
:tf=/usr/local/libexec/pstf:
Aqui est um filtro para texto em FORTRAN para qualquer impressora que imprima
diretamente em texto puro. Ns iremos instalar isso para a impressora chamada
teak:
#!/bin/sh
#
# hprf - FORTRAN text filter for LaserJet 3si:
# Installed in /usr/local/libexec/hprf
#
printf "\033&k2G" && fpr && printf "\033&l0H" &&
exit 0
exit 2
E ns adicionamos esta linha no arquivo /etc/printcap para a impressora teak
para habilitar esse filtro:
:rf=/usr/local/libexec/hprf:
Aqui o fim desse exemplo complexo. Ns iremos adicionar o filtro DVI para a
impressora LaserJet teak indroduzido recentemente. Primeiro, a parte mais fcil;
atualize o arquivo /etc/printcap com a localizao do filtro DVI:
:df=/usr/local/libexec/hpdf:
Agora, a parte mais difcil: fazendo o filtro. Para tanto, ns iremos necessitar
de um programa conversor de DVI para LaserJet/PCL. A coleo de programas do
FreeBSD (veja em A Coleo de Programas) possui um: dvi2xx, o nome do pacote.
Instalando esse pacote, teremos o programa necessrio, dvilj2p, o qual converte
DVI em arquivos LaserJet IIp, LaserJet III, e LaserJet 2000 compatveis.
O comando dvilj2p deixa o filtro hpdf pouco complexo uma vez que o comando
dvilj2p no pode ler da entrada padro. Ele necessita trabalhar com o nome do
arquivo. Isso ruim, o nome do arquivo deve ter no final .dvi ento usando o
/dev/fd/0 para a entrada padro seria problemtico. Ns podemos contornar o
problema linkando (simbolicamente) um nome temporrio de arquivo (um que
terminaria em .dvi) para o /dev/fd/0, forando assim o dvilj2p ler da entrada
padro.
Outro ponto importante que no podemos utilizar o diretrio /tmp para um link
temporrio. Links simblicos so propriedade do usurio e grupo bin. O filtro
executa como o usurio daemon. E o filtro no conseguir criar o link, mas
tambm ele no estar apto quando de remov-lo quando terminar uma vez que o
link pertence a um um usurio diferente.
Ao invs disso o filtro criar um link simblico no diretrio de trabalho
corrente, que o diretrio de spooling (especificado na opo sd no arquivo
/etc/printcap). Este um lugar perfeito par os filtros realizarem o seu
trabalho, especialmente porque na maioraia das vezes possui mais espao do que o
diretrio /tmp.
Aqui, finalmente, o filtro:
#!/bin/sh
#
# hpdf - Print DVI data on HP/PCL printer
# Installed in /usr/local/libexec/hpdf
PATH=/usr/local/bin:$PATH; export PATH
#
# Define a function to clean up our temporary files. These exist
# in the current directory, which will be the spooling directory
# for the printer.
#
cleanup() {
rm -f hpdf$$.dvi
}
Pgina 8

filtro de impresso.txt
#
# Define a function to handle fatal errors: print the given message
# and exit 2. Exiting with 2 tells LPD to do not try to reprint the
# job.
#
fatal() {
echo "$@" 1>&2
cleanup
exit 2
}
#
# If user removes the job, LPD will send SIGINT, so trap SIGINT
# (and a few other signals) to clean up after ourselves.
#
trap cleanup 1 2 15
#
# Make sure we are not colliding with any existing files.
#
cleanup
#
# Link the DVI input file to standard input (the file to print).
#
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0"
#
# Make LF = CR+LF
#
printf "\033&k2G" || fatal "Cannot initialize printer"
#
# Convert and print. Return value from dvilj2p does not seem to be
# reliable, so we ignore it.
#
dvilj2p -M1 -q -e- dfhp$$.dvi
#
# Clean up and exit
#
cleanup
exit 0
11.4.1.4.5. Converso Automtica: Uma Alternativa aos Filtros de Converso
Todos esses filtros de converso completam o seu ambiente de impresso, mas a um
custo de forar seu usurio a especificar (no comando de linha lpr(1)) qual ele
ir usar. Se seus usurios no esto familiarizados, ou no tiverem costume com
literatura computacional , eles acharo isso muito chato. O que ruim,
entretanto, a escolha de uma opo errada, que poder gerar muitas pginas de
lixo.
De preferncia quando for instalar um filtro de converso, voc poder tentar
deixar como padro um filtro texto, que detecte o tipo de arquivo e execute o
filtro adequado para converso. Ferramentas como file podero ajuda-lo a
resolver isto. Claro que voc ter dificuldades em diferenciar entre alguns
tipos de arquivos e claro que voc estar providenciando o filtro correto para
convert-los.
A Coleo de Programas do FreeBSD tem um filtro de texto capaz de realizar
automaticamente a converso definida chamadaapsfilter. Ele tambm pode detectar
texto puro, PostScript e DVI, executar as converses necessrias, e a seguir
imprimir o resultado.
11.4.1.5. Filtros de Sada
O sistema de spooling LPD suporta um outro tipo de filtro que ainda no foi
explorado: o filtro de sada. Um filtro de sada tem apenas o objetivo de
imprimir texto puro, como outros filtros de texto, mas com muitas
Pgina 9

filtro de impresso.txt
simplificaes. Se voc estiver utilizando um filtro de sada mas no um filtro
texto, ento:
O LPD inicia o filtro de sada apenas uma unica vez para o trabalho de impresso
ao invez de uma vez para cada arquivo no trabalho de impresso.
O sistema LPD no faz nenhuma previso para identificar o inccio ou o final de
arquivos dentro do trabalho de impresso para o filtro de sada.
O sistema LPD no repassa o nome do usurio ou a mquina para o filtro, ento
no conseque fazer a contabilizao do uso. de fato, ele s utiliza dois
argumentos:
nome do filtro -wlargura -lcomprimento
Onde largura retirado da opo pw e o comprimento retirado da opo pl
referente a impressora utilizada
No fique seduzido pela facilidade do uso dos filtros de sada. Se voc gostaria
de ter cada arquivo do trabalho de impresso iniciando em diferente pginas um
filtro de sada no iria funcionar . Use um filtro de texto (tambm conhecido
como filtro de entrada); veja a seo Instalando um Filtro Texto. Alm disso, um
filtro de sada atualmente mais complexo porque ele examina um stream de bytes
iniciamente enviado para ele com um flag especial e deve ser enviado sinais para
ele prrio em benefcio do sistema LPD.
Entretanto, um filtro de sada necessario se voc quizer cabealho de p e
precisa enviar seguncias de caracteres escape ou outro conjunto de caracteres
inicializao para abilitar o cabealho das pginas. (mas isso tambm ftil se
voc deseja carregar cabealhos de pgina para a contabilidade do usurio uma
vez que o sistema LPD no fornece nenhuma informao do usurio ou do computador
para o filtro de sada).
Para uma nica impressora, o sistema LPD permite tanto filtros de sada e de
texto ou de outro tipo. Na maioria dos casos o sistema LPD ir iniciar o filtro
de sada para imprimir a pgina de cabealho ( veja a seo Pginas de
Cabealho) somente. O sistema LPD ento agurada o filtro de sada terminar pelo
envio de uma sequncia de dois bytes para o filtro: os caracterres ASCII 031
seguido pelo 001. Quando ofiltro ve esses dois bytes (031, 001), ele deve parar
com um envio do sinal SIGSTOP para si mesmo. Quando o sistema LPD termina a
execuo de outros filtros, ele ir reinicializar o filtro de sada pelo envio
do sinal SIGCONT para ele.
Se existir um filtro de sada mas no um filtro texto e o LPD estiver
trabalhando em um trabalho de impresso de texto puro, o LPD utiliza o filtro de
sada para realizar a tarefa de impresso. Como dito antes, o filtro de sada
ir imprimir cada arquivo do trabalho de impresso na sequncia sem o intervalo
de alimentao de folha ou outro avano de papel, e isso voc provavelmente no
deseja. Na maioria dos casos voc necessitara de um filtro de texto.
O programa lpf, o qual nos introduzimos recentemente como um filtro texto, pode
tambm ser executado como um filtro de sada. Se voc necessitar de um filtro de
sada rpido e sem muita qualidade, mas no quer ter o trabalho de escrever um
detector de byte e um cdigo para enviar sinais, tente o lpf. Voc tambm pode
colocar o lpf dentro de um script em shell para manipular os cdigos de
inicializao que a impressora pode necessitar.
11.4.1.6. lpf: Um Filtro de Texto
O programa /usr/libexec/lpr/lpf que vem com a distribuio do FreeBSD um
filtro de texto ( filtro de entrada )e pode identar a sada ( o trabalho de
impresso enviado com o comando lpr -i), permitindo que caracteres literais
possam ser enviados (trabalho de impresso enviado com o comando lpr -l),
ajustar a posio de impresso para caracteres de retorno (backspace) e
tabulaes no trabalho de imresso, e fazer a contabilidade das pginas
impressas. Tambm pode agir como um filtro de sada.
O comando lpf adequado para a maioria dos ambientes de impresso. E ainda que
no possua capacidade para enviar sequncias de inicializao para as
Pgina 10

filtro de impresso.txt
impressoras, isto fcil ser escrito em script de shell para fazer as
inicializaes necessrias e ento executar o lpf.
Para que o lpf faa a estatistica corretamente, ele necessita dos valores
preencidos corretamente nas opes pw e pl no arquivo /etc/printcap. Ele utiliza
esses valores para determinar como o texto poder caber na pgina que quantas
pginas estaro no trabalho de impresso do usurio. Para mais informaes, veja
a seo Estatisticas do Uso da Impressora .
11.4.2. Pginas de Cabealhos
Se voc tiver muitos usurios, todos eles usuando vrias impressoras, voc
provavelmente dever considerar as pginas de cabealho como um mal necessrio.
Pginas de Cabealho, tambm conhecida como banner ou burst pages identifica de
quem o trabalho de impresso depois dele ser impresso. Ela geralmente
impressa grande, com letras em negrito, e as vezes com bordas decorativas, para
que em um pilha de impresso eles possam ser identificados e entregues ao
usurio correto. As pginas de cabealho so impressas uma por trabalho de
impresso e no uma por arquivo impresso.
O sistema LPD pode providenciar automaticamente pginas de cabealho para suas
sadas se sua impressora puder imprimir texto puro. Se voc tiver uma impressora
PostScript, voc necessitara de um programa externo para gerar essas pginas;
veja a seo Pginas de Cabealho em Impressoras PostScript .
11.4.2.1. Habilitando Pginas de Cabealho
Na seo Configurao Simples da Impressora , nos desligamos a impresso das
pginas de cabealho, atravs da opo sh ( que significa ``suppres header'') no
arquivo /etc/printcap. Para habilitar a impresso, basta a remoo da opo sh.
Isso parece to fcil, correto?
E voc esta certo. Voc deve ter providenciado um filtro de sada para enviar os
dados de inicializao para a impressora. Aqui um est um exemplo de filtro de
sada para uma impressora Hewlett Packard PCL-compatvel:
#!/bin/sh
#
# hpof - Output filter for Hewlett Packard PCL-compatible printers
# Installed in /usr/local/libexec/hpof
printf "\033&k2G" || exit 2
exec /usr/libexec/lpr/lpf
especificando odiretrio para o filtro de sada na opo of. veja na seo
Filtros de Sada para maiores informaes.
Aqui um exemplo do arquivo /etc/printcap para a impressora teak que foi
introduzida recentemente; nos habilitamos a pgina de cabealho e adicionamos o
filtro de sada descrito acima:
#
# /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
:if=/usr/local/libexec/hpif:\
:vf=/usr/local/libexec/hpvf:\
:of=/usr/local/libexec/hpof:
Agora, quando os usurios imprimirem os seus trabalhos para a impressora teak,
eles tero uma pgina de cabealho para cada job impresso. Se os usurios querem
perder tempo procurando os seus trabalhos de impressora, eles podem suprimir
essas pginas com o comando lpr -h; veja a seo Opoes de Pginas de Cabealho
para outras opes veja lpr(1) .
Nota: O LPD imprime o caracter de alimentao de pgina (form feed) logo apos a
pgina de cabealho. Se sua impressora utiliza um caracter diferente ou
sequencia de caracteres para ejetar uma pgina, especifique-o na opo ff no
arquivo /etc/printcap.
Pgina 11

filtro de impresso.txt
11.4.2.2. Controlando Pginas de Cabealho
Uma vez habilidada a pgina de cabealho, o LPD ir produzir um longo cabealho,
uma pgina completa com letras grandes identificando o usurio, mquina, e o
trabalho de impresso. Aqui est um exemplo (kelly imprimiu um trabalho de
impressoi entitulado de outline a partir da mquina rose):
k
k
k
k
k
k k
k k
kk k
k
k
k
k

oooo
o
o
o
o

o
o
o
o

eeee
e
e
eeeeee
e
e
e
eeee

u
u
u
u
u

u
u
u
u
uu
uuu u

oooo

r rrr
rr
r
r
r
r
r

ll
l
l
l
l
l
l
l
lll

ll
l
l
l
l
l
l
l
lll

t
t
ttttt
t
t
t
t t
tt

oooo

sss

o
o
o
o

o
o
o
o
oooo

s
s
s

s
sss

ll
l
l
l
l
l
l
l
lll

y
y
y
y
y

y
y
y
y
yy
yyy y
y
y
y
yyyy

i
ii
i
i
i
i
iii

n nnn
nn
n
n
n
n
n
n
n
n
n

eeee
e
e
eeeeee
e
e
e
eeee

eeee
e
e
eeeeee
e
e
e
eeee

Job: outline
Date: Sun Sep 17 11:04:58 1995
O LPD adiciona uma alimentao de pgina logo apos o texto ser impresso, ento
inicia em uma nova pgina o trabalho de impresso ( a menos que se tenha
definido a opo sf (suprimir a alimentao de pgina) na impressora destinada
no arquivo /etc/printcap).
Se voc preferir, o LPD pode fazer uma pgina pequena; especificando a opo sb
(short banner) no arquivo /etc/printcap. A pgina de cabealho ir parecer como
esta:
rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995
Tambm poe padro, o LPD imprime a pgina de cabealho primeiro, e ento o
trabalho de impresso. Para reverter isso, especifique a opo hl (header last)
no arquivo /etc/printcap.
Pgina 12

filtro de impresso.txt
11.4.2.3. Estatsticas para Pginas de Cabealho
Usando o LPD para imprimir as pginas de cabealho, leva-nos a um paradigma, nos
devemos contar as pginas de cabealho para fazer as estatstica, ou devemos
deix-la de fora.
Por que?
Por que o filtro de sada somente um programa externo que ter controle quando
a pgina de cabealho for impressa e no pode diferenciar isto do total para que
possa fazer a estatstica corretamente, e isso no fornecido por qualquer
usurio ou mquina ou qualquer arquivo de estatstica, ento ele no tem ideia
para quem contabilizar o uso da impressora. E tambm no justo ``adcionar uma
pgina'' para o filtro texto ou qualquer outro filtro de converso ( os quais
tm informaes sobre os usurios e mquinas) uma vez que os usurios podem
suprimir as pginas de cabealho com o comando lpr -h. eles ento seriam
atribuidos os custros ( estatsticas ) de pginas de cabealho que efetivamente
no imprimiram. Basicamente, o lpr -h ir ser uma opo preferiad no ambito dos
usurios, mas voc no dever incentivar o seu uso.
Isso no o sufuciente para cada filtro gerar sua prpriapgina de cabealho (
entretanto estar apto a contabiliza-las). Se os usurios quizerem a opo de
supresso de pginas de cabealho com o comando lpr -h, eles ainda teram e sero
contabilizado uma vez que o LPD no tem conhecimento da -h para nenhum filtro.
Ento, qual a sua opo?
Voc pode:
Aceitando o paradigma do LPD e liberando as pginas de cabealho.
Instalando alternativas ao LPD, tais como: LPRng. Seo Alternativas Ao Spooler
Padro diz mais sobre os programas que podem substituir o LPD.
Escrevendo um filtro de sada inteligente. Normalmente um filtro de sada no
precisa de muita coisa a alm de inicializar a impressora ou fazer algumas
converses de caracteres. Ele der que se adaptar para pginas de cabealho ou
para trabalhos de impresso em texto puro ( quando ele no for um filtro de
texto (entrada)). Mas, se existir um filtro de texto para trabalhos de impresso
em texto puro, ento LPD ir iniciar o filtro de sada somente para a pgina de
cabealho. E o filtro de sada poder alanisar a pgina de cabealho que o LPD
gerou para determinar qual usurio e mquina para poder contabiliza-la. O nico
problema com esse mtodo que o filtro de sada continua sem ter conhecimento
do arquivo de estatstica ( isso no passado pela opo af), mas se voc tem o
conhecimento do arquivo de estatstica, voce poder coloca-lo direto no cdigo
do filtro de sada. Para facilitar o passo de anlise, use a opo sh (pgina
curta) do arquivo /etc/printcap. Ento depois de tudo feito, os usurios iro
apreciar o quo generoso o administrador do sistema , liberando das
estatsticas de utilizao a paina de cabealho.
11.4.2.4. Pginas de Cabealho em Impressoras PostScript
Como descrito acima, o LPD pode gerar as pginas de cabealho em texto puro,
funcional para a maioria das impressoras. Claro que as impressoras PostScript
no podem imprimir diretamente texto puro, ento a vantagem do LPD poder
imprimir as pginas de cabealho torna-se imprestvel--.
Uma maneira obvia de ter pginas de cabealho gerar atravs de cada filtro de
converso e de filtros de texto, as pginas de cabealho. Os filtros devem usar
os argumentos de nome de usurio e da mquina, para gerar uma pgina de
cabealhjo otimizada. a desvantagem deste mtodo que o usurio sempre tera a
pgina de cabealho mesmo que ele utilize o comando lpr -h para imprimir seus
trabalhos de impresses.
Iremos explorar este mtodo. O script abaixo manipula trs argumentos ( nome do
usurio (login), nome da mquina, e o nome do trabalho de impresso) e faz uma
pgina simples de cabealho em PostScript:
#!/bin/sh
#
Pgina 13

#
#
#

filtro de impresso.txt
make-ps-header - make a PostScript header page on stdout
Installed in /usr/local/libexec/make-ps-header

#
# These are PostScript units (72 to the inch).
# whatever size paper you are using:
#
page_width=612
page_height=792
border=72

Modify for A4 or

#
# Check arguments
#
if [ $# -ne 3 ]; then
echo "Usage: `basename $0` <user> <host> <job>" 1>&2
exit 1
fi
#
# Save these, mostly for readability in the PostScript, below.
#
user=$1
host=$2
job=$3
date=`date`
#
# Send the PostScript code to stdout.
#
exec cat <<EOF
%!PS
%
% Make sure we do not interfere with user's job that will follow
%
save
%
% Make a thick, unpleasant border around the edge of the paper.
%
$border $border moveto
$page_width $border 2 mul sub 0 rlineto
0 $page_height $border 2 mul sub rlineto
currentscreen 3 -1 roll pop 100 3 1 roll setscreen
$border 2 mul $page_width sub 0 rlineto closepath
0.8 setgray 10 setlinewidth stroke 0 setgray
%
% Display user's login name, nice and large and prominent
%
/Helvetica-Bold findfont 64 scalefont setfont
$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
($user) show
%
% Now show the boring particulars
%
/Helvetica findfont 14 scalefont setfont
/y 200 def
[ (Job:) (Host:) (Date:) ] {
200 y moveto show /y y 18 sub def }
forall
/Helvetica-Bold findfont 14 scalefont setfont
/y 200 def
[ ($job) ($host) ($date) ] {
Pgina 14

filtro de impresso.txt
270 y moveto show /y y 18 sub def
} forall
%
% That is it
%
restore
showpage
EOF
Agora, cada chamada aos filtros de converso e aos filtros de texto, ir ser
gerada uma pgina de cabealho e ento ser impresso o trabalho de impresso do
usurio. Segue um exemplo de um filtro de converso de DVI, mostrado
anteriormente neste documento, modificado para poder imprimir a pgina de
cabealho.
#!/bin/sh
#
# psdf - DVI to PostScript printer filter
# Installed in /usr/local/libexec/psdf
#
# Invoked by lpd when user runs lpr -d
#
orig_args="$@"
fail() {
echo "$@" 1>&2
exit 2
}
while getopts "x:y:n:h:" option; do
case $option in
x|y) ;; # Ignore
n)
login=$OPTARG ;;
h)
host=$OPTARG ;;
*)
echo "LPD started `basename $0` wrong." 1>&2
exit 2
;;
esac
done
[ "$login" ] || fail "No login name"
[ "$host" ] || fail "No host name"
( /usr/local/libexec/make-ps-header $login $host "DVI File"
/usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args
Observe como o filtro faz a anlise da lista de argumentos para que possa
determinar os nomes de mquina e de usurio. A anlise para os outros filtros de
converso identica. O filtro de texto possui uma sutil diferena no conjunte
de argumentos passados ( veja a seo Como os filtros funcionam ).
Como foi mencionado, o esquema acima muito simples, desabilita a opo
``supresso da pgina de cabealho'' ( a opo -h ) para o comando lpr. Se os
usurios quizerem econimizar rvores ( ou dinheiro, caso seja cobrada a
impresso da pginas de cabealho). ele no poderam faze-lo, uma vez que os
prrpios filtros se encarregam deste servio.
Para permitir os usurios desligarem as pginas de cabealho, voc dever usar o
truque mostrado na seo Contabilizando as Pginas de Cabealho : para escrever
um filtro de sada que analise a pgina de cabealho gerada pelo LPD e produzir
uma verso em PostScript. Se o usurio enviar o trabalho de impresso com o
comando lpr -h, ento o LPD no ir gerar a pgina de cabealho, e nada ira para
o seu filtro de sada. Caso contrario, seu filtro de sada ira ler o texto que o
LPD gerou e ir enviar a pgina de cabealho apropriada em cdigo PostScript.
Se voce tiver uma impressora PostScript na porta serial, voc pode utilizar o
comando lprps, o qual vem com um filtro da sada, psof, Note que o psof no
contabiliza as pginas de cabealho
Pgina 15

filtro de impresso.txt
11.4.3. Impresso em Rede
O FreeBSD suporta impresso via rede; enviando trabalhos de impresso para
impressoras remotas. Impresso em rede geralmente nos conduz a duas coisas
diferentes:
Acessando a impressora conectada a uma mquina remota. Voc instala a impressora
normalmente como se fosse uma impressora serial ou paralela na mquina. Ento,
voc configura o LPD para habilitar o acesso a impressora de outras mquinas na
rede. Veja a seo Impressoras Instaladas em Mquinas Remotas mostra como
faze-lo.
Acessando a impressora conectada diretamente a rede. A impressora possui uma
interface de rede, alm da porta paralela ou serial. Como a impressora que
iremos utilizar a seguir:
Ela deve entender o protocolo LPD e possa manipular filas de trabalhos de
impresso de uma mquina remota. Nesse caso, Ela age como uma mquina remota
comum rodando LPD. Seguindo os mesmos passos na seo Instalando Impressoras em
Mquinas Remotas para configurar a impressora.
Ela deve suportar conexo de rede do tipo stream. Nesse caso, voc conecta a
impressora em uma mquina na rede que ficar responsvel pelo spooling dos
trabalhos de impresso e envia-los para a impressora. Na seo Impressoras com
Interfaces de Rede do Tipo Data Stream D sugeses de como instalar essas
impressoras.
11.4.3.1. Impressoras Intaladas em um Computador Remoto
O sistema LPD foi construido com suporte para enviar trabalhos de impresso para
outras mquinas na rede, rodando LPD ( ou um algo compatvel com ele ). Essa
caracteistica possibilita a instalao de impressoraqs em uma mquina que possa
ser acessada por outras. Isso tambm funciona para impressora que possuem
intefaces de rede capaz de compreender o protocolo LPD.
Para habilitar essa impressora remota, primeiro devemos instalar a impressora em
uma mquina, que ser o servidor de Impresso, usando os passos descritos na
seo Simples Configurao de Impressora . Para configurao avanada veja a
seo Configurao Avanada de Impressora . Tenha certeza que o teste de
imoresso funcionou corretamente para esta impressora. Tenha certeza que o
computador local tenha autorizao para acessar a mquina remota e o servio do
LPD, veja a seo Restringindo os Trabalhos de Impresso para Mquinas Remotas
).
Se estiver utilizando uma impressora com interface de rede compatvel com LPD,
ento servidor de imporesso ser a propria impressora, e o nome da impressora
ser o nome que voc configurou para a impressora. Veja a documentao que
acompanha a sua impressora e/ou a interface de rede dela.
Dica: Se voc esta utulizando uma Hewlett Packard Laserjet ento o nome da
impressora far automaticamente a converso do LF para o CRLF para voc, e ento
voc no necessitar do filtro de texto hpif para isso.
Ento, em outros servidores que voc quizer ter acesso, dever adicionar uma
entrada no arquivo /etc/printcap como segue:
Nomeia a entrada como quiser. Por simplicidade, voc usar o mesmo nome/apelido
que estiver no servidor da impressra.
Deixe a opo lp em branco, faa isso explicitamente (:lp=:).
Crie um diretrio de spool e especifique a sua localizao com a opo sd. O LPD
ir armazenar os trabalhos de impresso l antes de entregar ao servidor de
impresso
Coloque o nome do servidor da impressora na opo rm.
Coloque o nome a impressora que est no servidor de impresso no opo rp
Pgina 16

filtro de impresso.txt
Feito isso, voc no precisar de filtros de entrada, dimesionamento de pginas,
ou outra coisa qualquer no arquivo /etc/printcap.
Aqui est um exemplo. O servidor rose possui duas imopressoras, bamboo e rattan.
Nos iremos permitir que os usurios da mquina orchid possa imprimir nessas
impressoras. Aqui est o arquivo /etc/printcap para a mquina orchid (veja a
seo anteriro Habilitando Pginas de Cabealho ). Ele j possui a entrada para
a impressora teak; nos iremos adicionar a entrada para as duas impressoras no
servidor rose:
#
#
#

/etc/printcap for host orchid - added (remote) printers on rose

#
# teak is local; it is connected directly to orchid:
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
:if=/usr/local/libexec/ifhp:\
:vf=/usr/local/libexec/vfhp:\
:of=/usr/local/libexec/ofhp:
#
# rattan is connected to rose; send jobs for rattan to rose:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:
#
# bamboo is connected to rose as well:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:
Ento, nos apenas criamos o diretrio de spool na mquina orchid:
# mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo
Agora, os usurios na mquina orchid podem imprimir para as impressoras rattan e
bamboo. Se, por exemplo, o usurio na mquina orchid digitar:
% lpr -P bamboo -d sushi-review.dvi
O siatema LPD na mquina orchid ir copiar o trabalho de impresso do diretrio
de spool /var/spool/lpd/bamboo e ir notar que uma impresso em DVI. To logo
o servidor rose tiver espao no diretrio de spool da impressora bamboo os dois
sistemas LPDs iro transferir o arquivo para o servidor rose. O arquivo ficar
aguardando na fila do servidor rose at ser finalmente impresso. Ele ento ir
converter do formato DVI para PostScript deste que a impressora bamboo consiga
interpretar PostScript
11.4.3.2. Impressoras com Interfaces de Rede Data Stream
Geralmente, quando voc compra uma interface de rede para a sua impressora, voc
pode ter duas verses: uma que emula um spooler ( a verso mais cara), ou uma
que permita que voc envie dados para ela como se voc estivesse utilizando uma
porta paralela ou serial ( a verso mais barata). Essa seo mostra como voc
ir utilizar essa verso mais barata. Para a verso mais cara, veja a seo
anterior Impressoras Instaladas em uma Mquina Remota .
O formato do arquivo /etc/printcap permite que voc especifique qual a
interface, seria ou paralela, a ser usada e ( se voc estiver usando uma
interface serial), qual a taxa de transferencia ( baud rate), Se est usando
controle de fluxo, expanso de tabulao, converso de novas linhas, e mais. Mas
existe um meio de especificar a conexo com a impressora que e ouvir sobre
TCP/IP ou outra porta da rede.
Para enviar dados para uma impressora na rede, voc dever desenvolver um
programa de comunicao que possa ser chamado pelo filtro de texto e/ou de
Pgina 17

filtro de impresso.txt
converso. Aqui est um exemplo: O script netprint pega todos os dados da
entrada padro e envia para a impressora de rede. Nos especificamos o nome da
mquina onde a impressora est conectada como o primeiro argumento e o nmero da
porta para a conexo como o segundo argumento para o netprint. Note que esse
suporte de uma nica direo ( Impressoras para o FreeBSD ); muitas
impressoras de rede suportam comunicao bidirecional, voc pode ter vantagem em
utilizar essa comunicao para obter status da impressora, fazer contabilidade,
etc.
#!/usr/bin/perl
#
# netprint - Text filter for printer attached to network
# Installed in /usr/local/libexec/netprint
#
$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";
$printer_host = $ARGV[0];
$printer_port = $ARGV[1];
require 'sys/socket.ph';
($ignore, $ignore, $protocol) = getprotobyname('tcp');
($ignore, $ignore, $ignore, $ignore, $address)
= gethostbyname($printer_host);
$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address);
socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)
|| die "Can't create TCP/IP stream socket: $!";
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
while (<STDIN>) { print PRINTER; }
exit 0;
Nos podemos utilizar este script em vrios filtros. Supondo que temos uma
impressora Diablo 750-N conectada rede. A impressora aceita dados para
impresso na porta de nmero 5100. O nome da mquina scrivener. Aqui est um
filtro de texto para a impressora.
#!/bin/sh
#
# diablo-if-net - Text filter for Diablo printer `scrivener' listening
# on port 5100.
Installed in /usr/local/libexec/diablo-if-net
#
exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100
11.4.4. Restingindo o Uso da Impressora
Essa seo d informaes de como restringir o uso da impressora. O sistema LPD
permite que voc controle quem pode acessar a impressor localmente ( direto na
mquina) ou remotamente, eles podem imprimir multiplas cpias, to grandes
quando se queira os trabalhos de impresso, to grandes que podem ser as filas
de impresso.
11.4.4.1. Restringindo Multiplas Cpias
O sistema LPD faz isso com facilidade para os usurios poderem imprimir
multiplas cpias de um arquivo. Os usurios podem imprimir trabalhos de
impresso com o comando lpr -#5, por exemplo e ter cinco cpias de um mesmo
arquivo em um trabalho de impreso. Isso ser um boa ideia se estiver
habilidado.
Se voc perceber que isso pode causar um desgaste desnecessrio da impressora,
voc poder desabilitar a opo -# para lpr(1) apenas adicionando a opo sc no
arquivo /etc/printcap. Quando os usurios utilizarem o comando com a opo -#
para imprimir seus trabalhos de imopresso, ele ver:
lpr: multiple copies are not allowed
Note que se voc tem configurado o acesso a impressora remota ( veja a seo
Impressora Instaladas em Mquinas Remotas ), voc necessitar da opo sc no
arquivo /etc/printcap da mquina remota, caso contrrio, os usurios poderiam
enviar trabalhos de impresso com multiplas cpias, usando uma outra mquina na
rede.
Pgina 18

filtro de impresso.txt
Aqui tem um exemplo. Esse um arquivo /etc/printcap para a mquina rose. A
impressora rattan parruda, que aguenta multiplas cpias, mas a impressora
laser bamboo um pouco mais delicada ,que no, ento ser desabilidada a
multiplas cpias, adicionando a opo sc :
#
# /etc/printcap for host rose - restrict multiple copies on bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
Agora, ns necessitaremos de adicionar a opo sc no arquivo /etc/printcap na
mquina orchid para dessabilitar as cpias multiplas para a impressora teak):
#
# /etc/printcap for host orchid - no multiple copies for local
# printer teak or remote printer bamboo
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
:if=/usr/local/libexec/ifhp:\
:vf=/usr/local/libexec/vfhp:\
:of=/usr/local/libexec/ofhp:
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:
Usando a opo sc, nos podemos prever o uso do comando lpr -#, mas isso no
prev usurios utilizando lpr(1) vrias vezes, ou de enviar o mesmo arquivo
vrias vezes em um nico trabalho de impresso, como segue:
% lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign
Existem vrias maneiras de se prever esse abuso ( incluisive ignorando ele) que
voc pode explorar livremente.
11.4.4.2. Restringindo o Acesso as Impressoras
Voc pode controlar quem pode imprimir em qual impressora utilizando o mecanismo
de grupos do UNIX e a opo rg no /etc/printcap. Apenas colocando os usurios
que voc quer que tenham acesso a impressora diferentes grupos, e ento
definindo na opo rg o grupo desejado.
Os usurios fora do grupo ( inmcluindo o root) iro receber a seguinte mensagem:
``lpr: Not a member of the restricted group'' Se eles tentarem imprimir em uma
impressora controlada.
Como a opo sc ( suprime multiplas cpias), voc precisasr de especificar a
opo rg na mquina remota (servidor) para ter tambm o acesso impressora,
veja a seo Impressoras Instaladas em Servidores Remotos ).
Por exemplo, ns iremos permitir o acesso de todos a impressora rattan, mas
somente os usurios do grupo artists podero utilizar a impressora bamboo.
Novamente o arquivo /etc/printcap semelhante ao da mquina rose:
#
# /etc/printcap for host rose - restricted group for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
Pgina 19

filtro de impresso.txt
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
Permita-nos mostrar um outro exemplo do arquivo /etc/printcap (para a mquina
orchid) sozinha. Claro, qualquer um na mquina orchid pode imprimir para a
impressora bamboo. Neste caso, nos deveremos permitir acesso apenas de alguns
usurios na mquina orchid, de qualquer maneira, nos estamos controlondo o
acesso a impressora.
Nota: S podemos restringir apenas um grupo por impressora

11.4.4.3. Controlando o Tamanho do Arquivos Enviados


Se voc possui muitos usurios acessando a sua impressora, voc provavelmente
necessitar de limitar o tamanho mximo dos arquivos enviados para a impressora.
Alm de que, o espao livre em disco limitado, voc dever prever o envio de
vrios trabalhos de impresso simultaneos, que podero consumir uma grande
quantidade de espao em disco.
O sistema LPD permite que voc limite o tamanho mximo de um trabalho de
impresso atravs da opo mx. A unidade padro em blocos de BUFSIZ, que so
1024 bytes. Se voc colocar o valor como zero para esta opo, voc no estar
limitando o tamanho do arquivo, entretanto se voc no especificar valor, o
padro ser utilizado, que de : 1000 blocos.
Nota: O limite aplicado para os arquivos dentro de um trabalho de impresso, e
no ao tamanho total do trabalho de impresso
O sistema LPD no ir recusar o arquivo que estiver acima do limite imposto por
voc. Ele colocara na fila de impresso apenas a quantidade de bytes at o
limite. O resto ser descartado. Ser esse o comportamento correto.
Iremos utilizar outro exemplo de limites para as impressoras rattan e bamboo.
Uma vez que arquivos artsticos em PostScript tentem a ser muito grande, ns
iremos limitar-los a 5 megabytes. Ns iremos deixar sem limite a impressora de
texto puro (matricial):
#
#
#

/etc/printcap for host rose

#
# No limit on job size:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:mx#0:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
#
# Limit of five megabytes:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
Relembrando, os limites so aplicados somente aos usurios locais. Se voc
permite acesso remoto, usurios remotos no tero este limite. Voc dever
especificar na opo mx no arquivo remoto /etc/printcap. Veja a seo
Impressoras Instaladas em Servidores Remotas para mais detalhes.
Existem outros meios especializados para limitar o tamanho dos trabalhos de
Pgina 20

filtro de impresso.txt
impresso de impresso remota; veja a seo Restrigindo Impresso Remota .
11.4.4.4. Restringindo a Impresso Remota
O sistema de spooling LPD possui vrios meios de restringir o acesso dos
trabalhos de impresso enviados de uma mquina remota:
Restrio Mquina
Voc pode controlar de qual mquina remota o servidor local LPD aceitar pedidos
de impresso com a ajuda dos arquivos /etc/hosts.equiv e /etc/hosts.lpd. O LPD
verifica esses arquivos para saber se o pedido foi feito por uma das mquinas
listada em um dos arquivos. Se no estiver em nenhum deles o LPD recusar o
pedido
O formato desses arquivos e muito simples: o nome da mquina remota, um por
linha. Note que o arquivo /etc/hosts.equiv tambm utilizado pelo protocolo
ruserok(3), e afeta programas como rsh(1) e rcp(1), ento, seja cuidadoso.
Por exemplo, aqui est um arquivo /etc/hosts.lpd para a mquina rose:
orchid
violet
madrigal.fishbaum.de
Isso significa que a mquina rose ir aceitar pedidos das mquinas orchid,
violet, e madrigal.fishbaum.de. Se qualquer outra mquina tentar acessar o LPD
na mquina rose, esse trabalho de impresso ser rejeitado.
Restrio de Tamanho
Voc pode controlar o quanto de espaco livre necessrio n sistema de arquivo
aonde o diretrio de spooling est. Crie um arquivo chamado de minfree dentro do
diretrio do spooling para a impressora local. Insira no arquivo o nmero
representando quantos blocos ( 512 bytes ) de espao livre deve ter o disco para
que o trabalho de impresso remoto seja aceito.
Isso permite que vov garanta que o seu sistema de arquivos no fique lotado
pelos seus usurios remotos. Voc tambm pode usar isso para dar uma certa
prioridade aos usurios locais: Eles esto aptos a enviar grandes trabalhos de
impresso mesmo que o limite fique abaixo do especificado no arquivo minfree.
Por exemplo, vamos adicionar um arquivo minfree para a impressora bamboo. Ns
examinaremos o arquivo /etc/printcap para encontrar o diretrio de spooling para
essa impressora; aqui est a entrada:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
O diretrio de spooling dado na opo sd. Ns iremos criar uma reserva de 3
megabytes ( que so 6144 blocos do disco ) para o LPD poder aceitar pedidos de
trabalhos de impresso remotos:
# echo 6144 > /var/spool/lpd/bamboo/minfree
Restries de Usurios
Para que voc possa controlar qual o usurio remoto pode acesar a impressora
local, voce deve utilizar a opo rs do arquivo /etc/printcap. Quando a opao
rs utilizada localmente, o LPD ir somente aceitar os trabalhos de impresso
das mquinas remotas se o usuroi que o tiver enviando, tambm tiver conta com o
mesmo login na mquina local. Caso contrrio, o LPD ir recusar o trabalho de
impresso.
Esssa opo particularmente poderosa para o ambiente onde existam, por
exemplo, diferentes departamendos compartilhando a rede, e alguns usurios
trascendem os limites departamentais. Dando a eles contas em seus sistemas, eles
tambm poderam imprimir nas impressoras desses departamentos. Se voc quizer que
apenas a utilizao desses usurios sejam restritas a utilizao das
impressoras, voc deve utilizar contas do tipo ``token'', sem diretrio de
usurio e com um shell sem utilizao como /usr/bin/false.
Pgina 21

filtro de impresso.txt
11.4.5. Contabilizando o Uso da Impressora
Ento, voc precisa contabilizar as impresses. Por que no? Afinal papel e
tinta custam dinheiro. E tambm o custo de manuteno da impressora com as
partes mveis que podem quebrar. Voc deve examinar suas impressoras, use um
padro e uma taxa de manuteno que deve conter o custo de uma pgina ( ou por
metro, por ps, ou qualquer outra coisa ). Agora como voc ir inicializar a
contabilidade para as impresses?
Bem, a m notcia que o sistema de spooling LPD no prov muita ajuda nesse
departamento. A contabilidade altamente dependente da maneira de como a
impressora utilizadda, o formato que impresso, como voc necessita que a
impressora seja contabilizada.
Para implantar a contabilidade, voc deve modificar o filtro para texto puro (
para contabilizar trabalhos de impresso em texto puro) e os filtros de
converso ( para contabilizar outros formatos de impresso), para contar as
pginas ou as requisies para a impressora das pginas impressas. Voc no deve
utilizar filtros simples, pos eles no fornecem dados para a contabilidade. Veja
a seo Filtros.
Geralmente, existe duas maneiras para realizar a contabilidade:
Contabilidade Peridica feita pela maneira mais simples. A toda hora
impresso algo, e o filtro armazena o usurio, a mquina, e o nmero de pginas
impressas no arquivo de contabilidade. A cada mes, semestre, ano ou a qualquer
perdo que voc preferir, voc pode coletar a contagem de pginas, atravs do
arquivo de contabilidade para vrias impressoras. Ento voc poder zerar o
arquivo de contabilidade para que se faa novo perodo de contabilidade.
Contabilidade temporizada menos comum, provavelmente porque mais difcil.
Esse mtodo tem filtros que contabilizam as impresses to logo que se use as
impressoras. Como a limitao de disco, a contabilidade imetiada. Voc pode
impedir que os usurios imprimam quando suas cotas cheguem ao vermelho, e devam
providenciar outro meio para os usurios verificarem e ajustar suas ``cotas de
impresso''. Mas esse mtodo requer algum cdigo de banco de dados para rastrear
os usurios e suas cotas.
O sistema de spool LPD suporta ambos os mtodos facilmente: deste que voc
providencie os filtros ( na maioria das vezes ), voc tambm deve providenciar o
cdigo para a contabilidade. Mas existe o lado bom: voc ter uma enorme
flexibilidade em seus mtodos de contabilidade. Por exemplo, voc escolhe como
ir fazer a contabilidade, periodicamente ou em determinado tempo. Voc escolhe
qual a informao que ir armazenar: nome do usurio, nome da mquina, tipo do
trabalho de impresso, pginas impressas, metragem quadrada do papel utilizado,
quanto tempo a impressora foi utilizada para a impresso em muito mais. E voc
s ter que modificar o filtro para armazenar essas informaes.
11.4.5.1. Uma Comtabilidade Rpida e Rasteira
O FreeBSD vem com dos programas que podem ajuda-lo com uma contabilidade simples
e periodica. Eles so filtros texto (lpf), descrito na seo lpf: um Filtro
Texto, e pac(8), um programa para recolher e totalizar as entradas do arquivo de
contabilidade das impressoras.
Como mencionado na seo sobre filtros (Filtros), O LPD inicia os filtros de
texto e de converso com o nome do arquivo de contabilidade para ser utilizado
na linha de comando do filtro. Os filtros podem usar esse argumento para saber
onde escrever os dados da contabilidade. O nome desse arquivo deve ser colocado
na opo af no arquivo /etc/printcap, e se no estiver especificado com o
diretrio absoluto, ser utilizado de forma relativa ao diretrio de spooling.
O LPD inicia o lpf com a largura e o comprimento da pgina como os argumentos (
da opes pw e pl). O lpf usa esses argumentos para determinar quanto de papel
ser utiizado. Depois do envio do arquivo para impressora, ele ento escreve a
entrada da contabilidade para o arquivo de contabilidade. Uma entrada seria
semelhante a essa:
2.00 rose:andy
Pgina 22

filtro de impresso.txt
3.00 rose:kelly
3.00 orchid:mary
5.00 orchid:mary
2.00 orchid:zhang
Voc deve usar arquivos de contabilidade separados para cada impressora, como
lpf no tem lgica de bloqueio interna, e dois acessos via lpf pode comrromper
os dados das entradas concorrentes. O meio mais fcil de separar os arquivos de
contabilidade utilizando a opcao af=acct no arquivo /etc/printcap. Ento, cada
arquivo de contabilidade ir ficar no diretrio de spooling da impressora
desejada, com o nome de acct.
Quando voc estiver pronto para cobrar dos usurios pelas impressess, execute o
programa pac(8). Para cadas impressora que voc desejar coletar os dados, vo
dever ir ao seu diretrio de spooling e ento executar o programa pac. Voc
ter um relatrio dos custos, semelhante :
Login
orchid:kelly
orchid:mary
orchid:zhang
rose:andy
rose:kelly
rose:mary
rose:root

pages/feet
5.00
31.00
9.00
2.00
177.00
87.00
26.00

total

337.00

runs
1
3
1
1
104
32
12

$
$
$
$
$
$
$

price
0.10
0.62
0.18
0.04
3.54
1.74
0.52

154

6.74

Esses so os argumentos para o comando pac(8):


-PImpressora
Onde Impressora ser a impressora ser avaliada. Essa opo funciona somente se
existir o caminho absoluto na opo af no arquivo /etc/printcap.
-c
Ordena a sada pelo custo ao invs da ordem alfabtica dos nomes dos usurios.
-m
Ignora o nome damquinano arquivo de contabilidade. Com essa opo, o usurio
smith na mquina alpha o mesmo usurio smith na mquina gamma. Sem isso sero
diferentes.
-ppreo
Computa o uso com o preo em dolar por pgina ou por ps, ao invs do preo
estipulado na opo pc no arquivo /etc/printcap, or 3 centavos ( o valor
padro). Voc pode especificar o preo como um nmero de ponto flutuante.
-r
Ordena de modo reverso.
-s
Cria um arquivo com o resumo da estatstica e trunca o arquivo de contabilidade.
nome ...
Imprime as informaes de contabilidade de um dado usurio com o nome names
somente.
No resumo padro que o comando pac(8) gera, voc v o nmero de pginas
impressas por cada usurio de vrias mquinas. Se, no seu stio, as mquinas no
so importantes ( porque os usurios podem usar qualquer uma delas), ento
execute o comando pac -m, para gerar a seguinte sada:
Login
andy
kelly
mary
root
zhang

pages/feet
2.00
182.00
118.00
26.00
9.00

runs
1
$
105
$
35
$
12
$
1
$
Pgina

price
0.04
3.64
2.36
0.52
0.18
23

filtro de impresso.txt
total
337.00 154
$ 6.74
Para computar o custo em dolar, o comando pac(8) usa a opo pc do arquivo
/etc/printcap (padro 200, ou 2 centavos por pgina). Especifique, em centenas
de centavos, o preo por pgina ou por ps se voc possuir esse tipo de
impresso. Voc pode sobreescrever este valor quando voc executa o comando
pac(8) com a opo -p. A unidade para esta opo o dollar e no a centena de
centavos. Por exemplo:
# pac -p1.50
Faz o custo de cada pgina ter 1,50 dolares. Voc pode realmente ter um lucro
usando essa opo.
Finalmente, executando o comando pac -s, voc economizar informaces no resumo
da contabilidade armazenado em arquivo, o qual ter o mesmo nome que o arquivo
de estatstica da imprssora, mas com um sufixo acrescido ao nome (_sum). Ele
ento trunca o arquivo de estatsticas. Quando voc executa o comando pac(8)
novamente, ele re-le o resumo do arquivo de resumo para inicial a totalizao,
ento adiciona as informaes no arquivo normal de estatsticas.
11.4.5.2. Como Contar Pginas Impressas?
De modo a apurar mesmo uma contagem pouco precisa, voc deve ser capaz de
determinar quanto papel um trabalho usa. Este um dos problemas essenciais da
contabilidade em relao impresso.
Para trabalhos ou jobs de texto simples o problema no muito difcil: voc
conta quantas linhas tm no trabalho e compara isso com quantas linhas por
pgina sua impressora suporta. No se esquea de levar em considerao
backspaces no arquivo que provoquem sobrescrita de linhas e linhas longas que se
transformam em uma ou mais linhas adicionais.
O filtro de texto lpf (cuja introduo pode ser vista em lpf: Um Filtro de
Texto) leva em considerao estas coisas quando faz a contagem. Se voc estiver
escrevendo um filtro de texto que precise realizar contabilidade pode querer
examinar o cdigo fonte do lpf.
E como voc lida com outros formatos?
Bem, para converses de DVI para LaserJet ou DVI para PostScript voc pode fazer
com que seu filtro trate a sada do comando dvilj ou dvips e verifique quantas
pginas foram convertidas. Voc deve conseguir fazer isso tambm com outros
formatos e programas de converso.
Esses mtodos, porm, no resolvem o problema de que a impressora pode no
imprimir todas essas pginas. Por exemplo, o papel pode prender, a tinta acabar
ou a impressora explodir, e o usurio ainda seria cobrado pelas pginas.
Ento, o que voc pode fazer?
Existe somente um meio correto para fazer uma contabilidade precisa. Deixe a
impressora dizer para voc quanto de papel ela usou, e a conecte via porta
serial ou a uma conexo de rede. Quase todas as impressoras PostScript suportam
essa manipulao. Outras marcas e modelos tambm podem, por exemplo, impressoras
de rede Imagen Laser. Modifique os filtros para essas impressoras para pegar a
utilizao das pginas aps a impresso de cada trabalho, para ento poder
armazenar as informaes da contabilidade baseado apenas neste valor. No existe
contagem de linha e nem exame de erros no arquivo.
Claro, voc pode ser generoso e deixar as impresses gratuitas.
Anterior
Principal
Prxima
Configurao Bsica
Acima
Usando as Impessoras
Este, e outros documentos, podem ser obtidos em
ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Para perguntas sobre FreeBSD, leia a documentao antes de contatar
<questions@FreeBSD.org>.
Para perguntas sobre esta documentao, envie e-mail para <doc@FreeBSD.org>.
Pgina 24

Vous aimerez peut-être aussi