Modo de passagem do driver de dispositivo de impressora

O próprio driver de dispositivo de impressora, por exemplo /dev/lp0, por padrão opera no modo não de passagem.

Um usuário pode consultar ou modificar as regras de operação para /dev/lp0 , emitindo o comando splp . Por exemplo, abaixo estão os resultados da emissão do comando splp lp0 em um sistema com um IBM® 4029 LaserPrinter definido como lp0. Os resultados são saída para o elemento de exibição especificado pela variável de ambiente TERM .

device = /dev/lp0      (+ yes     ! no)
CURRENT FORMATTING PARAMETERS (ignored by qprt, lpr, and lp commands)
Note: -p + causes the other formatting parameters to be ignored.

-p !    pass-through?                   -c +    send carriage returns?
        
-l 64   page length (lines)             -n +    send line feeds?
              
-w 80   page width (columns)            -r +    carriage rtn after line fee?

-i 0    indentation (columns)           -t +    suppress tab expansion?
       
-W !    wrap long lines?                -b +    send backspaces?
              
-C !    convert to upper case?          -f +    send form feeds? 
             
CURRENT ERROR PROCESSING PARAMETERS
-T 600  timeout value (seconds)         -e !    return on error? 
             
CURRENT SERIAL INTERFACE PARAMETERS
-B 19200baud rate                       -s 8    character size (bits) 
        
-N !    enable parity?                  -S !    two stop bits? 
               
-P !    odd parity?                   

O parâmetro -p determina se o driver de dispositivo da impressora, /dev/lp0, irá inadimplência para um modo de operação de passagem; o modo de operação pode ser substituído para um fluxo de dados específico. Por padrão, o valor do parâmetro -p é !, ou não. É importante notar que a pergunta feita pelo parâmetro -p é "Será que o modo de operação será de modo de passagem?"

Se o valor do parâmetro -p for !, então todos os outros parâmetros listados são homenageados pelo driver do dispositivo durante o processamento do fluxo de dados. Da mesma forma, se o valor do parâmetro -p for +, ou sim, então todos os outros parâmetros serão ignorados durante o processamento do fluxo de dados.

O uso do comando splp para alterar os valores de parâmetro do driver de dispositivo da impressora não afeta o funcionamento do spooler. O comando splp afeta comandos como cat quando eles são usados para acessar o driver do dispositivo diretamente, contornando o spooler. Por exemplo, o comando

cat /etc/motd > /dev/lp0

abre /dev/lp0 e grava o conteúdo da "mensagem do dia" diretamente para a impressora. A saída na impressora é formatada semelhante a exemplo a seguir:

This is a test version of /etc/motd, used to demonstrate
what happens when a printer device driver, such as
/dev/lp0, is placed into or taken out of passthru mode.
Printers will print either exactly what they are sent,
if you set the job conditions up correctly, or, on the
most current printers, you may be able to direct the
printer to perform certain mappings for you.
There are no carriage returns in
this file, and the only blank line occurs
immediate before this one.

Percebem que o parâmetro -r dita o mapeamento de cada linhação para um linefeed e retorno de transporte se o valor de -p for !. Isso é necessário como a maioria dos sistemas operacionais baseados em UNIX só usam linefeeds; ao contrário do DOS ou OS/2 ou de outros sistemas operacionais, em sistemas operacionais baseados em UNIX uma linhagem implica em um retorno de transporte. Enquanto isso funciona bem com editores de texto e em outras situações semelhantes, ele não funciona com impressoras. As impressoras imprimem apenas os dados que são enviados. Por exemplo, emitindo os dois comandos

splp -p+ lp0
cat /etc/motd > /dev/lp0

resultados na saída semelhantes aos seguintes aparecendo na impressora.

This is a test version of /etc/motd, used to demonstrate
what happens when a printer device driver, such as
/dev/lp0, is placed into or taken out of passthru mode.
Printers will print either exactly what they are sent,
if you set the job conditions up correctly, or, on the
most current printers, you may be able to direct the
printer to perform certain mappings for you.
There are no carriage returns in
this file, and the only blank line occurs
immediately before this one.

No primeiro exemplo, todas as configurações do driver de dispositivo são honradas. Em particular, o mapeamento de uma linhagem para uma linhagem e um retorno de carro é ligado. Quando os drivers do dispositivo estão escrevendo caracteres para a impressora física, ele envia um retorno de carro após cada linhagem. Ele também homenageia as configurações para largura da página.

No segundo exemplo, o driver de dispositivo se limita a simplesmente escrever cada caractere de byte único de /etc/motd para a impressora física, sem que ocorra qualquer mapeamento ou outra modificação do fluxo de dados. Quando a primeira frase de /etc/motd termina, o linefeed derruba a cabeça de impressão reta em uma linha; não há retorno de carro para mover o cabeçote de impressão de volta para a margem esquerda. As primeiras quatro letras da palavra " impressora, prin, são impressas. Nesse ponto a impressora em si, não o driver de dispositivo, determina que a margem direita foi alcanada e assim imprime um retorno de carro, retornando o impresso para a margem esquerda. A impressão continua com o próximo caractere no fluxo de dados.

No segundo exemplo, a tarefa nem sequer é impressa até que o botão de reset na impressora seja pressionado. Isso porque a impressora não recebeu data (caracteres) suficiente para ejetar automaticamente uma página, e nenhum formfeeds foi enviado para a impressora para fazer com que ele ejete a página; o parâmetro -f no driver do dispositivo é ignorado.