paulo1205
(usa Ubuntu)
Enviado em 07/12/2012 - 23:53h
Siga o seguinte passo-a-passo:
1) Verifique se o seu Linux consegue imprimir no Windows via CUPS através da linha de comando (por exemplo: no shell, digite "ls -la /tmp | head | lpr -P
nome_da_fila", para imprimr as primeiras dez linhas da listagem do diretório /tmp). Isto tem de funcionar, por todo o resto depende disso.
2) Entre diretório
home do usuário que executa o Wine (por exemplo, com "cd /home/
fulano").
3) Entre no subdiretório
.wine/dosdevices ("cd .wine/dosdevices").
4) Veja se existe dentro desse subdiretório um arquivo ou diretório chamado
lpt1. Se existir, REMOVA-O (por exemplo: "rm -Rf lpt1") ou troque o nome para outra coisa (por exemplo: "mv lpt1 lpt1_desativado").
5) Crie um FIFO chamado
lpt1 por meio do comando
mkfifo ("mkfifo lpt1").
6) Execute o seguinte comando: "while : ; do lpr -o raw -P
nome_da_fila lpt1; done".
7) Noutra janela, chame a sua aplicação por meio do Wine. Tente enviar uma impressão por dentro da aplicação. Deveria funcionar (eu testei chamando a aplicação "wineconsole cmd", e dentro dela executei o comando "dir > lpt1", e a impressão saiu, apesar de uma mensagem de erro mostrada no console ao final da impressão).
Para você saber, um FIFO é um tipo especial de arquivo que permite que dois processos que não têm parentesco comum se comuniquem. Um ou mais processos podem escrever no FIFO, e um outro processo recebe todos os dados que foram escritos, exatamente na mesma ordem em que eles foram escritos.
No caso acima, cria-se um FIFO e faz-se com que o
lpr, que é o comando do CUPS que recebe dados e os envia para a fila de impressão, funcione como leitor dos dados colocados no FIFO. Quando você chama o seu aplicativo de dentro do Wine e o manda imprimir para LPT1, o Wine vai direcionar os dados para o FIFO criado como
lpt1 dentro de
.wine/dosdevices. Assim que seu aplicativo finalizar a impressão, fechando o file handler que estava aberto em LPT1, o lado leitor do FIFO recebe a sinalização de que não há mais dados, e o CUPS finaliza a remessa para a fila de impressão remota.
Por fim, note que eu executo o
lpr dentro de um laço de repetição sem fim. Isso é para garantir que futuras novas impressões continuarão sendo tratadas.
Teste isso e informe os resultados que você tiver. Como eu disse, para mim foi o suficiente para conseguir impressões bem sucedidas de pequenos volumes, mas não vejo razão autoevidente para que não funcione também para você.