Impressão EpsonLX300+ [RESOLVIDO]

13. Re: Impressão EpsonLX300+ [RESOLVIDO]

Lucas Rodrigues
Luka_Souza

(usa Outra)

Enviado em 06/12/2012 - 22:28h

Teixeira escreveu:

Desculpe, pois sou do tempo em que a gente aprendia TAMBÉM com "histórias e sermões".
Caso você não tenha realmente entendido o que eu disse, o detalhe é que mesmo se você instalar corretamente no Linux - o que você já deve ter conseguido fazer - estará sujeito a problemas de dentro do software, que muito provavelmente não foi feito para trabalhar no ambiente pretendido por sua empresa.
Use essa informação como bem entender. Se for útil, tudo bem, e se não for, simplesmente desconsidere.
Boa sorte!


Teixeira obrigado pelo sermão, hehehehe, mas ainda não solucionei a charada, me desculpa se fui grosso ou rude, é a pressão de se trabalhar com TI.

Vlw




  


14. Re: Impressão EpsonLX300+ [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/12/2012 - 22:49h

Eu ainda não entendi, e gostaria de entender para poder ajudá-lo.

A primeira dúvida é como a impressora estava ligada ao sistema: diretamente, ou via rede? E como estava a configuração da porta: UNC, nome da fila, emulação de LPTn ou LPT física, real? E como a aplicação enviava os dados para a impressora: via rotinas de impressão do Windows, ou tratando a LPTn como arquivo, e mandando bytes pelo file handler associado, ou ainda fazendo I/O de baixo nível via instruções IN e OUT do Assembly?


15. Re: Impressão EpsonLX300+ [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 07/12/2012 - 09:02h

Não se preocupe, pois eu já passei por isso, e sei como era estar sob muita pressão.
Hoje estou aposentado (da TI) mas ainda me lembro de muitos sufocos como esse.
Mas parece que o colega Paulo1205 já encontrou o fio da meada.
É por aí mesmo.
Está faltando agora você ter o seu momento de sair gritando "eureka!!!!".

Às vezes a solução está diante de nós, e depois do caso resolvido, ficamos imaginando "por que eu não pensei nisso antes?"
Infelizmente não existe uma receita de bolo para encontrar problemas específicos.
O que posso recomendar é método, perseverança e conhecimento, coisas que essa profissão nos exige e que são portanto indispensáveis.
Procure entender a situação com a maior profundidade possível e, apesar do tempo escasso (em TI nunca se tem tempo "sobrando", está sempre "faltando"), procure estar calmo a todos os momentos.
Obs: Isso não é um sermão. rsrs


16. Re: Impressão EpsonLX300+ [RESOLVIDO]

Lucas Rodrigues
Luka_Souza

(usa Outra)

Enviado em 07/12/2012 - 09:07h

paulo1205 escreveu:

Eu ainda não entendi, e gostaria de entender para poder ajudá-lo.

A primeira dúvida é como a impressora estava ligada ao sistema: diretamente, ou via rede? E como estava a configuração da porta: UNC, nome da fila, emulação de LPTn ou LPT física, real? E como a aplicação enviava os dados para a impressora: via rotinas de impressão do Windows, ou tratando a LPTn como arquivo, e mandando bytes pelo file handler associado, ou ainda fazendo I/O de baixo nível via instruções IN e OUT do Assembly?


paulo1205 vamos lá.

1 - Esta ligada via rede, a impressora esta em um computador com windows 7, instalada e devidamente configurada nele, no meu Ubuntu está configurada apontando pra ela, ou seja, via rede.

2 - Essa não sei te responder.

3 - Tratando a LPT como arquivo


Aguardo sua resposta.

Obrigado


17. Re: Impressão EpsonLX300+ [RESOLVIDO]

Lucas Rodrigues
Luka_Souza

(usa Outra)

Enviado em 07/12/2012 - 17:27h

paulo1205 escreveu:

O fato de a aplicação abrir LPT1 e escrever diretamente nela é chave para resolver o problema.

Você deve criar um mapeamento de LPT1 para o Wine, colocando uma entrada chamada "lpt1" dentro do diretório .wine/dosdevices. A documentação do Wine fala em links simbólicos para um dispositivo local, como /dev/parport0 ou coisa parecida, mas pode ser outro tipo de arquivo, até mesmo um arquivo local, inicialmente vazio, que você depois poderia copiar para outro lugar ou mesmo imprimir por meio de outro programa. Com isso, o que a aplicação imprimir será direcionado para esse arquivo. Só que, dependendo de como o arquivo for aberto -- e eu não conheço sua aplicação nem a WinAPI para dizer como será no seu caso -- a cada vez que a aplicação abrir o arquivo novamente, pode ser que o conteúdo anterior seja perdido.

Eu fiz um teste aqui que funcionou parcialmente (i.e. funcionou para tudo o que eu testei via linha de comando (wineconsole cmd), mas imprimia uma mensagem de erro na janela de emulação de console assim que terminava de imprimir), e que pode ser a resposta final para você. Para tanto, seu Linux já deve ser capaz de imprimir com sucesso no servidor Windows via CUPS.

Essa solução foi a seguinte: em lugar de criar um arquivo ou link simbólico, eu criei uma FIFO com o comando mkfifo. Logo em seguida, eu rodei o lpr, para obter dados dessa FIFO e jogar na minha fila de impressão. Esse lpr foi executado em loop, de modo que impressões sucessivas, tanto dentro da mesma sessão como em sessões diferentes, funcionaram corretamente.

$ mkfifo ${HOME}/.wine/dosdevices/lpt1
$ lpr -o raw -P myprinter ${HOME}/.wine/dosdevices/lpt1


No meu caso, minha fila de impressão myprinter está na rede Windows, e o CUPS está configurado para usá-la. Acho que é semelhante ao que você tem por aí. Você só teria de trocar o nome da fila (aliás, se só tiver uma impressora ou uma que esteja configurada como impressora padrão, pode até omitir os argumentos -P e nome_da_fila). A opção "-o raw" é importante para que o CUPS não tente interpretar o formato dos seus dados para pré-renderizar a página para você (suponho que a aplicação já envie os comandos da EPSON para imprimir os campos de formulário (nota fiscal?) nas posições definitivas).


paulo1205, obrigado por você esta me ajudando, desde já agradeço, mas algo não está dando certo no meu.

A impressora está em um PC c/ Windows 7, está instalada pela USB, e no meu Ubuntu está pegando a configurando via compartilhamento na rede com o CUPS. No meu Wine não possui esse diretório lpt1, nem USB, nada de esteja relacionado a algo de impressora, ou outros periféricos, só para constar, de qualquer um dos dois que eu mandar imprimir, imprime normalmente, tanto do próprio Ubuntu, quanto do Wine. Alguma luz? Estou dando bobeira em algo?

Mais uma vez agradeço, obrigado.


18. Re: Impressão EpsonLX300+ [RESOLVIDO]

Paulo
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ê.


19. Re: Impressão EpsonLX300+ [RESOLVIDO]

Lucas Rodrigues
Luka_Souza

(usa Outra)

Enviado em 08/12/2012 - 09:14h

paulo1205 escreveu:

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ê.


paulo1205, não sei onde eu estou pecando, mas alguma coisa estou fazendo muito errado. A impressão está aparecendo na fila de impressao do CUPS, mas está como retido, toda impressao que eu mando por minha aplicação está ficando assim.

Alguma permissão que eu não tenha dado?

Desde já agradeço.


20. Re: Impressão EpsonLX300+ [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/12/2012 - 09:52h

Só da´problema quando você imprime de dentro do Wine, ou aquilo que eu colocquei no item 1 do passo-a-passo também fica retido na fila? Se você mandar o CUPS imprimir uma página de testes pela interface Web/KDE/Gnome, ela sai impressa, ou também fica na fila?

Ao exibir a fila e ver que o job está retido, ele diz o motivo por que está retido? Se você fechar o aplicativo, o job continua retido?


21. Re: Impressão EpsonLX300+ [RESOLVIDO]

Lucas Rodrigues
Luka_Souza

(usa Outra)

Enviado em 08/12/2012 - 10:33h

paulo1205 escreveu:

Só da´problema quando você imprime de dentro do Wine, ou aquilo que eu colocquei no item 1 do passo-a-passo também fica retido na fila? Se você mandar o CUPS imprimir uma página de testes pela interface Web/KDE/Gnome, ela sai impressa, ou também fica na fila?

Ao exibir a fila e ver que o job está retido, ele diz o motivo por que está retido? Se você fechar o aplicativo, o job continua retido?


paulo1205, na verdade consegui arrumar, realmente era permissão do usuário, heheheh, deu certinho, a única coisa que eu precisava agora, é não ter que ficar abrindo o terminal e ter que colocar o comando "while : ; do lpr -o raw -P....", estou tentando colocar no boot do sistema mas não está dando muito certo. Mas mesmo assim ja ajudou demais, muito obrigado mesmo, que Deus te abençoe.


22. Re: Impressão EpsonLX300+ [RESOLVIDO]

Lucas Rodrigues
Luka_Souza

(usa Outra)

Enviado em 21/05/2013 - 18:31h

Para quem precisar algum dia, o comando que utilizando é este abaixo:

#!/bin/bash

echo "Informe o nome do usuário onde será/está parametrizado o wine: "
read usuario

cd /home/$usuario/.wine/dosdevices
rm -Rf lpt1
mkfifo lpt1
chmod 777 lpt1

echo "Informe a impressora parametrizada no seu sistema operacional: "
read impressora

echo -e "cd /home/"$usuario"/.wine/dosdevices\nwhile : ; do lpr -o raw -P " $impressora " lpt1; done" > /etc/init.d/imp_adm.sh
chmod 777 /etc/init.d/imp_adm.sh

update-rc.d imp_adm.sh defaults


23. Re: Impressão EpsonLX300+ [RESOLVIDO]

Marcos Felipe
plimo263

(usa Ubuntu)

Enviado em 16/05/2014 - 17:35h

Luka Souza obrigado pelo shell-script me ajudou muito aqui. Essa dica foi otima .

valeu



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts