Como adicionar uma impressora nula, falsa e falsa no CUPS?

12

Estou escrevendo um software que suporta várias impressoras. Para testá-lo, preciso adicionar várias impressoras ao meu servidor CUPS. Como eu posso fazer isso?

Quero adicionar algumas impressoras falsas que enviarão os trabalhos diretamente para / dev / null. Dessa forma, posso observar a lista de "trabalhos concluídos" na interface do CUPS e observar se meu software está usando a impressora correta para cada trabalho.

Denilson Sá Maia
fonte
não está correto "lpadmin -p lp0 -E -v / dev / null -m raw"
Ashika Umanga Umagiliya
1
Consulte também a criação de uma impressora fictícia .
Wilfred Hughes

Respostas:

11

Uma solução é instalar cups-pdf . Ele adiciona uma impressora virtual que grava arquivos PDF. Existem vários tutoriais na web sobre como instalá-lo e configurá-lo; desde que eu uso o Gentoo, eu li o Gentoo-wiki , que também menciona o Sabayon wiki .

A impressora virtual cups-pdf possui um arquivo de configuração /etc/cups/cups-pdf.confe, por padrão, todos os arquivos PDF são gravados /var/spool/cups-pdf/${USER}.

(Nota: no Ubuntu, ele grava em ~ / PDF /)

Existem algumas limitações, no entanto:

  • Como existe apenas um arquivo de configuração, várias impressoras PDF serão salvas no mesmo diretório.

  • É impossível imprimir dados "brutos" (usando, por exemplo, lpr -o raw). Mesmo o envio de um arquivo PDF como um trabalho bruto não funcionará. Trabalhos de impressão brutos gerarão um arquivo PDF em branco com apenas uma página vazia.

Mesmo com essas limitações, ele funciona perfeitamente para minhas necessidades.


Nota de rodapé: se o usuário estiver usando o Gnome ou imprimindo em um aplicativo GTK +, já haverá uma pseudo-impressora "Imprimir em arquivo" na caixa de diálogo de impressão. Portanto, por que o usuário ainda deseja adicionar uma impressora PDF virtual? Aqui estão algumas razões:

  • Esse "Print to File" é específico para o GTK + e não está disponível para aplicativos que não sejam do GTK +. (talvez o KDE tenha um recurso semelhante, mas não tenho certeza)
  • Permite gerar um PDF a partir de "aplicativos" do Flash projetados para impressão. Por exemplo, o PocketMod .
  • A adição de uma impressora virtual ao CUPS possibilita testar a impressão usando scripts de shell ou outro software que fala diretamente com o CUPS. Isso é especialmente útil para desenvolvedores ao testar seus aplicativos.
  • É possível "compartilhar" esta impressora virtual com a rede local. Não é exatamente útil, mas é possível.
  • É possível anexar um comando de pós-processamento a ser executado logo após o salvamento do arquivo PDF.
Denilson Sá Maia
fonte
9

O Fórum de Copas tem uma resposta mais completa / precisa para esta pergunta.

A resposta é que o URI do dispositivo deve ser definido como arquivo: / dev / null

Então, na minha configuração do Ubuntu:

  • URI do dispositivo: arquivo: / dev / null
  • Marca e modelo: Impressora Raw local

O que funciona perfeitamente para mim.

Procurei no fórum Cups novamente e encontrei o seguinte:

Fórum Configuração da impressora nula em copos

No seu cupsd.conf:

FileDevice yes

Configuração da impressora

lpadmin -p nowhere -E -v file:/dev/null

Teste de impressora

who |lp -d nowhere
Andrew Russell
fonte
Estou apenas olhando para a minha impressão agora: detalhes finos, cores vibrantes que simplesmente saltam da página para mim. ... hey waitaminute ....
Andrew Russell
Obrigado. Eu precisava de uma impressora fictícia na minha máquina virtual para capturar algumas instruções. :)
njallam
7

Você pode criar uma impressora que saídas para /dev/nullcom lpadmin:

$ sudo lpadmin -p myprinter -E -v file:///dev/null

Isso será gravado /etc/cups/printers.conf, mas você também pode exibir impressoras com lpstat:

$ sudo lpstat -s
myprinter accepting requests since Thu 22 Jan 2015 11:04:46 AM GMT
system default destination: myprinter
device for myprinter: ///dev/null

Note que você pode precisar habilitar o FileDevice em /etc/cups/cupsd.conf nas distros antigas do Linux .

Para tornar sua nova impressora o padrão, use lpoptions:

$ sudo lpoptions -d myprinter
Wilfred Hughes
fonte
Como removê-lo?
Richard
@ Richard Use lpadmin -x myprinterou a interface da web.
Torkel Bjørnson-Langen
2

Uma das melhores soluções é usar ippserver. Vem com CUPSv2.2.2e mais alto. Como alternativa, você pode obter o projeto aqui: Implementações de amostra de IPP .

De acordo com a descrição na página do manual :

O ippserver é um servidor IPP (Internet Printing Protocol) simples, em conformidade com as especificações IPP Everywhere e IPP Shared Infrastructure Extensions (INFRA). Ele pode ser usado como um servidor de impressão independente e / ou um servidor de infraestrutura muito básico entre clientes IPP padrão e proxies IPP em conformidade com a especificação INFRA.

Para usá-lo, basta executar ippserver "My cool printer"e criar uma impressora virtual com o nome My cool printerpara você. Ele roda como um servidor da Web e escuta em portas específicas.

Caso precise de várias impressoras, você pode executar o servidor em várias portas usando ippserver "My other cool printer" -p 8888.

Você pode até fornecer atributos da impressora usando um arquivo de atributos. Por exemplo, sua impressora suporta, por padrão, impressões de alta qualidade, você pode adicionar o seguinte atributo no arquivo de atributos:

ATTR enum print-quality-default high

e execute o servidor usando:

ippserver "My high quality cool printer" -a attributes-file.txt

Referências:

  1. Amostra PWG IPP
  2. Página do manual CUPS ipptoolfile
Sahil Arora
fonte
1

Retirado de http://inai.de/linux/adm_virtualprinter :

Impressora virtual no CUPS

Para criar uma impressora no CUPS que não envia os dados para lugar nenhum (como /dev/null), existem várias maneiras. Esta página usa o socket:// método

Configure o xinetd primeiro

O que precisamos é do serviço TCP Discard na porta 9. O Xinetd o possui embutido, para que possamos usá-lo. Certifique-se de que a seguinte definição esteja disponível nos arquivos de configuração do xinetd, geralmente /etc/xinetd.d/discard. Ele deve conter um serviço como o seguinte:

    descartar serviço
        type = INTERNAL
        id = descarte-fluxo
        socket_type = stream
        protocol = tcp
        usuário = raiz
        espera = não
        desativar = não
        BANDEIRAS = IPv6 IPv4 
Execute rcxinetd reloadpara reler os arquivos de configuração e ativar o novo discardserviço. Ou use rcxinetd startse o xinetd ainda não estava ativo.

Impressora CUPS

Agora vá para o front-end da web do CUPS e adicione uma nova impressora. Como destino, use socket://localhost:9/, como impressora, escolha algo que pareça funcional, por exemplo, "HP 2500C Foomatic / pcl3". É tudo o que há para isso.

Golar Ramblar
fonte