24
filtro de impressão.txt FreeBSD Handbook Anterior Capítulo 11. Impressão Próxima 11.4. Configuração Avançada de Impressora Essa seção descreve filtros para formatos especiais de impressão de arquivos, páginas de cabeçaçlho, impressão através da rede, e restringir acesso ao uso da impressora. 11.4.1. Filtros Através do LPD podemos acessar o protocolos de rede, filas, acesso de controle, e outros aspectos da impresão, a maioria dos trabalhos reais ocorre nos filters. Os filtros são programas que se comunicam com a impressora e manipulam as dependências do dispositivo e necessidades especiais. Na seção configuração simples da impressora, nós instalamos um filtro--an texto puro extremamente simples que deve funcionar na maioria das impressoras (seção Instalando o Filtro de Texto ). Entretando, se quisermos tirar vantagens de conversão de formatos, relatório de uso da impressora, especificar uma configuração especial da impressora, entre outras coisas, devemos compreender como funcionam os filtros. Ultimamente a responsabidade do filtro é tratar desses aspectos. E a má notícia é que a maior parte do tempo você terá que providenciar os seus próprios filtros. A boa notícia é que muitos já esão disponíveis; e se não encontrar, você facilmente poderá escrevê-los. Também, 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 tabulações no arquivo, e faz a contabilidade, mas isso é tudo que ele faz). Existem vários filtros e componentes de filtro na Coleção de Ports do FreeBSD. Aqui está o que você irá encontrar nessa seção: A Seção Como os Filtros funcionam, tenta dar um panorama geral da função de um filtro no processo de impressão. Você deverá ler esta seção 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 instalação de vários filtros para suas impressoras. O LPD Espera que cada impressora esteja habilidada para imprimir texto puro por padrão. É um problema presente para impressoras PostScript® (ou outra impressora baseada em liguagem) a qual não pode imprimir diretamente texto puro. A seção Acomodando Impressão em Texto Puro em Impressoras PostScript mostra à você como proceder para resolver este problema. Você deve ler essa seção caso você tenha uma impressora PostScript PostScript é o formato mais comum para a maioria dos programas. Mesmo que algumas pessoas (incluindo eu mesmo) escreve código PostScript diretamente, mas impressoras PostScript são caras. Na seção Simulando PostScript em impressora não PostScript informa como você pode modificar os filtros para aceitar e imprimir dados PostScript em uma impressora não PostScript. você deverá ler essa seção se você não possuir uma impressora PostScript. A seção Filtro de Conversão informa sobre o meio que você pode automatizar a conversão especificando o formato do arquivo, tais como gráficos ou dados de typesetting , para formatos que a impressora possa endenter. Depos de lida esta seção, você está apto a configurar sua impressora para que os usuários 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 seção. A seção Filtros de saída Informa sobre o uso não comum dos filtros de saída do LPD. A menos que você esteja imprimindo páginas de cabeçalho (veja Páginas de cabeçalho), você provavelmente poderá pular toda esta seção. A Seção 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 rápido para Página 1

Filtros de Impressão

Embed Size (px)

DESCRIPTION

tutorial passo a passo

Citation preview

Page 1: Filtros de Impressão

filtro de impressão.txt

FreeBSD HandbookAnterior Capítulo 11. Impressão Próxima11.4. Configuração Avançada de ImpressoraEssa seção descreve filtros para formatos especiais de impressão de arquivos,páginas de cabeçaçlho, impressão através da rede, e restringir acesso ao uso daimpressora.

11.4.1. FiltrosAtravés do LPD podemos acessar o protocolos de rede, filas, acesso de controle,e outros aspectos da impresão, a maioria dos trabalhos reais ocorre nos filters.Os filtros são programas que se comunicam com a impressora e manipulam asdependências do dispositivo e necessidades especiais. Na seção configuraçãosimples da impressora, nós instalamos um filtro--an texto puro extremamentesimples que deve funcionar na maioria das impressoras (seção Instalando o Filtrode Texto ).

Entretando, se quisermos tirar vantagens de conversão de formatos, relatório deuso da impressora, especificar uma configuração especial da impressora, entreoutras coisas, devemos compreender como funcionam os filtros. Ultimamente aresponsabidade do filtro é tratar desses aspectos. E a má notícia é que a maiorparte do tempo você terá que providenciar os seus próprios filtros. A boanotícia é que muitos já esão disponíveis; e se não encontrar, você facilmentepoderá escrevê-los.

Também, o FreeBSD vem com um /usr/libexec/lpr/lpf, que funciona com a maioriadas impressoras que podem imprimir texto puro. (Ele manipula caraceteres deretorno, backspaces e tabulações no arquivo, e faz a contabilidade, mas isso étudo que ele faz). Existem vários filtros e componentes de filtro na Coleção dePorts do FreeBSD.

Aqui está o que você irá encontrar nessa seção:

A Seção Como os Filtros funcionam, tenta dar um panorama geral da função de umfiltro no processo de impressão. Você deverá ler esta seção para compreender oque acontece `` por baixo dos panos'' quando LPD utiliza os filtros. Esseconhecimento poderá ajuda-lo antecipadamente e livra-lo dos defeitos que poderamencontrar na instalação de vários filtros para suas impressoras.

O LPD Espera que cada impressora esteja habilidada para imprimir texto puro porpadrão. É um problema presente para impressoras PostScript® (ou outra impressorabaseada em liguagem) a qual não pode imprimir diretamente texto puro. A seçãoAcomodando Impressão em Texto Puro em Impressoras PostScript mostra à você comoproceder para resolver este problema. Você deve ler essa seção caso você tenhauma impressora PostScript

PostScript é o formato mais comum para a maioria dos programas. Mesmo quealgumas pessoas (incluindo eu mesmo) escreve código PostScript diretamente, masimpressoras PostScript são caras. Na seção Simulando PostScript em impressoranão PostScript informa como você pode modificar os filtros para aceitar eimprimir dados PostScript em uma impressora não PostScript. você deverá ler essaseção se você não possuir uma impressora PostScript.

A seção Filtro de Conversão informa sobre o meio que você pode automatizar aconversão especificando o formato do arquivo, tais como gráficos ou dados detypesetting , para formatos que a impressora possa endenter. Depos de lida estaseção, você está apto a configurar sua impressora para que os usuários possamdigitar lpr -t para imprimir dados de troff, ou lpr -d para imprimir dados TeXDVI data, ou lpr -v para imprimir dados de imagem rasterisadas, e por aí vai,recomendamos a leitura desta seção.

A seção Filtros de saída Informa sobre o uso não comum dos filtros de saída doLPD. A menos que você esteja imprimindo páginas de cabeçalho (veja Páginas decabeçalho), você provavelmente poderá pular toda esta seção.

A Seção lpf: um filtro de texto chamado lpf, completo se considerado um filtrode texto simples para impressoras matriciais (e impressoras laser que funcionamcomo matriciais) que vem com o FreeBSD. Se você necessita de um meio rápido para

Página 1

Page 2: Filtros de Impressão

filtro de impressão.txtfazer a impressora funcionar com texto puro, ou se voce tem uma impressora aqual emite fumaça quando ela imprime caracteres backspace, você devedefinitivamente considerar lpf.

11.4.1.1. Como os Filtros FuncionamComo mencionado antes, o filtro é um programa executável inicializado pelo LPDpara manipular a parte denpendente de dispositivo para comunicação com aimpressora.

Quando o LPD precisa imprimir um arquivo no job, ele inicializa o filtro. Eleconfigura a entrada padrão do filtro para o arquivo a ser impresso, a saídapadrão para a impressora e a saída padrão de erro para o arquivo de log de erros(especificado na opção lf no arquivo /etc/printcap, ou /dev/console por padrão).

A escolha do filtro inicializado pelo LPD depende do argumento utilizado noarquivo /etc/printcap e qual foi o argumento que o usuário especificou nocomando de linha lpr(1). Por exemplo, se o usuário digita o seguinte comando:lpr -t, o LPD irá inicializar o filtro troff, que é o argumento da opção tf paraa impressora padrão. Se o usuário quiser imprimir um texto puro, ele deveráinicializar o filtro if (isso é muito comum, veja em Output Filters para maioresdetalhes).

Existem tres tipos de filtros que você pode especificar no arquivo/etc/printcap:

O filtro de texto, erradamente chamado de filtro de entrada na documentação doLPD, ele manipula a impressão de texto puro, pense nele como um filtro padrãopara o LPD, ele espera que todas as impressoras, por padrão, estejam habilitadasa imprimir texto puro, e ela tabs, em um ambiente onde tem estatísticas do usoda impressora, o filtro de texto também deve gerar a estatística sobre o que foiimpresso, geralmente isto é feito contando o número de linhas impressas ecomparando-as com o número 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 hostarquivo-estatistica

onde

-cÉ usado quando o job é enviado com o comando lpr -l

larguraÉ o valor da opção pw (largura da página) especificado no arquivo /etc/printcap,O padrão é 132

comprimentoÉ o valor da opção pl (comprimento da página), o padrão é 66

indentÉ a quantidade de identação fornecido pelo comando lpr -i, o padrão é 0

loginÉ o nome da conta de usuário para pode imprimir o arquivo

hostÉ o nome do computador para onde a impressão será envida.

arquivo_estatisticaÉ o nome do arquivo onde será armazenada a estatística da impressão, este valoré atribuido à opção af.

Um filtro de conversão converte um fromato especifico do arquivo em outro que aimpressora possa compreender e tranformar em páginas impresas. Por exemplo, oformato ditroff typesetting não pode ser impresso diretamento, mas você podeinstalar um filtro conversor para o formato que a impressora possa imprimircorretamente. A seção Filtros Conversores mostra como fazê-los. Filtros deconversão que também necessite de estatísticas, você precisa habilitar a

Página 2

Page 3: Filtros de Impressão

filtro de impressão.txtestatística na impressora. Filtros de conversão são inicializados com osseguintes argumentos:

nome-do-filtro -x largura do pixel -y altura do pixel -n login -h hostarquivo-estatistca

Onde largura do pixel é o valor da opção px (valor padrão é 0) e altura do pixelé o valor da opção py (o valor padrão é 0).

O filtro de saída é usado somente se não existir um filtro de texto, ou se ocabeçalho das páginas estiver habilitado. Em minha experiência, filtros de saídasão raramente utilizados. A seção Filtros de Saída mostra mais detalhes. Existemsomente dois argumentos para os filtros de saída, são eles:

nome do filtro -wlargura -lcomprimento

os quais são identicos aos argumetos dos filtros de texto -w e -l.

Os filtros devem também sair com os seguintes status:

exit 0Se o filtro obteve sucesso ao imprimir o arquivo.

exit 1Se o filtro falhou ao imprimir o arquivo, mas aguarda o LPD para tentar imprimiroutra vez. LPD irá reiniciar o filtro se ele sair com esse status.

exit 2Se o filtro falhar na impressão do arquivo e não irá aguardar o LPD para tentardenovo. O LPD irá jogar fora o arquivo.

O filtro de texto que vem com a versão do FreeBSD, /usr/libexec/lpr/lpf, tiravantagens dos argumentos de largura e comprimento para determinar quando enviarum caracter de alimentação de folha (form feed) e como gerar estatísticas do usoda impressora. Ele usa o login, host, e argumentos do arquivo para gerar asestatísticas.

Se você deseja comprar filtros, veja se são compatíveis com o LPD. Se forem,eles devem suportar a lista de argumentos descrita acima. Se você planejaescrever seu próprio filtro para uso geral, eles também devem suportar a listade argumentos e deve utilizar os códigos descritos acima.

11.4.1.2. Acomodando Texto Puro em Impressoras PostScript®Se só você é o usuário do seu computador sua impressora suporta PostScript (ououtra linguagem), e você prometeu nunca enviar texto puro para a sua impressorae nunca usará as vantagens que vários programas que gostariam de enviar textopuro para a sua impressora, então você não precisa se preocupar com esta seção.

Mas, se você gostaria de enviar tanto PostScript e texto puro para a suaimpresssora, então você está convidado a incrementar a configuração daimpressora. Para fazer isso, nós temos que ter um filtro para detectar se otexto é texto puro ou PostScript. Todas as impressões em PostScript deveminiciar com %! (para outras linguagens de impressora, veja a documentação da suaimpressora). Se estes dois primeiros caracteres aparecerem no arquivo deimpressãom nós temos PostScript, e podemos passar o resto da impressãodiretamente para a impressora. Se não temos os dois primeiros caracteres noarquivo de impressão, então o filtro deve convertê-lo em PostScript e imprimir oresultado.

Como nós faremos isso:

Se você possui uma impressora serial, o melhor caminho é instalar o lprps. Olprps é um filtro de impressora PostScript, o qual habilita a comunicaçãobi-direcional com a impressora. Ele atualiza o arquivo de status da impressoracom informação recebida da impressora, então os usuários e administradores podemver exatamente o estado da impressora (tais como ``toner baixo'' ou ``paperjam''). mas o mais importante, é incluir um programa chamado de psif, o qualdetecta quando um job é em texto puro e então executa o comando textps (outro

Página 3

Page 4: Filtros de Impressão

filtro de impressão.txtpragama que vem com o lprps) para convertê-lo em PostScript. Ele pode usar lprpspara enviar um job para a impressora.

O lprps é parte da coleção de programas do FreeBSD (veja A Coleção deProgramas). Você pode procurar, construir e instalar, por você mesmo. Depois dainstalação do lprps, especifique o diretório para o programa psif que faz partedo lprps. Se você instalou o lprps através dos ports, use o seguinte na entradareferente a impressora serial PostScript configurada no arquivo /etc/printcap:

:if=/usr/local/libexec/psif:Você também deve especificar a opção rw; que informa ao LPD para abrir acomunicação com a impressora no modo leitura-escrita.

Se você tem uma impressora PostScript (e não utiliza o modo bi-direcional, comonecessita 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_linefirst_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then # # PostScript job, print it. # echo "$first_line" && cat && printf "\004" && exit 0 exit 2else # # Plain text, convert it, then print it. # ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit0 exit 2fiNo script acima, textps é um programa que instalamos separadamente paraconverter texto puro em PostScript. Você pode usar qualquer conversor de textopara PostScript que você desejar. A coleção de programas do FreeBSD (ports, vejaem Coleção de Programas ) inclui um programa conversor de texto para PostScriptcom facilidades chamado a2ps que você deveria considerar.

11.4.1.3. Simulando PostScript em Impressoras Não PostScriptPostScript é de facto padrão para impressão de alta qualidade. PostScript éentretanto, um padrão caro. Ficamos gratos à Aladdin Enterprises que possui umprograma chamado Ghostscript que pode trabalhar com a maioria dos arquivosPostScript e pode mostrar suas páginas em uma variedade de dispositivos,incluindo um grande número de impressoras não PostScript. Com a instalação doGhostscript e usando filtros especiais de texto para a sua impressora, você podefazer uma impressora não PostScript funcionar como uma impressora PostScriptreal.

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, nós temos um detector de filtro de texto para verificarse estamos imprimindo em um aquivo PostScript ou texto puro. Se for o caso detexto puro, então o filtro deverá repassar as informações diretamente para aimpressora, caso contrário, ele deverá utilizar o Ghostscript antes paraconverter PostScript para o formato reconhecido pela a impressora.

Aqui tem um exemplo: o script a seguir é um filtro texto para uma impressora daHewlett Packard, a Deskjet 500. Para outras impressoras, você deve substituir oargumento da opção -sDEVICE do comando gs (Ghostscript). Digitando gs -h você

Página 4

Page 5: Filtros de Impressão

filtro de impressão.txtterá a lista dos dispositivos suportados pela versão 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_linefirst_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 0else # # 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 0fi

exit 2Finalmente, você deve notificar o LPD do filtro através da opção if

:if=/usr/local/libexec/ifhp:Feito isso, você poderá digitar lpr texto.puro e lpr qualquer-coisa.ps e ambosdeverão ser impressos corretamente na impressora.

11.4.1.4. Filtros ConversoresApós ter completado a configuração descrita na seção Configuração Simples daImpressora , a primeira coisa que você provavelmente pensa é instalar filtrosconversores 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 sistemaTeX, e nós temos uma impressora PostScript. Cada vez que geramos um arquivo DVIatravés do TeX, nos não podemos imprimi-lo diretamente, pois precisamosconvertê-lo em PostScript. A sequência de comandos será algo semelhante a:

% dvips seaweed-analysis.dvi% lpr seaweed-analysis.psInstalando um filtro para converter os aquivos DVI em PostScript, poderíamospular um passo a cada vez que tivessemos que imprimir. O LPD poderá realizaresse passo para nós.

% lpr -d seaweed-analysis.dvi

Página 5

Page 6: Filtros de Impressão

filtro de impressão.txtNós informamos o LPD para converter o arquivo DVI através da opção -d. A seçãoOpções de Formatação e Conversão mostra uma lista de opções de conversão

Para cada opção de conversão que você deseja que sua impressora suporte, deveinstalar um Filtro Conversor e especificar o diretório no arquivo /etc/printcap.Um filtro conversor é um filtro texto como foi definido na seção ConfiguraçãoSimples de Impressora (veja a seção Instalando um Filtro de Texto ) Exceto pelofato imprimir arquivos de texto puro, os filtros convertem os arquivos em umformato 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ê imprimeuma grande quantidade de dados no formato DVI, então você deve ter um filtropara convertê-lo. Se você deseja imprimir saídas através de troff, entãoprovavelmente você terá um filtro troff.

A seguinte tabela sumariza os filtros que o LPD pode trabalhar, e suas opçõesestão no arquivo /etc/printcap, e como devem ser chamados com o comando lpr:

Tipo de Arquivo Opção no /etc/printcap Opções do lprcifplot cf -cDVI df -dplot gf -gditroff nf -ntexto em FORTRAN rf -ftroff tf -fraster vf -vTexto Puro if none, -p, or -lNo nosso exemplo, usamos o comando lpr -d que significa dizer que precisamos daopção df dentro do arquivo /etc/printcap.

Apesar de algumas opiniões contrárias, formatos como o FORTRAN e plot sãoprovavelmente obsoletos. No seu sítio, você pode dar novas opções de formataçãopara estes ou qualquer outra opção apenas instalando novos filtros ajustadospara o seu uso. Por exemplo, suponhamos que seja necessário imprimir diretamentearquivos Printerleaf (arquivos vindos do do programa de pubicação Interleaf),mas você nunca irá imprimir arquivos de plot. Você poderá instalar um filtropara converter esse formato utilizando a opção gf e educar os seus usuários autilizarem o comando lpr -g quando forem imprimir arquivos do tipo``Printerleaf''.

11.4.1.4.3. Instalando Filtros ConversoresUma vez que os filtros de conversão são programas instalados por fora dainstalação padrão do FreeBSD, eles devem, provavelmente, ficar no diretório/usr/local. O diretório /usr/local/libexec é a localização mais indicada, poissão programas especializados que somente o LPD irá usar; usuários regulares dosistema, não deverão ter necessidade de executá-los.

Para habilitar um filtro conversor, especifique o diretório no qual ele seencontra, na opção específica do arquivo /etc/printcap.

No nosso exemplo iremos adicionar um filtro conversor DVI na impressora chamadabamboo. Aqui um exemplo de um arquivo /etc/printcap, com a nova opção df para aimpressora 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:

Página 6

Page 7: Filtros de Impressão

filtro de impressão.txtO filtro DVI é um script para o shell chamado de /usr/local/libexec/psdf. aquiestá 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 padrão,na qual o job será impresso. Ele inicia o filtro PostScript da impressora lprps(veja a seção Acomodando Trabalhgos de Impressão em Texto Puro em ImpressorasPostScript ) com os argumentos do LPD passado pelo script. O comando lprps seráusado como argumento para a contabilidade de páginas impressas.

11.4.1.4.4. Mais Exemplos de Filtros ConversoresUma vez que não existe um conjunto de passos para a instalação de filtrosconversores, providenciaremos mais exempemplos. Use-os como guia para fazer osseus próprios filtros. Use-os diretamente se forem apropriados.

Esse exemplo de script é um filtro conversor raster (com arquivos GIFatualmente) 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 PATHgiftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \ && exit 0 \ || exit 2Ele converte um arquivo GIF em um formato anymap portável, convertendo em ummapa de cinza portável, convertento em um formato bitmap portável, e entãoconvertendo em dados compatível com PCL.

Um exemplo de arquivo /etc/printcap com uma entrada para uma impressora usando ofiltro 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 próximo script converte dados troff vindos de um sistema groff para umaimpressora 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 comunicaçãocom a impressora. Se a impressora estiver na porta paralela, nós devemos usareste script:

#!/bin/sh## pstf - Convert groff's troff data into PS, then print.# Installed in /usr/local/libexec/pstf#exec gropsAqui está a entrada que precisamos adicionar no arquivo /etc/printcap para

Página 7

Page 8: Filtros de Impressão

filtro de impressão.txthabilitar o filtro:

:tf=/usr/local/libexec/pstf:Aqui está um filtro para texto em FORTRAN para qualquer impressora que imprimadiretamente em texto puro. Nós iremos instalar isso para a impressora chamadateak:

#!/bin/sh## hprf - FORTRAN text filter for LaserJet 3si:# Installed in /usr/local/libexec/hprf#

printf "\033&k2G" && fpr && printf "\033&l0H" && exit 0exit 2E nós adicionamos esta linha no arquivo /etc/printcap para a impressora teakpara habilitar esse filtro:

:rf=/usr/local/libexec/hprf:Aqui é o fim desse exemplo complexo. Nós iremos adicionar o filtro DVI para aimpressora LaserJet teak indroduzido recentemente. Primeiro, a parte mais fácil;atualize o arquivo /etc/printcap com a localização do filtro DVI:

:df=/usr/local/libexec/hpdf:Agora, a parte mais difícil: fazendo o filtro. Para tanto, nós iremos necessitarde um programa conversor de DVI para LaserJet/PCL. A coleção de programas doFreeBSD (veja em A Coleção de Programas) possui um: dvi2xx, é o nome do pacote.Instalando esse pacote, teremos o programa necessário, dvilj2p, o qual converteDVI em arquivos LaserJet IIp, LaserJet III, e LaserJet 2000 compatíveis.

O comando dvilj2p deixa o filtro hpdf pouco complexo uma vez que o comandodvilj2p não pode ler da entrada padrão. Ele necessita trabalhar com o nome doarquivo. Isso é ruim, o nome do arquivo deve ter no final .dvi então usando o/dev/fd/0 para a entrada padrão seria problemático. Nós podemos contornar oproblema linkando (simbolicamente) um nome temporário de arquivo (um queterminaria em .dvi) para o /dev/fd/0, forçando assim o dvilj2p ler da entradapadrão.

Outro ponto importante é que não podemos utilizar o diretório /tmp para um linktemporário. Links simbólicos são propriedade do usuário e grupo bin. O filtroexecuta como o usuário daemon. E o filtro não conseguirá criar o link, mastambém ele não estará apto quando de removê-lo quando terminar uma vez que olink pertence a um um usuário diferente.

Ao invés disso o filtro criará um link simbólico no diretório de trabalhocorrente, que é o diretório de spooling (especificado na opção sd no arquivo/etc/printcap). Este é um lugar perfeito par os filtros realizarem o seutrabalho, especialmente porque na maioraia das vezes possui mais espaço do que odiretório /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}

Página 8

Page 9: Filtros de Impressão

filtro de impressão.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#cleanupexit 011.4.1.4.5. Conversão Automática: Uma Alternativa aos Filtros de ConversãoTodos esses filtros de conversão completam o seu ambiente de impressão, mas a umcusto de forçar seu usuário a especificar (no comando de linha lpr(1)) qual eleirá usar. Se seus usuários não estão familiarizados, ou não tiverem costume comliteratura computacional , eles acharão isso muito chato. O que é ruim,entretanto, é a escolha de uma opção errada, que poderá gerar muitas páginas delixo.

De preferência quando for instalar um filtro de conversão, você poderá tentardeixar como padrão um filtro texto, que detecte o tipo de arquivo e execute ofiltro adequado para conversão. Ferramentas como file poderão ajuda-lo aresolver isto. Claro que você terá dificuldades em diferenciar entre algunstipos de arquivos e é claro que você estará providenciando o filtro correto paraconvertê-los.

A Coleção de Programas do FreeBSD tem um filtro de texto capaz de realizarautomaticamente a conversão definida chamadaapsfilter. Ele também pode detectartexto puro, PostScript e DVI, executar as conversões necessárias, e a seguirimprimir o resultado.

11.4.1.5. Filtros de SaídaO sistema de spooling LPD suporta um outro tipo de filtro que ainda não foiexplorado: o filtro de saída. Um filtro de saída tem apenas o objetivo deimprimir texto puro, como outros filtros de texto, mas com muitas

Página 9

Page 10: Filtros de Impressão

filtro de impressão.txtsimplificações. Se você estiver utilizando um filtro de saída mas não um filtrotexto, então:

O LPD inicia o filtro de saída apenas uma unica vez para o trabalho de impressãoao invez de uma vez para cada arquivo no trabalho de impressão.

O sistema LPD não faz nenhuma previsão para identificar o incício ou o final dearquivos dentro do trabalho de impressão para o filtro de saída.

O sistema LPD não repassa o nome do usuário ou a máquina para o filtro, entãonão conseque fazer a contabilização do uso. de fato, ele só utiliza doisargumentos:

nome do filtro -wlargura -lcomprimento

Onde largura é retirado da opção pw e o comprimento é retirado da opção plreferente a impressora utilizada

Não fique seduzido pela facilidade do uso dos filtros de saída. Se você gostariade ter cada arquivo do trabalho de impressão iniciando em diferente páginas umfiltro de saída não iria funcionar . Use um filtro de texto (também conhecidocomo filtro de entrada); veja a seção Instalando um Filtro Texto. Além disso, umfiltro de saída é atualmente mais complexo porque ele examina um stream de bytesiniciamente enviado para ele com um flag especial e deve ser enviado sinais paraele prório em benefício do sistema LPD.

Entretanto, um filtro de saída é necessario se você quizer cabeçalho de pá eprecisa enviar seguências de caracteres escape ou outro conjunto de caracteresinicialização para abilitar o cabeçalho das páginas. (mas isso é também fútil sevocê deseja carregar cabeçalhos de página para a contabilidade do usuário umavez que o sistema LPD não fornece nenhuma informação do usuário ou do computadorpara o filtro de saída).

Para uma única impressora, o sistema LPD permite tanto filtros de saída e detexto ou de outro tipo. Na maioria dos casos o sistema LPD irá iniciar o filtrode saída para imprimir a página de cabeçalho ( veja a seção Páginas deCabeçalho) somente. O sistema LPD então agurada o filtro de saída terminar peloenvio de uma sequência de dois bytes para o filtro: os caracterres ASCII 031seguido pelo 001. Quando ofiltro ve esses dois bytes (031, 001), ele deve pararcom um envio do sinal SIGSTOP para si mesmo. Quando o sistema LPD termina aexecução de outros filtros, ele irá reinicializar o filtro de saída pelo enviodo sinal SIGCONT para ele.

Se existir um filtro de saída mas não um filtro texto e o LPD estivertrabalhando em um trabalho de impressão de texto puro, o LPD utiliza o filtro desaída para realizar a tarefa de impressão. Como dito antes, o filtro de saídairá imprimir cada arquivo do trabalho de impressão na sequência sem o intervalode alimentação de folha ou outro avanço de papel, e isso você provavelmente nãodeseja. Na maioria dos casos você necessitara de um filtro de texto.

O programa lpf, o qual nos introduzimos recentemente como um filtro texto, podetambém ser executado como um filtro de saída. Se você necessitar de um filtro desaída rápido e sem muita qualidade, mas não quer ter o trabalho de escrever umdetector de byte e um código para enviar sinais, tente o lpf. Você também podecolocar o lpf dentro de um script em shell para manipular os códigos deinicialização que a impressora pode necessitar.

11.4.1.6. lpf: Um Filtro de TextoO programa /usr/libexec/lpr/lpf que vem com a distribuição do FreeBSD é umfiltro de texto ( filtro de entrada )e pode identar a saída ( o trabalho deimpressão enviado com o comando lpr -i), permitindo que caracteres literaispossam ser enviados (trabalho de impressão enviado com o comando lpr -l),ajustar a posição de impressão para caracteres de retorno (backspace) etabulações no trabalho de imressão, e fazer a contabilidade das páginasimpressas. Também pode agir como um filtro de saída.

O comando lpf é adequado para a maioria dos ambientes de impressão. E ainda quenão possua capacidade para enviar sequências de inicialização para as

Página 10

Page 11: Filtros de Impressão

filtro de impressão.txtimpressoras, isto é fácil ser escrito em script de shell para fazer asinicializações necessárias e então executar o lpf.

Para que o lpf faça a estatistica corretamente, ele necessita dos valorespreencidos corretamente nas opções pw e pl no arquivo /etc/printcap. Ele utilizaesses valores para determinar como o texto poderá caber na página que quantaspáginas estarão no trabalho de impressão do usuário. Para mais informações, vejaa seção Estatisticas do Uso da Impressora .

11.4.2. Páginas de CabeçalhosSe você tiver muitos usuários, todos eles usuando várias impressoras, vocêprovavelmente deverá considerar as páginas de cabeçalho como um mal necessário.

Páginas de Cabeçalho, também conhecida como banner ou burst pages identifica dequem é o trabalho de impressão depois dele ser impresso. Ela é geralmenteimpressa grande, com letras em negrito, e as vezes com bordas decorativas, paraque em um pilha de impressão eles possam ser identificados e entregues aousuário correto. As páginas de cabeçalho são impressas uma por trabalho deimpressão e não uma por arquivo impresso.

O sistema LPD pode providenciar automaticamente páginas de cabeçalho para suassaídas se sua impressora puder imprimir texto puro. Se você tiver uma impressoraPostScript, você necessitara de um programa externo para gerar essas páginas;veja a seção Páginas de Cabeçalho em Impressoras PostScript .

11.4.2.1. Habilitando Páginas de CabeçalhoNa seção Configuração Simples da Impressora , nos desligamos a impressão daspáginas de cabeçalho, através da opção sh ( que significa ``suppres header'') noarquivo /etc/printcap. Para habilitar a impressão, basta a remoção da opção sh.

Isso parece tão fácil, correto?

E você esta certo. Você deve ter providenciado um filtro de saída para enviar osdados de inicialização para a impressora. Aqui um está um exemplo de filtro desaída para uma impressora Hewlett Packard PCL-compatível:

#!/bin/sh## hpof - Output filter for Hewlett Packard PCL-compatible printers# Installed in /usr/local/libexec/hpof

printf "\033&k2G" || exit 2exec /usr/libexec/lpr/lpfespecificando odiretório para o filtro de saída na opção of. veja na seçãoFiltros de Saída para maiores informações.

Aqui um exemplo do arquivo /etc/printcap para a impressora teak que foiintroduzida recentemente; nos habilitamos a página de cabeçalho e adicionamos ofiltro de saída 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 usuários imprimirem os seus trabalhos para a impressora teak,eles terão uma página de cabeçalho para cada job impresso. Se os usuários queremperder tempo procurando os seus trabalhos de impressora, eles podem suprimiressas páginas com o comando lpr -h; veja a seção Opçãoes de Páginas de Cabeçalhopara outras opções veja lpr(1) .

Nota: O LPD imprime o caracter de alimentação de página (form feed) logo apos apágina de cabeçalho. Se sua impressora utiliza um caracter diferente ousequencia de caracteres para ejetar uma página, especifique-o na opção ff noarquivo /etc/printcap.

Página 11

Page 12: Filtros de Impressão

filtro de impressão.txt

11.4.2.2. Controlando Páginas de CabeçalhoUma vez habilidada a página de cabeçalho, o LPD irá produzir um longo cabeçalho,uma página completa com letras grandes identificando o usuário, máquina, e otrabalho de impressão. Aqui está um exemplo (kelly imprimiu um trabalho deimpressãoi entitulado de outline a partir da máquina rose):

k ll ll k l l k l l k k eeee l l y y k k e e l l y y k k eeeeee l l y y kk k e l l y y k k e e l l y yy k k eeee lll lll yyy y y y y yyyy

ll t l i t l oooo u u ttttt l ii n nnn eeee o o u u t l i nn n e e o o u u t l i n n eeeeee o o u u t l i n n e o o u uu t t l i n n e e oooo uuu u tt lll iii n n eeee

r rrr oooo sss eeee rr r o o s s e e r o o s eeeeee r o o s e r o o s s e e r oooo sss eeee

Job: outline Date: Sun Sep 17 11:04:58 1995O LPD adiciona uma alimentação de página logo apos o texto ser impresso, entãoinicia em uma nova página o trabalho de impressão ( a menos que se tenhadefinido a opção sf (suprimir a alimentação de página) na impressora destinadano arquivo /etc/printcap).

Se você preferir, o LPD pode fazer uma página pequena; especificando a opção sb(short banner) no arquivo /etc/printcap. A página de cabeçalho irá parecer comoesta:

rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995Também poe padrão, o LPD imprime a página de cabeçalho primeiro, e então otrabalho de impressão. Para reverter isso, especifique a opção hl (header last)no arquivo /etc/printcap.

Página 12

Page 13: Filtros de Impressão

filtro de impressão.txt11.4.2.3. Estatísticas para Páginas de CabeçalhoUsando o LPD para imprimir as páginas de cabeçalho, leva-nos a um paradigma, nosdevemos contar as páginas de cabeçalho para fazer as estatística, ou devemosdeix-la de fora.

Por que?

Por que o filtro de saída é somente um programa externo que terá controle quandoa página de cabeçalho for impressa e não pode diferenciar isto do total para quepossa fazer a estatística corretamente, e isso não é fornecido por qualquerusuário ou máquina ou qualquer arquivo de estatística, então ele não tem ideiapara quem contabilizar o uso da impressora. E também não é justo ``adcionar umapágina'' para o filtro texto ou qualquer outro filtro de conversão ( os quaistêm informações sobre os usuários e máquinas) uma vez que os usuários podemsuprimir as páginas de cabeçalho com o comando lpr -h. À eles então seriamatribuidos os custros ( estatísticas ) de páginas de cabeçalho que efetivamentenão imprimiram. Basicamente, o lpr -h irá ser uma opção preferiad no ambito dosusuários, mas você não deverá incentivar o seu uso.

Isso não é o sufuciente para cada filtro gerar sua própriapágina de cabeçalho (entretanto estará apto a contabiliza-las). Se os usuários quizerem a opção desupressão de páginas de cabeçalho com o comando lpr -h, eles ainda teram e serãocontabilizado uma vez que o LPD não tem conhecimento da -h para nenhum filtro.

Então, qual é a sua opção?

Você pode:

Aceitando o paradigma do LPD e liberando as páginas de cabeçalho.

Instalando alternativas ao LPD, tais como: LPRng. Seção Alternativas Ao SpoolerPadrão diz mais sobre os programas que podem substituir o LPD.

Escrevendo um filtro de saída inteligente. Normalmente um filtro de saída nãoprecisa de muita coisa a além de inicializar a impressora ou fazer algumasconversões de caracteres. Ele derá que se adaptar para páginas de cabeçalho oupara trabalhos de impressão em texto puro ( quando ele não for um filtro detexto (entrada)). Mas, se existir um filtro de texto para trabalhos de impressãoem texto puro, então LPD irá iniciar o filtro de saída somente para a página decabeçalho. E o filtro de saída poderá alanisar a página de cabeçalho que o LPDgerou para determinar qual usuário e máquina para poder contabiliza-la. O únicoproblema com esse método é que o filtro de saída continua sem ter conhecimentodo arquivo de estatística ( isso não é passado pela opção af), mas se você tem oconhecimento do arquivo de estatística, voce poderá coloca-lo direto no códigodo filtro de saída. Para facilitar o passo de análise, use a opção sh (páginacurta) do arquivo /etc/printcap. Então depois de tudo feito, os usuários irãoapreciar o quão generoso o administrador do sistema é, liberando dasestatísticas de utilização a paina de cabeçalho.

11.4.2.4. Páginas de Cabeçalho em Impressoras PostScriptComo descrito acima, o LPD pode gerar as páginas de cabeçalho em texto puro,funcional para a maioria das impressoras. Claro que as impressoras PostScriptnão podem imprimir diretamente texto puro, então a vantagem do LPD poderimprimir as páginas de cabeçalho torna-se imprestável--.

Uma maneira obvia de ter páginas de cabeçalho é gerar através de cada filtro deconversão e de filtros de texto, as páginas de cabeçalho. Os filtros devem usaros argumentos de nome de usuário e da máquina, para gerar uma página decabeçalhjo otimizada. a desvantagem deste método é que o usuário sempre tera apágina de cabeçalho mesmo que ele utilize o comando lpr -h para imprimir seustrabalhos de impressões.

Iremos explorar este método. O script abaixo manipula três argumentos ( nome dousuário (login), nome da máquina, e o nome do trabalho de impressão) e faz umapágina simples de cabeçalho em PostScript:

#!/bin/sh#

Página 13

Page 14: Filtros de Impressão

filtro de impressão.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). Modify for A4 or# whatever size paper you are using:#page_width=612page_height=792border=72

## Check arguments#if [ $# -ne 3 ]; then echo "Usage: `basename $0` <user> <host> <job>" 1>&2 exit 1fi

## Save these, mostly for readability in the PostScript, below.#user=$1host=$2job=$3date=`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 rlineto0 $page_height $border 2 mul sub rlinetocurrentscreen 3 -1 roll pop 100 3 1 roll setscreen$border 2 mul $page_width sub 0 rlineto closepath0.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) ] {

Página 14

Page 15: Filtros de Impressão

filtro de impressão.txt 270 y moveto show /y y 18 sub def} forall

%% That is it%restoreshowpageEOFAgora, cada chamada aos filtros de conversão e aos filtros de texto, irá sergerada uma página de cabeçalho e então será impresso o trabalho de impressão dousuário. Segue um exemplo de um filtro de conversão de DVI, mostradoanteriormente neste documento, modificado para poder imprimir a página decabeçalho.

#!/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 ;; esacdone

[ "$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_argsObserve como o filtro faz a análise da lista de argumentos para que possadeterminar os nomes de máquina e de usuário. A análise para os outros filtros deconversão é identica. O filtro de texto possui uma sutil diferença no conjuntede argumentos passados ( veja a seção Como os filtros funcionam ).

Como foi mencionado, o esquema acima é muito simples, desabilita a opção``supressão da página de cabeçalho'' ( a opção -h ) para o comando lpr. Se osusuários quizerem econimizar árvores ( ou dinheiro, caso seja cobrada aimpressão da páginas de cabeçalho). ele não poderam faze-lo, uma vez que osprórpios filtros se encarregam deste serviço.

Para permitir os usuários desligarem as páginas de cabeçalho, você deverá usar otruque mostrado na seção Contabilizando as Páginas de Cabeçalho : para escreverum filtro de saída que analise a página de cabeçalho gerada pelo LPD e produziruma versão em PostScript. Se o usuário enviar o trabalho de impressão com ocomando lpr -h, então o LPD não irá gerar a página de cabeçalho, e nada ira parao seu filtro de saída. Caso contrario, seu filtro de saída ira ler o texto que oLPD gerou e irá enviar a página de cabeçalho apropriada em código PostScript.

Se voce tiver uma impressora PostScript na porta serial, você pode utilizar ocomando lprps, o qual vem com um filtro da saída, psof, Note que o psof nãocontabiliza as páginas de cabeçalho

Página 15

Page 16: Filtros de Impressão

filtro de impressão.txt

11.4.3. Impressão em RedeO FreeBSD suporta impressão via rede; enviando trabalhos de impressão paraimpressoras remotas. Impressão em rede geralmente nos conduz a duas coisasdiferentes:

Acessando a impressora conectada a uma máquina remota. Você instala a impressoranormalmente como se fosse uma impressora serial ou paralela na máquina. Então,você configura o LPD para habilitar o acesso a impressora de outras máquinas narede. Veja a seção Impressoras Instaladas em Máquinas Remotas mostra comofaze-lo.

Acessando a impressora conectada diretamente a rede. A impressora possui umainterface de rede, além da porta paralela ou serial. Como a impressora queiremos utilizar a seguir:

Ela deve entender o protocolo LPD e possa manipular filas de trabalhos deimpressão de uma máquina remota. Nesse caso, Ela age como uma máquina remotacomum rodando LPD. Seguindo os mesmos passos na seção Instalando Impressoras emMáquinas Remotas para configurar a impressora.

Ela deve suportar conexão de rede do tipo stream. Nesse caso, você conecta aimpressora em uma máquina na rede que ficará responsável pelo spooling dostrabalhos de impressão e envia-los para a impressora. Na seção Impressoras comInterfaces de Rede do Tipo Data Stream Dá sugesões de como instalar essasimpressoras.

11.4.3.1. Impressoras Intaladas em um Computador RemotoO sistema LPD foi construido com suporte para enviar trabalhos de impressão paraoutras máquinas na rede, rodando LPD ( ou um algo compatível com ele ). Essacaracteistica possibilita a instalação de impressoraqs em uma máquina que possaser acessada por outras. Isso também funciona para impressora que possuemintefaces de rede capaz de compreender o protocolo LPD.

Para habilitar essa impressora remota, primeiro devemos instalar a impressora emuma máquina, que será o servidor de Impressão, usando os passos descritos naseção Simples Configuração de Impressora . Para configuração avançada veja aseção Configuração Avançada de Impressora . Tenha certeza que o teste deimoressão funcionou corretamente para esta impressora. Tenha certeza que ocomputador local tenha autorização para acessar a máquina remota e o serviço doLPD, veja a seção Restringindo os Trabalhos de Impressão para Máquinas Remotas).

Se estiver utilizando uma impressora com interface de rede compatível com LPD,então servidor de imporessão será a propria impressora, e o nome da impressoraserá o nome que você configurou para a impressora. Veja a documentação queacompanha a sua impressora e/ou a interface de rede dela.

Dica: Se você esta utulizando uma Hewlett Packard Laserjet então o nome daimpressora fará automaticamente a conversão do LF para o CRLF para você, e entãovocê não necessitará do filtro de texto hpif para isso.

Então, em outros servidores que você quizer ter acesso, deverá adicionar umaentrada no arquivo /etc/printcap como segue:

Nomeia a entrada como quiser. Por simplicidade, você usará o mesmo nome/apelidoque estiver no servidor da impressra.

Deixe a opção lp em branco, faça isso explicitamente (:lp=:).

Crie um diretório de spool e especifique a sua localização com a opção sd. O LPDirá armazenar os trabalhos de impressão lá antes de entregar ao servidor deimpressão

Coloque o nome do servidor da impressora na opção rm.

Coloque o nome a impressora que está no servidor de impressão não opção rp

Página 16

Page 17: Filtros de Impressão

filtro de impressão.txtFeito isso, você não precisará de filtros de entrada, dimesionamento de páginas,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 usuários da máquina orchid possa imprimir nessasimpressoras. Aqui está o arquivo /etc/printcap para a máquina orchid (veja aseção anteriro Habilitando Páginas de Cabeçalho ). Ele já possui a entrada paraa impressora teak; nos iremos adicionar a entrada para as duas impressoras noservidor 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:Então, nos apenas criamos o diretório de spool na máquina 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/bambooAgora, os usuários na máquina orchid podem imprimir para as impressoras rattan ebamboo. Se, por exemplo, o usuário na máquina orchid digitar:

% lpr -P bamboo -d sushi-review.dviO siatema LPD na máquina orchid irá copiar o trabalho de impressão do diretóriode spool /var/spool/lpd/bamboo e irá notar que é uma impressão em DVI. Tão logoo servidor rose tiver espaço no diretório de spool da impressora bamboo os doissistemas LPDs irão transferir o arquivo para o servidor rose. O arquivo ficaráaguardando na fila do servidor rose até ser finalmente impresso. Ele então iráconverter do formato DVI para PostScript deste que a impressora bamboo consigainterpretar PostScript

11.4.3.2. Impressoras com Interfaces de Rede Data StreamGeralmente, quando você compra uma interface de rede para a sua impressora, vocêpode ter duas versões: uma que emula um spooler ( a versão mais cara), ou umaque permita que você envie dados para ela como se você estivesse utilizando umaporta paralela ou serial ( a versão mais barata). Essa seção mostra como vocêirá utilizar essa versão mais barata. Para a versão mais cara, veja a seçãoanterior Impressoras Instaladas em uma Máquina Remota .

O formato do arquivo /etc/printcap permite que você especifique qual ainterface, seria ou paralela, a ser usada e ( se você estiver usando umainterface serial), qual a taxa de transferencia ( baud rate), Se está usandocontrole de fluxo, expansão de tabulação, conversão de novas linhas, e mais. Masexiste um meio de especificar a conexão com a impressora que e ouvir sobreTCP/IP ou outra porta da rede.

Para enviar dados para uma impressora na rede, você deverá desenvolver umprograma de comunicação que possa ser chamado pelo filtro de texto e/ou de

Página 17

Page 18: Filtros de Impressão

filtro de impressão.txtconversão. Aqui está um exemplo: O script netprint pega todos os dados daentrada padrão e envia para a impressora de rede. Nos especificamos o nome damáquina onde a impressora está conectada como o primeiro argumento e o número daporta para a conexão como o segundo argumento para o netprint. Note que essesuporte é de uma única direção ( Impressoras para o FreeBSD ); muitasimpressoras de rede suportam comunicação bidirecional, você pode ter vantagem emutilizar essa comunicação 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 vários filtros. Supondo que temos umaimpressora Diablo 750-N conectada à rede. A impressora aceita dados paraimpressão na porta de número 5100. O nome da máquina é scrivener. Aqui está umfiltro 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 510011.4.4. Restingindo o Uso da ImpressoraEssa seção dá informações de como restringir o uso da impressora. O sistema LPDpermite que você controle quem pode acessar a impressor localmente ( direto namáquina) ou remotamente, eles podem imprimir multiplas cópias, tão grandesquando se queira os trabalhos de impressão, tão grandes que podem ser as filasde impressão.

11.4.4.1. Restringindo Multiplas CópiasO sistema LPD faz isso com facilidade para os usuários poderem imprimirmultiplas cópias de um arquivo. Os usuários podem imprimir trabalhos deimpressão com o comando lpr -#5, por exemplo e ter cinco cópias de um mesmoarquivo em um trabalho de impresão. Isso será um boa ideia se estiverhabilidado.

Se você perceber que isso pode causar um desgaste desnecessário da impressora,você poderá desabilitar a opção -# para lpr(1) apenas adicionando a opção sc noarquivo /etc/printcap. Quando os usuários utilizarem o comando com a opção -#para imprimir seus trabalhos de imopressão, ele verá:

lpr: multiple copies are not allowedNote que se vocè tem configurado o acesso a impressora remota ( veja a seçãoImpressora Instaladas em Máquinas Remotas ), você necessitará da opção sc noarquivo /etc/printcap da máquina remota, caso contrário, os usuários poderiamenviar trabalhos de impressão com multiplas cópias, usando uma outra máquina narede.

Página 18

Page 19: Filtros de Impressão

filtro de impressão.txt

Aqui tem um exemplo. Esse é um arquivo /etc/printcap para a máquina rose. Aimpressora rattan parruda, que aguenta multiplas cópias, mas a impressora àlaser bamboo é um pouco mais delicada ,que não, então será desabilidada amultiplas cópias, adicionando a opção 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, nós necessitaremos de adicionar a opção sc no arquivo /etc/printcap namáquina orchid para dessabilitar as cópias multiplas para a impressora teak):

## /etc/printcap for host orchid - no multiple copies for local# printer teak or remote printer bambooteak|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 opção sc, nos podemos prever o uso do comando lpr -#, mas isso nãoprevê usuários utilizando lpr(1) várias vezes, ou de enviar o mesmo arquivovárias vezes em um único trabalho de impressão, como segue:

% lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.signExistem várias maneiras de se prever esse abuso ( incluisive ignorando ele) quevocê pode explorar livremente.

11.4.4.2. Restringindo o Acesso as ImpressorasVocê pode controlar quem pode imprimir em qual impressora utilizando o mecanismode grupos do UNIX® e a opção rg no /etc/printcap. Apenas colocando os usuáriosque você quer que tenham acesso a impressora diferentes grupos, e entãodefinindo na opção rg o grupo desejado.

Os usuários fora do grupo ( inmcluindo o root) irão receber a seguinte mensagem:``lpr: Not a member of the restricted group'' Se eles tentarem imprimir em umaimpressora controlada.

Como a opção sc ( suprime multiplas cópias), você precisasrá de especificar aopção rg na máquina remota (servidor) para ter também o acesso à impressora,veja a seção Impressoras Instaladas em Servidores Remotos ).

Por exemplo, nós iremos permitir o acesso de todos a impressora rattan, massomente os usuários do grupo artists poderão utilizar a impressora bamboo.Novamente o arquivo /etc/printcap é semelhante ao da máquina 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:\

Página 19

Page 20: Filtros de Impressão

filtro de impressão.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 máquinaorchid) sozinha. Claro, qualquer um na máquina orchid pode imprimir para aimpressora bamboo. Neste caso, nos deveremos permitir acesso à apenas de algunsusuários na máquina orchid, de qualquer maneira, nos estamos controlondo oacesso a impressora.

Nota: Só podemos restringir apenas um grupo por impressora

11.4.4.3. Controlando o Tamanho do Arquivos EnviadosSe você possui muitos usuários acessando a sua impressora, você provavelmentenecessitará de limitar o tamanho máximo dos arquivos enviados para a impressora.Além de que, o espaço livre em disco é limitado, você deverá prever o envio devários trabalhos de impressão simultaneos, que poderão consumir uma grandequantidade de espaço em disco.

O sistema LPD permite que você limite o tamanho máximo de um trabalho deimpressão através da opção mx. A unidade padrão é em blocos de BUFSIZ, que são1024 bytes. Se você colocar o valor como zero para esta opção, você não estarálimitando o tamanho do arquivo, entretanto se você não especificar valor, opadrão será utilizado, que é de : 1000 blocos.

Nota: O limite é aplicado para os arquivos dentro de um trabalho de impressão, enão ao tamanho total do trabalho de impressão

O sistema LPD não irá recusar o arquivo que estiver acima do limite imposto porvocê. Ele colocara na fila de impressão apenas a quantidade de bytes até olimite. 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 artísticos em PostScript tentem a ser muito grande, nósiremos limitar-los a 5 megabytes. Nós iremos deixar sem limite a impressora detexto 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 são aplicados somente aos usuários locais. Se vocêpermite acesso remoto, usuários remotos não terão este limite. Você deveráespecificar na opção mx no arquivo remoto /etc/printcap. Veja a seçãoImpressoras Instaladas em Servidores Remotas para mais detalhes.

Existem outros meios especializados para limitar o tamanho dos trabalhos de

Página 20

Page 21: Filtros de Impressão

filtro de impressão.txtimpressão de impressão remota; veja a seção Restrigindo Impressão Remota .

11.4.4.4. Restringindo a Impressão RemotaO sistema de spooling LPD possui vários meios de restringir o acesso dostrabalhos de impressão enviados de uma máquina remota:

Restrição à MáquinaVocê pode controlar de qual máquina remota o servidor local LPD aceitará pedidosde impressão com a ajuda dos arquivos /etc/hosts.equiv e /etc/hosts.lpd. O LPDverifica esses arquivos para saber se o pedido foi feito por uma das máquinaslistada em um dos arquivos. Se não estiver em nenhum deles o LPD recusará opedido

O formato desses arquivos e muito simples: o nome da máquina remota, um porlinha. Note que o arquivo /etc/hosts.equiv é também utilizado pelo protocoloruserok(3), e afeta programas como rsh(1) e rcp(1), então, seja cuidadoso.

Por exemplo, aqui está um arquivo /etc/hosts.lpd para a máquina rose:

orchidvioletmadrigal.fishbaum.deIsso significa que a máquina rose irá aceitar pedidos das máquinas orchid,violet, e madrigal.fishbaum.de. Se qualquer outra máquina tentar acessar o LPDna máquina rose, esse trabalho de impressão será rejeitado.

Restrição de TamanhoVocê pode controlar o quanto de espaco livre é necessário n sistema de arquivoaonde o diretório de spooling está. Crie um arquivo chamado de minfree dentro dodiretório do spooling para a impressora local. Insira no arquivo o númerorepresentando quantos blocos ( 512 bytes ) de espaço livre deve ter o disco paraque o trabalho de impressão remoto seja aceito.

Isso permite que vovê garanta que o seu sistema de arquivos não fique lotadopelos seus usuários remotos. Você também pode usar isso para dar uma certaprioridade aos usuários locais: Eles estão aptos a enviar grandes trabalhos deimpressão mesmo que o limite fique abaixo do especificado no arquivo minfree.

Por exemplo, vamos adicionar um arquivo minfree para a impressora bamboo. Nósexaminaremos o arquivo /etc/printcap para encontrar o diretório de spooling paraessa 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 diretório de spooling é dado na opção sd. Nós iremos criar uma reserva de 3megabytes ( que são 6144 blocos do disco ) para o LPD poder aceitar pedidos detrabalhos de impressão remotos:

# echo 6144 > /var/spool/lpd/bamboo/minfree

Restrições de UsuáriosPara que você possa controlar qual o usuário remoto pode acesar a impressoralocal, voce deve utilizar a opção rs do arquivo /etc/printcap. Quando a opaçãors é utilizada localmente, o LPD irá somente aceitar os trabalhos de impressãodas máquinas remotas se o usuároi que o tiver enviando, também tiver conta com omesmo login na máquina local. Caso contrário, o LPD irá recusar o trabalho deimpressão.

Esssa opção é particularmente poderosa para o ambiente onde existam, porexemplo, diferentes departamendos compartilhando a rede, e alguns usuáriostrascendem os limites departamentais. Dando a eles contas em seus sistemas, elestambém poderam imprimir nas impressoras desses departamentos. Se você quizer queapenas a utilização desses usuários sejam restritas a utilização dasimpressoras, você deve utilizar contas do tipo ``token'', sem diretório deusuário e com um shell sem utilização como /usr/bin/false.

Página 21

Page 22: Filtros de Impressão

filtro de impressão.txt

11.4.5. Contabilizando o Uso da ImpressoraEntão, você precisa contabilizar as impressões. Por que não? Afinal papel etinta custam dinheiro. E também o custo de manutenção da impressora com aspartes móveis que podem quebrar. Você deve examinar suas impressoras, use umpadrão e uma taxa de manutenção que deve conter o custo de uma página ( ou pormetro, por pés, ou qualquer outra coisa ). Agora como você irá inicializar acontabilidade para as impressões?

Bem, a má notícia é que o sistema de spooling LPD não provê muita ajuda nessedepartamento. A contabilidade é altamente dependente da maneira de como aimpressora é utilizadda, o formato que é impresso, como você necessita que aimpressora seja contabilizada.

Para implantar a contabilidade, você deve modificar o filtro para texto puro (para contabilizar trabalhos de impressão em texto puro) e os filtros deconversão ( para contabilizar outros formatos de impressão), para contar aspáginas ou as requisições para a impressora das páginas impressas. Você não deveutilizar filtros simples, pos eles não fornecem dados para a contabilidade. Vejaa seção Filtros.

Geralmente, existe duas maneiras para realizar a contabilidade:

Contabilidade Periódica é feita pela maneira mais simples. A toda hora éimpresso algo, e o filtro armazena o usuário, a máquina, e o número de páginasimpressas no arquivo de contabilidade. A cada mes, semestre, ano ou a qualquerperódo que você preferir, você pode coletar a contagem de páginas, através doarquivo de contabilidade para várias impressoras. Então você poderá zerar oarquivo de contabilidade para que se faça novo período de contabilidade.

Contabilidade temporizada é menos comum, provavelmente porque é mais difícil.Esse método tem filtros que contabilizam as impressões tão logo que se use asimpressoras. Como a limitação de disco, a contabilidade é imetiada. Você podeimpedir que os usuários imprimam quando suas cotas cheguem ao vermelho, e devamprovidenciar outro meio para os usuários verificarem e ajustar suas ``cotas deimpressão''. Mas esse método requer algum código de banco de dados para rastrearos usuários e suas cotas.

O sistema de spool LPD suporta ambos os métodos facilmente: deste que vocêprovidencie os filtros ( na maioria das vezes ), você também deve providenciar ocódigo para a contabilidade. Mas existe o lado bom: você terá uma enormeflexibilidade em seus métodos de contabilidade. Por exemplo, você escolhe comoirá fazer a contabilidade, periodicamente ou em determinado tempo. Você escolhequal a informação que irá armazenar: nome do usuário, nome da máquina, tipo dotrabalho de impressão, páginas impressas, metragem quadrada do papel utilizado,quanto tempo a impressora foi utilizada para a impressão em muito mais. E vocêsó terá que modificar o filtro para armazenar essas informações.

11.4.5.1. Uma Comtabilidade Rápida e RasteiraO FreeBSD vem com dos programas que podem ajuda-lo com uma contabilidade simplese periodica. Eles são filtros texto (lpf), descrito na seção lpf: um FiltroTexto, e pac(8), um programa para recolher e totalizar as entradas do arquivo decontabilidade das impressoras.

Como mencionado na seção sobre filtros (Filtros), O LPD inicia os filtros detexto e de conversão com o nome do arquivo de contabilidade para ser utilizadona linha de comando do filtro. Os filtros podem usar esse argumento para saberonde escrever os dados da contabilidade. O nome desse arquivo deve ser colocadona opção af no arquivo /etc/printcap, e se não estiver especificado com odiretório absoluto, será utilizado de forma relativa ao diretório de spooling.

O LPD inicia o lpf com a largura e o comprimento da página como os argumentos (da opçãões pw e pl). O lpf usa esses argumentos para determinar quanto de papelserá utiizado. Depois do envio do arquivo para impressora, ele então escreve aentrada da contabilidade para o arquivo de contabilidade. Uma entrada seriasemelhante a essa:

2.00 rose:andy

Página 22

Page 23: Filtros de Impressão

filtro de impressão.txt3.00 rose:kelly3.00 orchid:mary5.00 orchid:mary2.00 orchid:zhangVocê deve usar arquivos de contabilidade separados para cada impressora, comolpf não tem lógica de bloqueio interna, e dois acessos via lpf pode comrromperos dados das entradas concorrentes. O meio mais fácil de separar os arquivos decontabilidade é utilizando a opcao af=acct no arquivo /etc/printcap. Então, cadaarquivo de contabilidade irá ficar no diretório de spooling da impressoradesejada, com o nome de acct.

Quando você estiver pronto para cobrar dos usuários pelas impressõess, execute oprograma pac(8). Para cadas impressora que você desejar coletar os dados, voêdeverá ir ao seu diretório de spooling e então executar o programa pac. Vocêterá um relatório dos custos, semelhante à:

Login pages/feet runs priceorchid:kelly 5.00 1 $ 0.10orchid:mary 31.00 3 $ 0.62orchid:zhang 9.00 1 $ 0.18rose:andy 2.00 1 $ 0.04rose:kelly 177.00 104 $ 3.54rose:mary 87.00 32 $ 1.74rose:root 26.00 12 $ 0.52

total 337.00 154 $ 6.74

Esses são os argumentos para o comando pac(8):

-PImpressoraOnde Impressora será a impressora ser avaliada. Essa opção funciona somente seexistir o caminho absoluto na opção af no arquivo /etc/printcap.

-cOrdena a saída pelo custo ao invés da ordem alfabética dos nomes dos usuários.

-mIgnora o nome damáquinano arquivo de contabilidade. Com essa opção, o usuáriosmith na máquina alpha é o mesmo usuário smith na máquina gamma. Sem isso serãodiferentes.

-ppreçoComputa o uso com o preço em dolar por página ou por pés, ao invés do preçoestipulado na opção pc no arquivo /etc/printcap, or 3 centavos ( o valorpadrão). Você pode especificar o preço como um número de ponto flutuante.

-rOrdena de modo reverso.

-sCria um arquivo com o resumo da estatística e trunca o arquivo de contabilidade.

nome ...Imprime as informações de contabilidade de um dado usuário com o nome namessomente.

No resumo padrão que o comando pac(8) gera, você vê o número de páginasimpressas por cada usuário de várias máquinas. Se, no seu sítio, as máquinas nãosão importantes ( porque os usuários podem usar qualquer uma delas), entãoexecute o comando pac -m, para gerar a seguinte saída:

Login pages/feet runs priceandy 2.00 1 $ 0.04kelly 182.00 105 $ 3.64mary 118.00 35 $ 2.36root 26.00 12 $ 0.52zhang 9.00 1 $ 0.18

Página 23

Page 24: Filtros de Impressão

filtro de impressão.txt

total 337.00 154 $ 6.74Para computar o custo em dolar, o comando pac(8) usa a opção pc do arquivo/etc/printcap (padrão é 200, ou 2 centavos por página). Especifique, em centenasde centavos, o preço por página ou por pés se você possuir esse tipo deimpressão. Você pode sobreescrever este valor quando você executa o comandopac(8) com a opção -p. A unidade para esta opção é o dollar e não a centena decentavos. Por exemplo:

# pac -p1.50Faz o custo de cada página ter 1,50 dolares. Você pode realmente ter um lucrousando essa opção.

Finalmente, executando o comando pac -s, você economizará informacões no resumoda contabilidade armazenado em arquivo, o qual terá o mesmo nome que o arquivode estatística da imprssora, mas com um sufixo acrescido ao nome (_sum). Eleentão trunca o arquivo de estatísticas. Quando você executa o comando pac(8)novamente, ele re-le o resumo do arquivo de resumo para inicial a totalização,então adiciona as informações no arquivo normal de estatísticas.

11.4.5.2. Como Contar Páginas Impressas?De modo a apurar mesmo uma contagem pouco precisa, você deve ser capaz dedeterminar quanto papel um trabalho usa. Este é um dos problemas essenciais dacontabilidade em relação à impressão.

Para trabalhos ou jobs de texto simples o problema não é muito difícil: vocêconta quantas linhas têm no trabalho e compara isso com quantas linhas porpágina sua impressora suporta. Não se esqueça de levar em consideraçãobackspaces no arquivo que provoquem sobrescrita de linhas e linhas longas que setransformam em uma ou mais linhas adicionais.

O filtro de texto lpf (cuja introdução pode ser vista em lpf: Um Filtro deTexto) leva em consideração estas coisas quando faz a contagem. Se você estiverescrevendo um filtro de texto que precise realizar contabilidade pode quererexaminar o código fonte do lpf.

E como você lida com outros formatos?

Bem, para conversões de DVI para LaserJet ou DVI para PostScript você pode fazercom que seu filtro trate a saída do comando dvilj ou dvips e verifique quantaspáginas foram convertidas. Você deve conseguir fazer isso também com outrosformatos e programas de conversão.

Esses métodos, porém, não resolvem o problema de que a impressora pode nãoimprimir todas essas páginas. Por exemplo, o papel pode prender, a tinta acabarou a impressora explodir, e o usuário ainda seria cobrado pelas páginas.

Então, o que você pode fazer?

Existe somente um meio correto para fazer uma contabilidade precisa. Deixe aimpressora dizer para você quanto de papel ela usou, e a conecte via portaserial ou a uma conexão de rede. Quase todas as impressoras PostScript suportamessa manipulação. Outras marcas e modelos também podem, por exemplo, impressorasde rede Imagen Laser. Modifique os filtros para essas impressoras para pegar autilização das páginas após a impressão de cada trabalho, para então poderarmazenar as informações da contabilidade baseado apenas neste valor. Não existecontagem de linha e nem exame de erros no arquivo.

Claro, você pode ser generoso e deixar as impressões gratuitas.

Anterior Principal PróximaConfiguração Básica Acima Usando as ImpessorasEste, e outros documentos, podem ser obtidos emftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar<[email protected]>.Para perguntas sobre esta documentação, envie e-mail para <[email protected]>.

Página 24