Quando tento enviar arquivos brutos (como arquivos PCL) para minha impressora de rede, a fila do CUPS fica confusa e a impressora fica "desativada", mesmo se eu usar comandos como "lpr -l" ou "lpr -o raw".
Acho que talvez o PPD esteja estragando tudo porque o PPD da impressora diz especificamente "Postscript (recomendado)" em sua descrição e, se enviar postscript para ele, funciona bem.
Não consigo enviar diretamente para a impressora como um dispositivo porque ela está em rede.
PCL e Postscripts são dois protocolos de impressão concorrentes.
Se a impressora suportar ambos os protocolos, você deve ter definido diferentes filas no CUPS com diferentes PPDs/diferentes formas de falar com as impressões.
Você pode tentar falar com a impressora via IPP.
Se o modelo específico da impressora fala apenas Postscript, você não precisa enviar PCL para ele.
Você pode usar
lpr -o raw pcl-file
para enviar dados para a impressora sem nenhuma modificação feita nela. Na verdade, esse uso é tão comum que existe uma opção separada para ele:lpr -l pcl-file
(-l
é equivalente a-o raw
).Depois de lutar com isso por um longo tempo (cerca de um mês), descobri que basicamente o lpr/CUPS é algum tipo de lógica de dano cerebral que faz com que ele falhe com impressoras em rede. O problema é todo o paradigma de impressora "desativada/ativada" que faz com que uma impressora se torne inutilizável assim que o lpr se torna confuso, o que deve acontecer em algum momento. Como um usuário precisa ter privilégios de superusuário para diagnosticar problemas como esses, o lpr é essencialmente inutilizável para qualquer pessoa em um ambiente de grupo de trabalho com usuários não privilegiados.
A maneira como resolvi meu problema foi escrever um pequeno programa em C que se conecta ao endereço IP da impressora na porta 9100, abre o arquivo PCL para imprimir somente leitura, copia o arquivo para o socket de conexão, depois fecha a conexão e o arquivo. Isso funciona perfeitamente todas as vezes para mim. Então, basicamente, use qualquer capacidade de programação que você tenha para fazer isso se quiser imprimir um arquivo bruto. Você provavelmente poderia até fazer isso em bash ou csh.